天天看點

解決 Android PLMediaPlayer 個别視訊播放異常問題

      小菜最近一直在處理一個比較糾結的問題,項目中接入了七牛雲視訊SDK PLMediaPlayer

,七牛雲視訊SDK是很強大的一款三方視訊庫。

      小菜項目中需要展示的是 .mp4 格式的視訊,曾經遇到的問題包括:個别視訊有音頻但是看不到視訊,個别視訊無法播放等。小菜查了好久發現對問題解決的資料相對較少,僅記錄一下小菜處理的方式。

嘗試如下:

  1. 檢視運作官方 PLDroidPlayer Demo ,将有問題的視訊連結添加測試,當解碼方式換為 軟解碼 時,發現視訊都可以正常播放;當更換為硬解碼或 Auto 方式時确實有的視訊無法正常播放;
  2. 小菜大緻找到了問題方向,大概是設定的解碼方式有問題;

    小菜用的也是 Auto 方式,但是小菜不确認硬解碼解碼失敗的分割點在哪裡;于是把 Auto 方式 AVOptions.MEDIA_CODEC_AUTO 更換為軟解碼方式 AVOptions.MEDIA_CODEC_SW_DECODE;

AVOptions options = new AVOptions();
int codec = AVOptions.MEDIA_CODEC_SW_DECODE;
options.setInteger(AVOptions.KEY_MEDIACODEC, codec);
options.setInteger(AVOptions.KEY_PREPARE_TIMEOUT, 10 * 1000);
options.setInteger(AVOptions.KEY_LIVE_STREAMING, 0);
options.setString(AVOptions.KEY_CACHE_DIR, FileUtils.VideoCacheSD);
           
  1. 測試發現,基本各種格式的 .mp4 都可以播放,但是小菜又遇到了一個新的問題:有一個視訊播放卡頓,不是網絡影響,像一幀一幀的卡頓;但是在官網 Demo 中測試一切正常,然後兩邊對比,參數都一緻,很奇怪;
  2. 偶然機會同僚說會不會跟 NDK 有關系,因為應用為了生成的 apk 包比較小,隻用了 "armeabi",于是按照官網的 Demo 放開所有的 NDK 方式;再次測試視訊可以正常播放。
ndk { abiFilters "armeabi", "armeabi-v7a", "arm64-v8a" }
           

      至此,七牛雲 PLMediaPlayer 個别視訊無法播放的問題基本已經解決,相對也犧牲了一些記憶體。

      小菜也聯系了一下七牛雲的專業客服,小菜這個别的視訊格式也确實有點小問題,客服小哥建議再視訊播放時壓縮為正常的 .mp4 格式較好。

      Tips: 小菜在測試過程中偶遇

ExoPlayer

也是一款很強大的視訊播放器,推薦一下!

小菜了解的軟解碼與硬解碼的差別在于:

【軟解碼】使用的是 CPU 方式進行編碼,是以性能消耗較大,電量等方面消耗也較大,時間上消耗略長;解碼支援格式比較全面;

【硬解碼】使用的是非 CPU 方式進行編碼,性能較高,解碼時間短;但是解碼支援的格式相對較少;

【Auto 解碼】七牛雲的文檔說明,在硬解碼失敗的情況下會自動更換為軟解碼。

      小菜對于視訊的了解還很初級,還有很多不清楚和不了解的地方,如果有不對的地方還希望多多指出。以下是小菜公衆号,歡迎閑來吐槽~

公衆号