日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《直播疑难杂症排查》之二:播放卡顿

發(fā)布時間:2024/2/28 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《直播疑难杂症排查》之二:播放卡顿 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

##播放卡頓的表現(xiàn)

播放卡頓的表現(xiàn)總結(jié)下來包括但不限于以下這些:

  • 頻繁出現(xiàn)緩沖

  • 播放不夠流暢,畫面一卡一卡的

##常見播放卡頓問題排查

從代碼層面來看,什么是卡頓?其實是指播放器渲染的幀率太低,比如:1s 顯示 3~5 幀,或者渲染完一幀后,過很久才渲染下一幀。

因此,我們需要排查,是什么原因?qū)е铝瞬シ牌鳠o法流暢地渲染數(shù)據(jù),通常可能有如下幾大類:

  • 網(wǎng)絡(luò)帶寬不足

  • 播放設(shè)備性能不足

  • 視頻流時間戳問題

下面我們一一來分析下具體的原因。

###原因一:網(wǎng)絡(luò)帶寬不足

一個完整的直播應(yīng)用,簡單來說數(shù)據(jù)流是這樣的:主播 -> CDN -> 觀眾

因此,直播出現(xiàn)卡頓,三個端都可能是問題的源頭:

  • 主播端的網(wǎng)絡(luò)不好,導(dǎo)致推流上行不穩(wěn)定
  • 服務(wù)端的線路質(zhì)量不好,導(dǎo)致分發(fā)不穩(wěn)定
  • 觀眾端的網(wǎng)絡(luò)不好,導(dǎo)致拉流下行不穩(wěn)定
  • 那么,我們?nèi)绾未_切地判斷是哪一個環(huán)節(jié)出了問題導(dǎo)致的播放卡頓呢 ?

    如何判斷主播網(wǎng)絡(luò)不好

    主播端網(wǎng)絡(luò)不好,直接影響到的就是千千萬萬的觀眾,因此,如果發(fā)現(xiàn)所有的觀眾都出現(xiàn)頻繁卡頓,那么多半就是主播端的問題了。

  • 帶寬測試 用帶寬測試工具h(yuǎn)ttp://www.speedtest.net/?測試下主播的帶寬,如果主播的上行帶寬明顯小于推流的碼率,那么肯定會出現(xiàn)推流幀率不穩(wěn)定。

  • 統(tǒng)計回調(diào) 一般的推流 SDK 都會統(tǒng)計主播推流的實時視頻幀率,如果預(yù)設(shè)的幀率是 20?fps,但是實際的幀率低得很多,比如 5?fps,排除手機(jī)性能低的原因的話,多半也是網(wǎng)絡(luò)帶寬不足引起的。

  • CDN 廠商給出的后臺統(tǒng)計 比如,七牛直播云就給我們的每一個客戶提供了如下的后臺 Portal 界面,可以用于監(jiān)控每一個主播的實時推流情況:?

  • 從這個圖來看,該主播的推流上行其實還是蠻穩(wěn)定的,一直在 20 fps 左右。

    如何判斷觀眾端網(wǎng)絡(luò)不好

    觀眾是整個直播的終端環(huán)節(jié),一般如果不是大面積的觀眾出現(xiàn)卡頓,那么很可能是這個觀眾自身的網(wǎng)絡(luò)問題,可以考慮切換到別的 WiFi 網(wǎng)絡(luò),或者 4G 下播放試試,我們還可以通過如下手段,具體確認(rèn)下是網(wǎng)絡(luò)的原因。

    1.?帶寬測試 跟主播端類似,我們依然可以用帶寬測試工具,測試下觀眾端的帶寬,如果該觀眾的帶寬明顯低于主播的推流碼率,那么肯定會出現(xiàn)卡頓。

  • 網(wǎng)絡(luò)質(zhì)量測試 可以在觀眾端的網(wǎng)絡(luò)下,ping 一下播放域名,看看當(dāng)前丟包率是多少,一般好的網(wǎng)絡(luò),ping 值的丟包率是 0%。
  • 當(dāng)然,還有一些更加專業(yè)的網(wǎng)絡(luò)性能測試工具,如 iperf,這里就不展開詳細(xì)的介紹了。

  • 如何判斷 CDN 線路不好 如果排除了主播端上行網(wǎng)絡(luò)原因以及觀眾端下行的網(wǎng)絡(luò)原因,那么,剩下的就很可能是 CDN 線路質(zhì)量原因了。
  • 關(guān)于 CDN 線路質(zhì)量,一方面可以通過聯(lián)系 CDN 廠商來排查,另一方面,也可以通過播放端的打點(diǎn)上報,統(tǒng)計出各家 CDN 的線路質(zhì)量(比如:首開,卡頓率),分地區(qū)做一些線路的調(diào)整和優(yōu)化。

    七牛實時流網(wǎng)絡(luò) (LiveNet)會根據(jù)網(wǎng)絡(luò)流量、各節(jié)點(diǎn)的連接、負(fù)載狀況及到用戶網(wǎng)絡(luò)的響應(yīng)時間等綜合信息,實時地將用戶的請求調(diào)度到最佳服務(wù)節(jié)點(diǎn)上,同時可計算出最佳服務(wù)節(jié)點(diǎn)與視頻源節(jié)點(diǎn)的最佳網(wǎng)絡(luò)路徑,使用戶可以更快速的獲取到視頻內(nèi)容,提高視頻服務(wù)的響應(yīng)速度和用戶體驗。

    ###原因二:播放設(shè)備性能不足

    越高清的碼率,對解碼的要求也越高,很多手機(jī)性能不足以支撐 720P 甚至 1080P 的視頻解碼,特別是很多低端的 Android 手機(jī),因此導(dǎo)致實際解碼播放的幀率遠(yuǎn)小于視頻碼流的實際幀率,從而產(chǎn)生卡頓。

    解決這個問題的思路主要有如下幾個方面:

    • 盡可能選擇使用硬解,充分利用 GPU 加速
    • 如果有多種碼流,盡可能在低端機(jī)上選擇非高清碼流
    • 增大緩沖區(qū),有助于緩解解碼不穩(wěn)定帶來的卡頓

    ###原因三:視頻流時間戳問題

    這個問題也遇到的比較多,特別是客戶自己寫的推流 SDK 或者碼流經(jīng)過一些轉(zhuǎn)碼處理后,沒有處理好音視頻時間戳從而產(chǎn)生的問題。播放器一般是嚴(yán)格根據(jù)碼流中的音視頻的時間戳來做音畫同步的,因此,如果碼流中的音視頻時間戳出現(xiàn)錯誤,肯定會影響到播放畫面的渲染時機(jī)。

    例如,曾經(jīng)遇到一個流的時間戳信息如下:

    可以看到,它的視頻時間戳出現(xiàn)了「回退」,而播放器一般 master 主時鐘是單調(diào)遞增的,當(dāng)后來的視頻幀小于了當(dāng)前的主時鐘,播放器就會做丟幀處理,從而導(dǎo)致播放的視頻幀率遠(yuǎn)低于實際碼流中的視頻幀率,從而產(chǎn)生卡頓現(xiàn)象。

    這個問題的排查,大家可以修改 ffplay 源碼,把讀取到的每一幀音頻、視頻的時間戳打印出來看看,這里我給出對 ffplay 的修改 commit 記錄,大家可以參考一下:?https://github.com/Jhuster/pili-ffmpeg/commit/4d0476faba5016b291c2eed2c0a2cd6fe303bd50

    轉(zhuǎn)自:七牛云的個人空間

    總結(jié)

    以上是生活随笔為你收集整理的《直播疑难杂症排查》之二:播放卡顿的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。