仿微信相機(jī)拍攝預(yù)覽 MediaCodec硬編解碼

嘗試?yán)肁ndroid仿照微信相機(jī)完成一個(gè)拍攝錄制短視頻的功能:

  1. 利用Android camera 和 SurfaceView實(shí)時(shí)預(yù)覽
  2. 手動(dòng)對焦、自動(dòng)對焦、拍攝預(yù)覽照片
  3. 利用MediaCodec 硬編碼成H264視頻數(shù)據(jù)
  4. 使用AudioRecord 錄制音頻數(shù)據(jù)
  5. 利用MediaMuxer 混合AAC和H264打包成MP4文件
  6. 利用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)行修改的:

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

OpenGLES mediaCodec 預(yù)覽錄制視頻 添加水印

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容