播放失敗
導致播放失敗的原因,有很多種梭域,不一定是播放器本身的問題斑举,不過通過播放器,我們很容易反過來排查服務(wù)端或者推流端的問題病涨。下面我們會從播放失敗的表現(xiàn)富玷、播放問題排查工具、常見問題分析等多個方面展開討論既穆。
1. 播放失敗的表現(xiàn)
播放失敗的表現(xiàn)總結(jié)下來包括但不限于以下這些:
- 界面上一直顯示 “加載中”赎懦,或者提示播放失敗的錯誤
- 播放畫面卡死不動,但 UI 按鈕可以點擊
- 有聲音沒有畫面幻工,有畫面沒有聲音
2. 播放問題的排查工具
一旦我們遇到視頻播放不了铲敛,第一件事,就是要找?guī)讉€別的播放器也播放看看会钝,做一下對比測試伐蒋,或者對碼流做一些基礎(chǔ)分析,以便更好地定位問題的源頭迁酸,各個平臺比較常見的播放/分析工具有如下幾個:
2.1 命令行工具
ffplay先鱼,ffprobe,mediainfo奸鬓,hls-analyzer
等
2.2 網(wǎng)頁端工具
http://www.cutv.com/demo/live_test.swf
2.3 App 應(yīng)用
vlc焙畔,vplayer,mxplayer
等
2.4 Windows 工具
mp4info串远,F(xiàn)lvParse宏多,F(xiàn)LVMeta,Elecard StreamEye Studio
等
3. 常見播放失敗問題排查
3.1 基礎(chǔ)概念
從給播放器傳入播放地址澡罚,到播放畫面顯示出來伸但,一般有如下幾個步驟:
- DNS 解析,將播放地址中的域名解析為對應(yīng)的服務(wù)器 ip 地址
- 連接服務(wù)器留搔,完成 http 請求或者 rtmp 握手過程
- 接收服務(wù)器發(fā)送的數(shù)據(jù)更胖,解協(xié)議解封裝,拿到音視頻數(shù)據(jù)解碼播放
香港衛(wèi)視的 RTMP 直播流:rtmp://live.hkstv.hk.lxdns.com/live/hks
W3C School 的測試 mp4 流:http://www.w3school.com.cn/i/movie.mp4
3.2 域名解析失敗
如果播放地址的域名無法解析,會導致播放失敗却妨,一般斷網(wǎng)了或者域名無效饵逐,則播放的時候,會有報錯彪标。
當然倍权,如果有網(wǎng)絡(luò),但是域名解析失敗捞烟,一般 ISP 運營商可能會返回一些類似 404 頁面薄声,或者跳轉(zhuǎn)到其他的默認網(wǎng)頁,因此坷襟,對于 HLS奸柬,HTTP-FLV生年,HTTP-mp4 等碼流婴程,會因為讀到一些 “臟數(shù)據(jù)” 從而返回一些其他的錯誤
遇到這類錯誤,一般可以通過 ping
一下域名試試抱婉,看看是否可以 ping 通档叔,如果 ping 不通,則可能要檢查下域名解析的配置了蒸绩。
3.3 服務(wù)器連接失敗
如果域名正確衙四,并且有網(wǎng)絡(luò)連接的狀態(tài),多半是可以正常解析出服務(wù)器 ip 地址的患亿,但是依然有連接失敗的可能传蹈,比如,這臺服務(wù)器相應(yīng)的服務(wù)掛掉了步藕,或者并沒有在相應(yīng)的端口提供服務(wù)惦界,從而導致播放器連接失敗
當然,也有可能是這臺服務(wù)器雖然提供了 rtmp 拉流服務(wù)但是宕機了咙冗,因此沾歪,我們需要通過 dig 命令確定最終訪問的是哪一臺服務(wù)器,并排查下該服務(wù)器為什么無法連接雾消,當然灾搏,最好是修改下 ffpmeg 源碼,把解析出來的服務(wù)器 ip 地址打印出來立润,這樣就可以直接看到所連接的服務(wù)器地址了狂窑。
3.4 請求的資源不存在
對于 http 協(xié)議的直播地址,請求的播放資源不存在桑腮,返回的錯誤還是比較快的蕾域,比如:
$ ffplay http://jhuster.com/live/hks.mp4
http://jhuster.com/live/hks.mp4: Server returned 404 Not Found
$ ffplay http://www.w3school2.com.cn/i/movie2.mp4
http://www.w3school2.com.cn/i/movie2.mp4: Invalid data found when processing input
注:由于讀到 ISP 運營商返回的跳轉(zhuǎn)頁面的 “臟數(shù)據(jù)”,因此也有可能返回上面這種錯誤
而RTMP 直播協(xié)議
,跟 HTTP 協(xié)議的播放旨巷,有著一個很大的不同巨缘,就是播放器請求的數(shù)據(jù),并不一定 “存放” 在服務(wù)器采呐,因此若锁,服務(wù)器無法簡單通過 URI 定位不到則返回 404,這些數(shù)據(jù)是在 RTMP
握手之后斧吐,由生產(chǎn)端逐步產(chǎn)生并由服務(wù)器轉(zhuǎn)發(fā)到客戶端又固,因此很難簡單判斷說 “資源不存在”。
通常RTMP 協(xié)議
的直播流煤率,如果推流端沒有推流了仰冠,播放器這邊一般是讀數(shù)據(jù)超時后才會返回錯誤
3.4 不支持的格式
視頻流的采用的網(wǎng)絡(luò)協(xié)議、編碼格式蝶糯、封裝格式有很多種洋只,網(wǎng)絡(luò)協(xié)議比如 http/https/rtmp/rtsp
等等,編碼格式比如h.264昼捍,mpeg4识虚,aac,speex
等等妒茬,封裝格式比如 flv担锤,mp4,avi乍钻,rmvb
等等肛循,這些協(xié)議和格式的流,都是需要播放器專門添加支持的银择,因此多糠,播放器遇到不支持的協(xié)議或者格式,也會導致播放失敗
3.5 只有音頻沒有視頻欢摄,或者只有視頻沒有音頻
出現(xiàn)該錯誤的原因可能有如下幾點:
- 音頻/視頻的編碼格式不支持熬丧,導致解碼失敗
- 音頻/視頻的數(shù)據(jù)內(nèi)容異常,導致解碼失敗
- 基于 ffmpeg 的播放器的
probesize
設(shè)置太小怀挠,導致解析碼流信息不足 - 碼流/文件本身的前半段只有音頻沒有視頻析蝴,或者只有視頻沒有音頻
這個問題播放啟動流程已經(jīng)完成,只是出現(xiàn)了畫面缺失绿淋、或者音頻缺失闷畸,也算是一種播放失敗
3.6 其他播放失敗
上面只分析了常見的播放失敗問題,其實導致播放失敗的原因還有千千萬萬種吞滞,這里無法一一都列出來佑菩,不過通過 ffplay 的報錯盾沫,就知道大概的原因,再聯(lián)合服務(wù)端一起調(diào)試調(diào)試殿漠,一般都是可以找到根本原因的赴精。移步ffmpeg 常見的錯誤分類。
直播專題問題排查-播放失斀驶稀(一)
直播專題問題排查-播放卡頓(二)
直播專題問題排查-首開慢(三)
直播專題問題排查-延時高(四)
直播專題問題排查-音畫不同步(五)
直播專題問題排查-黑屏猪狈、花屏芋簿、閃屏(六)
直播專題問題排查-播放雜音、噪音哲银、回聲(七)
直播專題問題排查-拖動不準(八)
直播專題問題排查-功耗高(九)
直播專題問題排查-馬賽克(十)