我之前在很多文章中分享過我們流媒體服務器如何優化直播體驗,詳細講解了各部分造成低延遲和卡頓的原因和相應的優化原理。實際上,音視頻的直播系統是一個復雜的工程系統,要做到非常低延遲的直播,需要復雜的系統工程優化和對各組件非常熟悉的掌握。這里面我們再分享幾個簡單而常用的調優技巧,大家要是遇到類似的問題可以先對照解決。
編碼優化
1、編碼器一般都會有碼控造成的延遲,一般也叫做初始化延遲或者視頻緩存檢驗器 VBV 的緩存大小,把它當成編碼器和解碼器比特流之間的緩存,在不影響視頻質量的情況下可以將其設置得盡可能小也可以降低延遲。
2、確保 Codec 開啟了最低延遲的設置。Codec 一般都會有低延遲優化的開關,對於 H.264 來說其效果尤其明顯。如果你的視頻不是使用 H.264 來編碼壓縮的,確保沒有使用到 B 幀,它對延遲也會有較大的影響,因為視頻中 B 幀的解碼依賴於前后的視頻幀,會增加延遲。
3、不要使用視頻 MJPEG 的視頻壓縮格式,至少使用不帶 B 幀的 MPEG4 視頻壓縮格式(Simple profile),甚至最好使用 H.264 baseline profile(X264 還有一個「-tune zerolatency」的優化開關)。這樣一個簡單的優化可以降低延遲,因為它能夠以更低的碼率編碼全幀率視頻。
傳輸協議優化
-
在服務端節點和節點之間盡量使用 RTMP 而非基於 HTTP 的 HLS 協議進行傳輸,這樣可以降低整體的傳輸延遲。這個主要針對終端用戶使用 HLS 進行播放的情況。
-
如果終端用戶使用 RTMP 來播放,盡量在靠近推流端的收流節點進行轉碼,這樣傳輸的視頻流比原始視頻流更小。
-
如果有必要,可以使用定制的 UDP 協議來替換 TCP 協議,省去弱網環節下的丟包重傳可以降低延遲。它的主要缺點在於,基於 UDP 協議進行定制的協議視頻流的傳輸和分發不夠通用,CDN 廠商支持的是標准的傳輸協議。
以我們現有的科技水平,延遲的情況是不可避免的,我們流媒體服務器也在盡力解決這個問題,目前以上的兩種延遲優化方法都可以在我們流媒體服務器上嘗試解決。