1. 播放卡頓的表現
播放卡頓的表現總結下來包括但不限于以下這些:
- 頻繁出現緩沖
- 播放不夠流暢,畫面一卡一卡的
2. 常見播放卡頓問題排查
什么是卡頓?其實是指播放器渲染的幀率太低,比如:1s 顯示 3~5 幀,或者渲染完一幀后,過很久才渲染下一幀。因此,我們需要排查,是什么原因導致了播放器無法流暢地渲染數據,通常可能有如下幾大類:
- 網絡帶寬不足
- 播放設備性能不足
- 視頻流時間戳問題
2.1 網絡帶寬不足
一個完整的直播應用,簡單來說數據流是下面這樣的:
主播 -> CDN -> 觀眾
因此,直播出現卡頓,三個端都可能是問題的源頭:
- 主播端的網絡不好,導致推流上行不穩定
- 服務端的線路質量不好,導致分發不穩定
- 觀眾端的網絡不好,導致拉流下行不穩定
2.1.1 如何判斷主播網絡不好
主播端網絡不好,直接影響到的就是千千萬萬的觀眾,因此,如果發現所有的觀眾都出現頻繁卡頓,那么多半就是主播端的問題了。
(1)帶寬測試
用帶寬測試工具:http://www.speedtest.net/ 測試下主播的帶寬,如果主播的上行帶寬明顯小于推流的碼率,那么肯定會出現推流幀率不穩定。
(2)統計回調
一般的推流 SDK 都會統計主播推流的實時視頻幀率,如果預設的幀率是 20fps,但是實際的幀率低得很多,比如 5fps,排除手機性能低的原因的話,多半也是網絡帶寬不足引起的。
2.1.2 如何判斷觀眾端網絡不好
觀眾是整個直播的終端環節,一般如果不是大面積的觀眾出現卡頓,那么很可能是這個觀眾自身的網絡問題,可以考慮切換到別的 WiFi 網絡,或者 4G 下播放試試,我們還可以通過如下手段,具體確認下是網絡的原因
(1)帶寬測試
跟主播端類似,我們依然可以用帶寬測試工具,測試下觀眾端的帶寬,如果該觀眾的帶寬明顯低于主播的推流碼率,那么肯定會出現卡頓。
(2)網絡質量測試
可以在觀眾端的網絡下,ping 一下播放域名,看看當前丟包率是多少,一般好的網絡,ping 值的丟包率是 0%
2.1.3 如何判斷 CDN 線路不好
如果排除了主播端上行網絡原因以及觀眾端下行的網絡原因,那么,剩下的就很可能是 CDN 線路質量原因了。
關于 CDN 線路質量,一方面可以通過聯系 CDN 廠商來排查,另一方面,也可以通過播放端的打點上報,統計出各家 CDN 的線路質量(比如:首開,卡頓率),分地區做一些線路的調整和優化。
2.2 播放設備性能不足
越高清的碼率,對解碼的要求也越高,很多手機性能不足以支撐 720P 甚至 1080P 的視頻解碼,特別是很多低端的 Android 手機,因此導致實際解碼播放的幀率遠小于視頻碼流的實際幀率,從而產生卡頓。
解決這個問題的思路主要有如下幾個方面:
- 盡可能選擇使用硬解,充分利用 GPU 加速
- 如果有多種碼流,盡可能在低端機上選擇非高清碼流
- 增大緩沖區,有助于緩解解碼不穩定帶來的卡頓
2.3 視頻流時間戳問題
這個問題也遇到的比較多,特別是客戶自己寫的推流 SDK 或者碼流經過一些轉碼處理后,沒有處理好音視頻時間戳從而產生的問題。播放器一般是嚴格根據碼流中的音視頻的時間戳來做音畫同步的,因此,如果碼流中的音視頻時間戳出現錯誤,肯定會影響到播放畫面的渲染時機。
例如,曾經遇到一個流的時間戳信息如下:
可以看到,它的視頻時間戳出現了 “回退”,而播放器一般 master 主時鐘是單調遞增的,當后來的視頻幀小于了當前的主時鐘,播放器就會做丟幀處理,從而導致播放的視頻幀率遠低于實際碼流中的視頻幀率,從而產生卡頓現象。
直播專題問題排查-播放失敗(一)
直播專題問題排查-播放卡頓(二)
直播專題問題排查-首開慢(三)
直播專題問題排查-延時高(四)
直播專題問題排查-音畫不同步(五)
直播專題問題排查-黑屏、花屏、閃屏(六)
直播專題問題排查-播放雜音、噪音、回聲(七)
直播專題問題排查-拖動不準(八)
直播專題問題排查-功耗高(九)
直播專題問題排查-馬賽克(十)