Decoder init failed: OMX.qcom.video.decoder.avc

問題描述

使用Exoplayer,在低端機型上播放視頻時拋出異常;視頻爲使用高端機型自帶錄屏軟件錄製,全部參數開啓到最大,視頻時長6-8s,大小爲16-18M,且無音軌。

拋出異常
Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, null, video/avc, null, -1, null, [1080, 2248, -1.0], [-1, -1])
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodecWithFallback(MediaCodecRenderer.java:753)  
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:474)  
        at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.setSurface(MediaCodecVideoRenderer.java:425)  
        at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.handleMessage(MediaCodecVideoRenderer.java:387)  
        at com.google.android.exoplayer2.ExoPlayerImplInternal.deliverMessage(ExoPlayerImplInternal.java:871)  
        at com.google.android.exoplayer2.ExoPlayerImplInternal.sendMessageToTarget(ExoPlayerImplInternal.java:842)  
        at com.google.android.exoplayer2.ExoPlayerImplInternal.sendMessageInternal(ExoPlayerImplInternal.java:824)  
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:333)  
        at android.os.Handler.dispatchMessage(Handler.java:98)  
        at android.os.Looper.loop(Looper.java:135)  
        at android.os.HandlerThread.run(HandlerThread.java:61)

問題定位
一、視頻問題

1.因爲錄屏視頻的分辨率很高,碼率很大,開始懷疑可能是手機不支持解析此類視頻,且在Github上找到了對應的bugDecoder init failed: OMX.qcom.video.decoder.avc #3282;

或是錄屏視頻缺少關鍵幀,需要調整播放器的設置Decoder init failed: OMX.qcom.video.decoder.avc on lg q6 for HD hls stream link

結果:視頻可以在手機的播放器中播放,且無卡頓,先排除視頻分辨率問題

2.視頻間進行比較,發現錄屏視頻沒有音軌,即無音頻編解碼器。使用ffmpeg重新輸出視頻,使其攜帶音軌。

結果:Exoplayer仍然無法播放

二、Exoplayer問題

1.Huawei M3: MP4 can’t play
定位到問題爲低端機型硬件解碼不支持解析該類視頻,需要使用軟件解碼的方式

結果:可以播放,但是卡頓很明顯,且由於卡頓,視頻只會播放一半的長度

2.Plumb MediaCodecRenderer.enableDecoderFallback through DefaultRenderersFactory
將Exoplayer升級到2.10.1後,官方去掉了增加多重解碼方式的接口;該問題已提交bug,在兩天前被修復,但是未發佈新版本;故先使用2.9.6,等待新release再替換


總結

Bug定位耗時兩天至三天,在此記錄尋找bug的過程以及解決方案,希望能幫助到其他小夥伴們。

另:Exoplayer仍然在開發,Github上bug也不少。但是更新的速度也很快,谷歌的開發大大們也在積極的配合反饋者們定位bug、修復bug,兼容性和穩定性也在越來越好。大家在遇到問題的時候,也要學會質疑播放器本身是否會有問題,在Github上和作者交流會更好~

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