Android视频拍摄功能总结
主要變量
WindowSurface mDisplaySurface //對Surface的包裝
WindowSurface mEncoderSurface
渲染器: FullFrameRect -->
1.初始化
1.1 初始化Camera
1.2 在SurfaceView.surfaceCreate()
1.2.1 初始化OpenGL ES 2.0
根據 mEGLDisplay , EGLContext 這2個變量初始化 EglCore
1.2.2 將Surface和OpenGL ES 2.0綁定
調用 EGL14.eglCreateWindowSurface(surface) 綁定
EGL14.eglCreateWindowSurface(surface) 封裝在 EglCore
surface = SurfaceView.Holder.surface
最終創建出 WindowSurface mDisplaySurface
1.2.3 創建渲染器
初始化 片元著色氣 , 頂點著色氣 和 著色器運行時所需的變量名 ---> 生成mFullFrameBlit
mFullFrameBlit 保有每幀繪制時所需的變量
mFullFrameBlit 可以生成一個紋理ID
1.2.3 生成一個Texture
SurfaceTexture mCameraTexture = mFullFrameBlit.createTextureObject --->
1.2.4 添加 幀更新監聽器(onFrameAvailable)
1.2.5 將Camera和Texture綁定
Camera.setPreviewTexture(mCameraTexture)
1.2.6 打開Camera,此時onFrameAvailable就會被循環調用
?
2.幀的更新過程(onFrameAvailable的調用)
2.1 更新SurfaceView
抓住camera的下一幀
把這一幀更新到SurfaceView
首先我們吧這個Surface打住,以便可以進行讀寫操作。
當 mCameraTexture.updateTexImage() ,從Camera中獲取數據更新到Texture
OpenGL ES 2.0 的渲染器,根據這個TextureID做渲染
完了以后將OpenGl ES 2.0 中的數據移到Surface中 EGL14.eglSwapBuffers(mEGLDisplay, eglSurface)
2.2 錄像輸出到MediaCodec.Surface
大致流程跟
首先我們吧這個Surface打住,以便可以進行讀寫操作。
這里注意:我們不需要調用updateTexImage()
OpenGL ES 2.0 的渲染器,根據這個TextureID做渲染
交給MideaCodec做編碼(這是一個異步操作)
添加一個時間軸
完了以后將OpenGl ES 2.0 中的數據移到Surface中
?
3.開始拍攝
3.1 初始化MediaCodec
3.2 將Surface和OpenGL ES 2.0綁定
1.2.2 Surface = MediaCodec.getInputSurface()
3.2 打開拍攝標記為,用以判斷是否執行2.2
?
4.結束拍攝
4.1 MediaCode.stop()
轉載于:https://www.cnblogs.com/jarvisyin/p/6486192.html
總結
以上是生活随笔為你收集整理的Android视频拍摄功能总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 针对于多线程概念的理解
- 下一篇: 34.16.159(zz)