在七牛作直播 SDK 一年多了,幫助客戶解決過各類形形色色的問題,如直播卡頓、馬賽克、花屏、黑屏、雜音、音畫不一樣步等等等等,這其中,有一些是網絡緣由,有一些是客戶的使用姿式問題,有一些是參數配置錯誤,固然,也有一些是 SDK 自己的問題。git
總結下來,若是開發者可以對直播領域的一些基礎知識有更深刻的瞭解,掌握一些基本的排障手段,不少問題是可以很快自行解決的,甚至也可以更好地防患於未然。github
所以,有了這個系列,我想把這一年多以來,幫助咱們的直播客戶排查問題的實戰經驗逐步分享出來,同時也會穿插一些音視頻開發的基礎知識和優化經驗,真心但願可以幫助到直播領域的開發者們。微信
本系列會涵蓋的內容包括但不限於以下一些主題:網絡
本文是 《直播疑難雜症排查》系列的第二篇文章,咱們主要分析下如何排查播放卡頓問題。工具
播放卡頓的表現總結下來包括但不限於如下這些:post
頻繁出現緩衝性能
播放不夠流暢,畫面一卡一卡的測試
從代碼層面來看,什麼是卡頓?實際上是指播放器渲染的幀率過低,好比:1s 顯示 3~5 幀,或者渲染完一幀後,過好久才渲染下一幀。優化
所以,咱們須要排查,是什麼緣由致使了播放器沒法流暢地渲染數據,一般可能有以下幾大類:.net
網絡帶寬不足
播放設備性能不足
視頻流時間戳問題
下面咱們一一來分析下具體的緣由。
一個完整的直播應用,簡單來講數據流是這樣的:主播 -> CDN -> 觀衆
所以,直播出現卡頓,三個端均可能是問題的源頭:
那麼,咱們如何確切地判斷是哪個環節出了問題致使的播放卡頓呢 ?
如何判斷主播網絡很差
主播端網絡很差,直接影響到的就是千千萬萬的觀衆,所以,若是發現全部的觀衆都出現頻繁卡頓,那麼多半就是主播端的問題了。
帶寬測試
用帶寬測試工具www.speedtest.net/ 測試下主播的帶寬,若是主播的上行帶寬明顯小於推流的碼率,那麼確定會出現推流幀率不穩定。
統計回調
通常的推流 SDK 都會統計主播推流的實時視頻幀率,若是預設的幀率是 20 fps,可是實際的幀率低得不少,好比 5 fps,排除手機性能低的緣由的話,多半也是網絡帶寬不足引發的。
CDN 廠商給出的後臺統計
好比,七牛直播雲就給咱們的每個客戶提供了以下的後臺 Portal 界面,能夠用於監控每個主播的實時推流狀況:
從這個圖來看,該主播的推流上行其實仍是蠻穩定的,一直在 20 fps 左右。
如何判斷觀衆端網絡很差
觀衆是整個直播的終端環節,通常若是不是大面積的觀衆出現卡頓,那麼極可能是這個觀衆自身的網絡問題,能夠考慮切換到別的 WiFi 網絡,或者 4G 下播放試試,咱們還能夠經過以下手段,具體確認下是網絡的緣由。
帶寬測試
跟主播端相似,咱們依然能夠用帶寬測試工具,測試下觀衆端的帶寬,若是該觀衆的帶寬明顯低於主播的推流碼率,那麼確定會出現卡頓。
網絡質量測試
能夠在觀衆端的網絡下,ping 一下播放域名,看看當前丟包率是多少,通常好的網絡,ping 值的丟包率是 0%。
固然,還有一些更加專業的網絡性能測試工具,如 iperf,這裏就不展開詳細的介紹了。
關於 CDN 線路質量,一方面能夠經過聯繫 CDN 廠商來排查,另外一方面,也能夠經過播放端的打點上報,統計出各家 CDN 的線路質量(好比:首開,卡頓率),分地區作一些線路的調整和優化。
七牛實時流網絡 (LiveNet)會根據網絡流量、各節點的鏈接、負載情況及到用戶網絡的響應時間等綜合信息,實時地將用戶的請求調度到最佳服務節點上,同時可計算出最佳服務節點與視頻源節點的最佳網絡路徑,使用戶能夠更快速的獲取到視頻內容,提升視頻服務的響應速度和用戶體驗。
越高清的碼率,對解碼的要求也越高,不少手機性能不足以支撐 720P 甚至 1080P 的視頻解碼,特別是不少低端的 Android 手機,所以致使實際解碼播放的幀率遠小於視頻碼流的實際幀率,從而產生卡頓。
解決這個問題的思路主要有以下幾個方面:
這個問題也遇到的比較多,特別是客戶本身寫的推流 SDK 或者碼流通過一些轉碼處理後,沒有處理好音視頻時間戳從而產生的問題。播放器通常是嚴格根據碼流中的音視頻的時間戳來作音畫同步的,所以,若是碼流中的音視頻時間戳出現錯誤,確定會影響到播放畫面的渲染時機。
例如,曾經遇到一個流的時間戳信息以下:
能夠看到,它的視頻時間戳出現了「回退」,而播放器通常 master 主時鐘是單調遞增的,當後來的視頻幀小於了當前的主時鐘,播放器就會作丟幀處理,從而致使播放的視頻幀率遠低於實際碼流中的視頻幀率,從而產生卡頓現象。
這個問題的排查,你們能夠修改 ffplay 源碼,把讀取到的每一幀音頻、視頻的時間戳打印出來看看,這裏我給出對 ffplay 的修改 commit 記錄,你們能夠參考一下:
github.com/Jhuster/pil…
關於播放卡頓的問題排查大體就介紹到這裏了,下篇咱們將對首開慢這個話題進行探討。若是你對七牛直播雲感興趣,歡迎點擊 t.cn/RXEcFlv 瞭解詳情。
本文做者:盧俊@七牛雲。若是有你感興趣的問題,可是不在上述列表中,也能夠來信 lujun.hust@gmail.com 交流,歡迎關注新浪微博 @盧_俊 或者 微信公衆號 @Jhuster 獲取最新的文章和資訊。