上海2017年5月17日電 /美通社/ -- 七牛直播云在2016年6月發(fā)布之后,幫助廣大客戶解決過形形色色的問題,如直播卡頓、馬賽克、花屏、黑屏、雜音、音畫不同步等等,這其中,有一些是網(wǎng)絡(luò)原因,有一些是開發(fā)者的使用姿勢(shì)問題,有一些是參數(shù)配置錯(cuò)誤,當(dāng)然,也有一些是 SDK 本身的問題。
總結(jié)下來,如果開發(fā)者能夠?qū)χ辈ヮI(lǐng)域的一些基礎(chǔ)知識(shí)有更深入的了解,掌握一些基本的排障手段,很多問題是能夠很快自行解決的,甚至也能夠更好地防患于未然。
因此,繼《直播技術(shù)詳解》系列文章之后,七牛云推出了這個(gè)新的系列《直播疑難雜癥排查》,會(huì)把協(xié)助客戶解決直播問題的經(jīng)驗(yàn)逐步分享出來,同時(shí)也會(huì)穿插一些音視頻開發(fā)的基礎(chǔ)知識(shí)和優(yōu)化經(jīng)驗(yàn),希望能夠幫助到直播領(lǐng)域的開發(fā)者們。本文是《直播疑難雜癥排查》系列的第二篇文章,主要分析下如何排查播放卡頓問題。
播放卡頓的表現(xiàn)
播放卡頓的表現(xiàn)總結(jié)下來包括但不限于以下這些:頻繁出現(xiàn)緩沖、播放不夠流暢畫面一卡一卡的。
常見播放卡頓問題排查
從代碼層面來看,什么是卡頓?其實(shí)是指播放器渲染的幀率太低,比如:1s 顯示 3~5 幀,或者渲染完一幀后,過很久才渲染下一幀。
因此,我們需要排查,是什么原因?qū)е铝瞬シ牌鳠o法流暢地渲染數(shù)據(jù),通??赡苡腥缦聨状箢悾?/p>
原因一:網(wǎng)絡(luò)帶寬不足
一個(gè)完整的直播應(yīng)用,簡(jiǎn)單來說數(shù)據(jù)流是這樣的:主播 -> CDN -> 觀眾
因此,直播出現(xiàn)卡頓,三個(gè)端都可能是問題的源頭:主播端的網(wǎng)絡(luò)不好,導(dǎo)致推流上行不穩(wěn)定、服務(wù)端的線路質(zhì)量不好,導(dǎo)致分發(fā)不穩(wěn)定觀眾端的網(wǎng)絡(luò)不好,導(dǎo)致拉流下行不穩(wěn)定。
那么,我們?nèi)绾未_切地判斷是哪一個(gè)環(huán)節(jié)出了問題導(dǎo)致的播放卡頓呢?
如何判斷主播網(wǎng)絡(luò)不好
主播端網(wǎng)絡(luò)不好,直接影響到的就是千千萬萬的觀眾,因此,如果發(fā)現(xiàn)所有的觀眾都出現(xiàn)頻繁卡頓,那么多半就是主播端的問題了。
1. 帶寬測(cè)試
用帶寬測(cè)試工具http://www.speedtest.net/測(cè)試下主播的帶寬,如果主播的上行帶寬明顯小于推流的碼率,那么肯定會(huì)出現(xiàn)推流幀率不穩(wěn)定。
2. 統(tǒng)計(jì)回調(diào)
一般的推流 SDK 都會(huì)統(tǒng)計(jì)主播推流的實(shí)時(shí)視頻幀率,如果預(yù)設(shè)的幀率是 20 fps,但是實(shí)際的幀率低得很多,比如 5 fps,排除手機(jī)性能低的原因的話,多半也是網(wǎng)絡(luò)帶寬不足引起的。
3. CDN 廠商給出的后臺(tái)統(tǒng)計(jì)
比如,七牛直播云就給我們的每一個(gè)客戶提供了如下的后臺(tái) Portal 界面,可以用于監(jiān)控每一個(gè)主播的實(shí)時(shí)推流情況:
從這個(gè)圖來看,該主播的推流上行其實(shí)還是蠻穩(wěn)定的,一直在 20 fps 左右。
如何判斷觀眾端網(wǎng)絡(luò)不好
觀眾是整個(gè)直播的終端環(huán)節(jié),一般如果不是大面積的觀眾出現(xiàn)卡頓,那么很可能是這個(gè)觀眾自身的網(wǎng)絡(luò)問題,可以考慮切換到別的 WiFi 網(wǎng)絡(luò),或者 4G 下播放試試,我們還可以通過如下手段,具體確認(rèn)下是網(wǎng)絡(luò)的原因。
1. 帶寬測(cè)試
跟主播端類似,我們依然可以用帶寬測(cè)試工具,測(cè)試下觀眾端的帶寬,如果該觀眾的帶寬明顯低于主播的推流碼率,那么肯定會(huì)出現(xiàn)卡頓。
2. 網(wǎng)絡(luò)質(zhì)量測(cè)試
可以在觀眾端的網(wǎng)絡(luò)下,ping 一下播放域名,看看當(dāng)前丟包率是多少,一般好的網(wǎng)絡(luò),ping 值的丟包率是 0%。
當(dāng)然,還有一些更加專業(yè)的網(wǎng)絡(luò)性能測(cè)試工具,如 iperf,這里就不展開詳細(xì)的介紹了。
3. 如何判斷 CDN 線路不好
如果排除了主播端上行網(wǎng)絡(luò)原因以及觀眾端下行的網(wǎng)絡(luò)原因,那么,剩下的就很可能是 CDN 線路質(zhì)量原因了。
關(guān)于 CDN 線路質(zhì)量,一方面可以通過聯(lián)系 CDN 廠商來排查,另一方面,也可以通過播放端的打點(diǎn)上報(bào),統(tǒng)計(jì)出各家 CDN 的線路質(zhì)量(比如:首開,卡頓率),分地區(qū)做一些線路的調(diào)整和優(yōu)化。
七牛實(shí)時(shí)流網(wǎng)絡(luò)(LiveNet)會(huì)根據(jù)網(wǎng)絡(luò)流量、各節(jié)點(diǎn)的連接、負(fù)載狀況及到用戶網(wǎng)絡(luò)的響應(yīng)時(shí)間等綜合信息,實(shí)時(shí)地將用戶的請(qǐng)求調(diào)度到較佳服務(wù)節(jié)點(diǎn)上,同時(shí)可計(jì)算出較佳服務(wù)節(jié)點(diǎn)與視頻源節(jié)點(diǎn)的較佳網(wǎng)絡(luò)路徑,使用戶可以更快速的獲取到視頻內(nèi)容,提高視頻服務(wù)的響應(yīng)速度和用戶體驗(yàn)。
原因二:播放設(shè)備性能不足
越高清的碼率,對(duì)解碼的要求也越高,很多手機(jī)性能不足以支撐 720P 甚至 1080P 的視頻解碼,特別是很多低端的 Android 手機(jī),因此導(dǎo)致實(shí)際解碼播放的幀率遠(yuǎn)小于視頻碼流的實(shí)際幀率,從而產(chǎn)生卡頓。
解決這個(gè)問題的思路主要有如下幾個(gè)方面:
盡可能選擇使用硬解,充分利用 GPU 加速
如果有多種碼流,盡可能在低端機(jī)上選擇非高清碼流
增大緩沖區(qū),有助于緩解解碼不穩(wěn)定帶來的卡頓
原因三:視頻流時(shí)間戳問題
這個(gè)問題也遇到的比較多,特別是客戶自己寫的推流 SDK 或者碼流經(jīng)過一些轉(zhuǎn)碼處理后,沒有處理好音視頻時(shí)間戳從而產(chǎn)生的問題。播放器一般是嚴(yán)格根據(jù)碼流中的音視頻的時(shí)間戳來做音畫同步的,因此,如果碼流中的音視頻時(shí)間戳出現(xiàn)錯(cuò)誤,肯定會(huì)影響到播放畫面的渲染時(shí)機(jī)。
例如,曾經(jīng)遇到一個(gè)流的時(shí)間戳信息如下:
可以看到,它的視頻時(shí)間戳出現(xiàn)了「回退」,而播放器一般 master 主時(shí)鐘是單調(diào)遞增的,當(dāng)后來的視頻幀小于了當(dāng)前的主時(shí)鐘,播放器就會(huì)做丟幀處理,從而導(dǎo)致播放的視頻幀率遠(yuǎn)低于實(shí)際碼流中的視頻幀率,從而產(chǎn)生卡頓現(xiàn)象。