Android 短視頻採集之視頻斷點拍攝、回刪功能的實現方法總結

       之前接到公司的一個開發任務,要求模仿秒拍、美拍等App的短視頻拍攝功能。由於之前做過短視頻拍攝的特效、斷點拍攝等功能,所以起初覺在原來方法修改一下就能滿足需求了。但是仔細考察完需求,才發現有一個問題。

下圖我之前做斷點拍攝的一個方案:

視頻拍攝的斷點功能,只要在暫停拍攝的時候記下暫停時候的時間戳,然後在繼續拍攝的時候在送到複用器 Muxer 的時間戳裏面減去暫停的時長,即可得到一個斷點拍攝的視頻。

但是,回刪功能怎麼做呢?我原來想的是 用MediaMuxer 向前移動視頻文件的指針到上一個斷點的視頻幀處,但是,很抱歉,MediaMuxer 沒有提供這個指針回滾方法。

所以,我轉而採用了以下第二種方法。


Video Recoder 部分 即可以用 Android 系統 的 MediaRecoder 實現,也可以用 Camera API + AudioRecord + MeidaCodec 的方案實現。關鍵是後面的部分,如何把斷點拍攝的幾個視頻首尾拼接成一個完整的視頻呢,可以用ffmpeg concat 命令,形如 "ffmpeg -f concat -i filelist.txt -c copy output.mp4" 這樣,這中命令不會將音視頻解碼然後再編碼,而是將多個文件裏面的視頻和音頻數據分別抽離出來,首尾相接後,寫入到一個新的視頻中去。這個新的視頻,就是最終需要的拼接好了的視頻。當然,也可以用用安卓原生的MediaExtractor 和 MediaMuxer來實現拼接的功能。經過我的測試,採用MediaExtractor 和 MediaMuxer實現的拼接方案,其速度比ffmpeg方案要快一倍以上。

      有需求的同學可以關注這個開源工程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章