問題描述
使用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上和作者交流會更好~