ExoPlayer播放器在瑞芯微rk3228CPU播放H264編碼格式1080P媒體資源編解碼器解碼失敗問題

華爲E6108V9E部分機頂盒播放H264編碼格式1920*1080分辨率媒體資源編解碼器解碼失敗問題總結**

設備信息:華爲E6108V9E cpu:rk3228 arm-v7 API19

在使用ExoPlayer播放器播放H264編碼格式,1920*1080分辨率的媒體資源時播放失敗

添加探針深入分析發現:

allRenderersReadyOrEnded = false ——> renderedFirstFrame = false ——> MediaCodec.dequeueOutputBuffer =-1 

分析:dequeueOutputBuffer爲從編碼器獲取一個輸出緩存區並返回索引值,返回-1表示未獲取到輸出緩存組或超時

1.首先設置超時時間爲1000000Us,未能解決問題,排除讀取解碼器數據超時

2.懷疑是否數據未存入編解碼器輸入緩存數組,經排查發現dequeueInputBuffer返回值爲正數,排除

3.是否配置編解碼器配置參數錯誤,結合網絡查詢資料分析,rk3228系列cpu在處理H264/1080p媒體資源可能出現編碼位數16位對齊問題

 

解決方案:在MediaCodecVideoRenderer的getMediaFormat方法中把原來的

frameworkMediaFormat.setInteger(MediaFormat.KEY_MAX_HEIGHT, codecMaxValues.height);

改爲

if (codecMaxValues.height%16>0){
  frameworkMediaFormat.setInteger(MediaFormat.KEY_HEIGHT, (codecMaxValues.height/16+1)*16);
  frameworkMediaFormat.setInteger(MediaFormat.KEY_MAX_HEIGHT, (codecMaxValues.height/16+1)*16);
}else {
      frameworkMediaFormat.setInteger(MediaFormat.KEY_MAX_HEIGHT, codecMaxValues.height);
}

成功解決問題!

 

參考資料:https://stackoverflow.com/questions/28291204/something-about-stagefright-codec-input-format-in-android

https://forum.kodi.tv/showthread.php?tid=152005&pid=1344619#pid1344619

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