直播延時講解

轉載請註明出處:https://blog.csdn.net/impingo
項目地址:https://github.com/im-pingo/pingos

直播延時出現的原因

在單個服務器節點的情況下,延時出現在三個地方,推流端、服務器、播放端

推流
推流端
服務器
播放端

推流端造成的延時(TCP連接)

推流端處理流程,直播內容採集→編碼→封包→緩存→發送
由於採集、編碼和封包高度依賴硬件配置,所以不在本文章的討論範圍內。
發送端的主要延時原因在於緩存,那麼爲何會有緩存呢?我們可以將採集編碼看做一個生產者,編碼數據在直播過程中會不斷地產生,如果網絡問題導致發送失敗或者發送阻塞,那麼新產生的編碼數據就會將舊數據覆蓋導致舊數據丟失,所以需要緩存來存儲新生成的編碼數據。如果某個時間段內網絡狀況差,導致數據發送不及時,發送緩存就會增加,延時也就會增加,等到網絡恢復,發送端再儘可能多地將緩存中的數據發送給服務器。
到這裏推流端的延時原理已經說完了,下面講一下服務器端是如何造成延時的。

服務器端造成的延時

上面提到,發送端爲了應對網絡抖動,需要將數據緩存起來,服務器端同樣將收到的數據加入緩存。但是服務器端加緩衝除了爲了應對抖動之外還有一個重要的原因是讓播放端實現秒開功能。
服務器的緩存長度一般爲gop(關鍵幀間隔)的整數倍,這麼做的原因是播放端解碼需要從關鍵幀開始,那麼服務器向播放器端下發數據的時候就必須從關鍵幀的位置開始下發。
爲什麼實現播放器秒開功能需要在服務器端添加緩存?

播放器一般要緩存夠一定長度的數據後纔開始解碼播放。爲了讓播放器馬上播放,服務器就要一次性給播放器下發足夠的數據。

播放器造成的延時

上文中描述秒開功能時已經提高播放器端也有一個緩存,這個緩存存在的意義在於,如果某一段時間內服務器到播放器的網絡不好,播放器可以播放緩存裏的數據,等網絡恢復後服務器將積累的數據儘量發給播放器,播放器再填充本地緩存。通過這樣的操作,播放端看起來播放效果會更好,即使出現短時間的網絡抖動,畫面也不至於會卡。

總結延時原因

延遲端 原因 緩存大小
推流端 應對網絡抖動 不定,可配置
服務器 應對網絡抖動、實現秒開功能 不定,可配置,大於等於整數個gop
播放端 應對網絡抖動 不定,可配置

下篇文章將介紹如何降低直播延時。

QQ交流羣:697773082

QQ交流羣:697773082

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章