直播間新手常見技術問題解答--延時高
延時高問題分析
我們看看可能產生延時的模塊有哪些:
1)圖像處理延時,比如畫面剪裁、美顏、特效處理
2)視頻編碼/解碼延時
3)網絡傳輸的延時
4)業務代碼中的緩沖區
一般圖像處理、數據拷貝、編解碼帶來的延時,都是 ms 級別的,真正會產生比較大延時的地方,一個是互聯網上的網絡傳輸延時,另一個就是業務代碼中的緩沖區了。
1 編碼延時
很多人可能不知道 H.264 的解碼器正常情況下會在顯示之前緩存一定的視頻幀,對于 QCIF 分辨率大小的視頻(176 × 144)一般會緩存 16 幀,對于 720P 的視頻則緩存 5 幀。對于第一幀的讀取來說,這是一個很大的延遲。
視頻中 B 幀的解碼依賴于前后的視頻幀,會增加延遲。Codec 一般都會有低延遲優化的開關,對于 H.264 來說其效果尤其明顯。
如果使用了 FFmpeg,降低「-probesize 」和「 -analyze duration」參數的值,這兩個值用于視頻幀信息監測和用于監測的時長,這兩個值越大對編碼延遲的影響越大。
網絡傳輸延時
數據在網絡上傳輸,從一個節點經過多級服務器轉發到達另一個節點,是不可避免有物理延時的,下面這個表格給出了理論上數據在光纖中的網絡傳輸的時間(實際場景中的延時往往比這個要大很多,因為涉及到帶寬、網絡抖動等干擾):
業務代碼中的緩沖區
業務代碼中的緩沖區,主要是推流端的緩沖區和播放端的緩沖區,一個 30 fps 的視頻流,緩沖區每滯留 30 幀,延時就會增大 1s,
那么,它們是怎么產生緩沖數據的呢 ?
推流端的數據怎么積累起來的呢 ?
采集 -> 編碼 -> 數據發送 -> 服務器
當網絡產生抖動的時候,數據發送會因此減慢,產生一定的阻塞,從而導致這些數據會被積累在了推流端的發送緩沖區中。
播放端的數據怎么積累起來的呢 ?
服務器-> 數據接收 -> 解碼 -> 渲染
當網絡產生抖動的時候,服務器的數據無法及時地傳輸到播放端,而由于 TCP 協議的可靠性,所有的數據都會被服務端積累起來,在網絡恢復良好的時候,會快速傳輸到播放端,這些數據會被動地積累在接收緩沖區中。
怎么消除業務緩沖區的累計延時呢 ?
推流端的發送緩沖區,可以在網絡恢復良好的時候,快送發送出去,從而消除掉這個累計延時。
播放端的接收緩沖區,可以通過丟幀或者加速播放的方式快速消費掉緩沖區中的數據,從而消除累計延時。
協議延時
通常標準的直播協議有 RTMP,HLV,HLS 三種,一般 RTMP/HLV 協議的延時在 1~3s,HLS 協議的直播延時則會更大,注重延時的直播應用,大都會選擇 RTMP/HLV 協議,這些協議均是基于 tcp 的協議,tcp 協議的多個特性導致其延時明顯要高于基于 udp 的私有協議,主要有如下方面:
? 建立連接的三次握手
? ACK 機制
? 丟包重傳
因此,如果想從本質上解決直播延時問題,還是要換成基于 udp 的私有協議來傳輸數據。
————————————————
版權聲明:本文為CSDN博主「步基」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wangbuji/article/details/121661187
================================
【新聞】
中國e直播帶貨供應鏈金融13306003307(V同),
一件代發共享云倉:主播減去了自己先采購囤貨的問題,可以無壓力的開播賣貨。主播只要選定生廠商的抖音小店產品鏈接或快手小店產品鏈接,在自己直播間上了鏈接就可以賣,賣完由廠家小店訂單結算,廠家網店直接收款;直播帶貨主播直接分傭金;MCN機構直接分管理費。
中國E直播帶貨供應鏈機構協調廠家按規則48小時內一件代發!