嘗試?yán)肁ndroid仿照微信相機(jī)完成一個(gè)拍攝錄制短視頻的功能:
- 利用Android camera 和 SurfaceView實(shí)時(shí)預(yù)覽
- 手動(dòng)對焦、自動(dòng)對焦、拍攝預(yù)覽照片
- 利用MediaCodec 硬編碼成H264視頻數(shù)據(jù)
- 使用AudioRecord 錄制音頻數(shù)據(jù)
- 利用MediaMuxer 混合AAC和H264打包成MP4文件
- 利用MediaExtractor 分離MP4和MediaCodec硬解碼、TextureView播放視頻數(shù)據(jù)
網(wǎng)上也有很多仿微信相機(jī)的應(yīng)用,不過基本上是使用 MediaRecord 錄制視頻,相對比較簡單。與他們不同的是,這里我更想學(xué)習(xí)整個(gè) MP4 的錄制流程,從采集、編碼、封包成 MP4 到解析、解碼、播放,這更能夠加深對音視頻的理解和后續(xù)的學(xué)習(xí)。
附帶的源碼,具體的源碼分析可以看《仿微信相機(jī) 利用 MediaCodec API 從錄制 MP4 到解析播放》
最后完成的效果如下:

image.png
存在很多不足,主要是學(xué)習(xí)使用,并且在github上不同的分支有實(shí)現(xiàn)不同的功能,如利用opengl增加水印等。

增加水印.png
這部分是在以上的基礎(chǔ)上進(jìn)行修改的:
- 利用GLSurfaceView進(jìn)行預(yù)覽
- 增加FBO將外部紋理繪制成普通紋理,以及blend混合增加水印繪制層,同時(shí)可以控制到預(yù)覽層還是錄制層
- 借助GLSurfaceView的EGL環(huán)境,共享EGLContext、和MediaCodec創(chuàng)建輸出的Surface結(jié)合,將GLSurfaceView的紋理,繪制到MediaCodec創(chuàng)建的Surface中,實(shí)現(xiàn)錄制視頻功能