在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