天天看點

EasyPlayer_Android RTSP安卓播放器直播畫面卡在第一幀問題修複

最近發現某些Android安卓手機在運作EasyPlayer播放視訊時,會停留在第一幀畫面,雖然有碼率預示着接收端沒有問題,但是畫面卻卡着不動.

EasyPlayer_Android RTSP安卓播放器直播畫面卡在第一幀問題修複

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

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

那逐一排查下.首先在媒體幀回調的地方下個斷點,發現的确有視訊幀接收到,并且視訊幀最終正常地push到解碼的隊列當中了,說明第一個假設不成立.

其次,我們看看解碼器,似乎也正常工作,沒有列印任何異常資訊.解碼線程也并未退出.那也第二個原因也初步排除.

第三步,重新播放下,跟進到解碼線程裡面.發現最終sleep時間大的驚人.解碼線程解完首幀後就一直在睡眠狀态了.再跟蹤一次,發現是硬解碼初始化失敗了,自動切換到軟解碼,而在軟解碼完成首幀解碼後,未把該幀的時間戳指派給時間戳,這樣實際上首幀時間戳為0了,後續視訊幀的時間戳與首幀時間戳相隔太大.sleep時間也随之變得很大.

這個bug較難出現,隻有某些手機在硬解碼出錯後,自動切換到軟解碼的情況下才會出現,但是大多數手機硬解碼都能正常工作.

找到問題後,解決了這個問題,就可以順利播放了.

對應的修改點代碼在:

https://github.com/EasyDarwin/EasyPlayer_Android/commit/3715840f6ce153d319c85da108eab2dac586e372

EasyPlayer RTSP播放器項目

EasyPlayer & EasyPlayerPro是由EasyDarwin團隊開發和維護的一個完善的流媒體播放器項目,目前支援Windows(支援多視窗、包含ActiveX,npAPI Web插件)、Android平台,iOS平台,視訊支援H.264,H.265,MPEG4,MJPEG,音頻支援G711A,G711U,G726,AAC,支援RTSP over TCP/UDP、RTMP、HTTP、HLS等多種協定,支援硬解碼,是一套極佳的流媒體全平台播放元件!

EasyPlayer Android版本經過了很多年的發展和疊代,已經非常穩定、完整,功能包括:直播、錄像、抓圖、RTP over UDP/TCP,支援指令集包括armv7a、armv8a、x86,應該說是目前市面上功能性、穩定性和完整性最強的一款RTSP播放器!

EasyPlayer RTSP Android播放器項目位址:

https://github.com/EasyDarwin/EasyPlayer_Android

擷取更多資訊

郵件:[email protected]

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

EasyPlayer_Android RTSP安卓播放器直播畫面卡在第一幀問題修複

繼續閱讀