8K播放網絡全終端播放器H5播放器網頁直播/點播播放器EasyPlayer-Android直播畫面卡在第一幀問題修復

EasyPlayer-Android播放器是一款可針對RTSP、RTMP、RTSP&RTMP協議進行過優化的流媒體播放器,其中我們引以爲傲的兩個技術優勢就是起播速度快和播放延遲低。

在我們用安卓手機進行EasyPlayer的測試時,發現某些手機在運行EasyPlayer播放視頻時,畫面會停留在第一幀,雖然有碼率預示着接收端沒有問題,但是畫面卻卡着不動。

 

分析問題

一般來講,這個現象有三種原因導致:

  • 沒有接收到視頻幀;
  • 解碼器出錯,只解出了第一幀圖像;
  • 時間戳計算有誤,導致長時間sleep。

我們逐一排查下。

首先在媒體幀回調的地方下個斷點,發現的確有視頻幀接收到,並且視頻幀最終正常地push到解碼的隊列當中了,說明不是第一個原因。

其次,我們看看解碼器,似乎也正常工作,沒有打印任何異常信息,解碼線程也並未退出。那麼第二個原因也初步排除。

最後,我們嘗試重新播放,跟進到解碼線程裏面,發現最終sleep時間大的驚人,解碼線程解完首幀後就一直在睡眠狀態了。再跟蹤一次,發現是硬解碼初始化失敗,自動切換到軟解碼,而在軟解碼完成首幀解碼後,未把該幀的時間戳賦值給時間戳,這樣實際上首幀時間戳爲0了,後續視頻幀的時間戳與首幀時間戳相隔太大,sleep時間也隨之變得很大。

解決問題

這個bug實際上比較少見,只有某些手機在硬解碼出錯後,自動切換到軟解碼的情況下才會出現,現如今大多數手機硬解碼都能正常工作。如出現這種原因,我們只需將時間戳恢復正常即可。

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