仿微信相機拍攝預覽 MediaCodec硬編解碼
嘗試利用Android仿照微信相機完成一個拍攝錄製短視訊的功能:
- 利用Android camera 和 SurfaceView/">SurfaceView實時預覽
- 手動對焦、自動對焦、拍攝預覽照片
- 利用MediaCodec 硬編碼成H264視訊資料
- 使用AudioRecord 錄製音訊資料
- 利用MediaMuxer 混合AAC和H264打包成MP4檔案
- 利用MediaExtractor 分離MP4和MediaCodec硬解碼、TextureView播放視訊資料
網上也有很多仿微信相機的應用,不過基本上是使用 MediaRecord 錄製視訊,相對比較簡單。與他們不同的是,這裡我更想學習整個 MP4 的錄製流程,從採集、編碼、封包成 MP4 到解析、解碼、播放,這更能夠加深對音視訊的理解和後續的學習。
附帶的 ofollow,noindex">原始碼 ,具體的原始碼分析可以看 《仿微信相機 利用 MediaCodec API 從錄製 MP4 到解析播放》
最後完成的效果如下:

image.png
存在很多不足,主要是學習使用,並且在github上不同的分支有實現不同的功能,如利用opengl增加水印等。

增加水印.png
這部分是在以上的基礎上進行修改的:
- 利用GLSurfaceView進行預覽
- 增加PBO將外部紋理繪製成普通紋理,以及blend混合增加水印繪製層,同時可以控制到預覽層還是錄製層
- 藉助GLSurfaceView的EGL環境,共享EGLContext、和MediaCodec建立輸出的Surface結合,將GLSurfaceView的紋理,繪製到MediaCodec建立的Surface中,實現錄製視訊功能