2016-09-28 126 views
8

我正在開發一個像whatsApp這樣的聊天應用程序,我想在將代碼上傳到服務器之前轉換媒體文件,我已經經歷瞭如此多的鏈接,但無法確定我應該使用哪種方法使用,是否有任何在android中轉碼的直接方式?在Android設備中轉碼音頻/視頻/圖像文件

  • FFMPEG我發現這是非常CPU密集處理,它會消耗更多的電量

  • 媒體編解碼我想用mediacodec,但沒能得到適當的措施來辦轉碼瞭解過程。

Best link to give idea about transcoding

Library to transcode using media codec(它有很多bug)

回答

1

我們在我們的視頻編輯應用程序中使用了這兩種實現。基本上我們使用MediaCodec實現,如果android版本> = 4.3,則使用FFMPEG。

使用FFMPEG的問題:

  1. 正如你所說,CPU密集處理從而消耗更多的電池
  2. X264編碼器根據GPL許可,所以你可能需要使用OpenH264編碼器,而不是隻支持基線資料,因此視頻質量並不是最好的
  3. 由於所使用的軟件的編碼器,處理速度是相對緩慢的,至少相對於MediaCodec實施

MediaCodec也有一些缺點雖然,例如:

  1. 如果你想要做轉碼,Android版本必須> = 4.3,除非你要處理的彩色格式的轉換自己,這是完全混亂,因爲每個供應商可能有它自己的顏色格式實現。 (從4.3開始,MediaCodec支持使用輸入表面進行編碼)
  2. 硬件編碼器對於不同型號的行爲可能會有所不同。 (例如,某些編碼器可產生未由Android MediaMuxer還支持B幀,所以你可能需要使用的ffmpeg的複用的部分)

所以我說,如果你只支持新的Android版本,你應該使用mediacodec,但如果您想要安全(更容易編寫適用於所有設備的代碼)並且不介意性能,請使用FFMPEG和OpenH264

0

Android的MediaCodec是一個相對更好的方式來在客戶機上轉碼,因爲它使用自己的低級緩衝處理。但是它並沒有像FFMpeg那樣提供精細的調整自由度。 對於MediaCodec源代碼,它也是CPU密集型的,用於保存緩衝區並處理它們,但實際上它的方式要小於FFmpeg。