Android(java方法)上實現mp4的分割和拼接 (一)


   最近正在處理android上的mp4切割問題。學習了很多mp4的知識,mp4文件按照編碼類型,分為mpeg-4,avc這兩種;這兩種類型的mp4在后面的處理中會有不同的地方。

            在Android系統下,MP4的分割大致有三種可選擇的方法,(1)FFmpeg框架,對視頻進行一幀一幀解碼編碼處理。(2)第三方java開源庫,比如優秀的mp4parser。(3)Android4.1中新加入的api:MediaCodec。

            以上三種方法都有自己的優劣勢,簡單介紹:

           (1)FFmpeg,需要做jni實現。編碼解碼可以裁剪任意長度視頻的任意中間長度區間,支持對視頻加入水印,配樂,濾鏡處理;支持裁剪屏幕尺寸。最致命的缺點是:

             效率低的難以忍受,大概是1s的視頻1.5S的處理時間,如果Android應用中這樣處理讓用戶等待完全找死行為。

             (2)mp4Parser。有非常詳細的資料和demo可以學習,是一個大牛的個人作品。但是它對視頻的裁剪處理非常粗糙,只能從關鍵幀進行裁剪。經過我測試:mpeg-4格式的mp4文件,大概2S-10S左右會有一個關鍵幀;avc格式的mp4文件大概0.3S有一個關鍵幀。

                很大的有點是運行效率非常高,可以忽略時間成本。

               但是這樣會引入很明顯的問題,如果你的業務需求需要准確截取,無論你是選擇上一個節點還是下一個,頭尾大概都會引入平均3-4S的長度誤差。這個誤差有時難以忍受。

              (3)mediaCodec是Android4.1才引入的。如果以來這個Lib進行操作,會導致4.1之前的版本無法使用。另外,需要說明,這個api以來很多C層和硬件層的實現,不要試圖將所有代碼分隔出來加到自己的項目中。

                下篇給出一個可行的方案來解決android上的mp4切割問題。

2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM