網路QoS的平衡之道——音影片弱網對抗策略介紹

王興鶴文章封面圖.jpeg

作者:網易智企雲信資深音影片引擎開發工程師 王興鶴

隨著AI和5G的到來,音影片應用將變得越來越廣泛,人們對音影片的品質需求也越來越高,影片解析度已經從高清發展為超高清、VR,影片幀率也已出現60fps、120fps等應用,互動式的應用對端到端延時也提出了更高的要求。與此同時,設備的硬體性能也突飛猛進。可以預見,隨著5G的到來網路中傳輸的數據將會呈現爆髮式增長,大量數據將會給網路傳輸帶來巨大的挑戰。因此,如何保證用戶高品質的音影片體驗?傳輸將會是一個重要環節。

網路中常見的問題有丟包、抖動、擁塞、延時。以下將分別介紹這些問題對影片體驗帶來的影響。

影片幀往往是拆成一個個分組包進行傳輸,當網路發生丟包時,接收端無法成功組幀,不僅影響這一幀的數據解碼,從這一幀開始的整個GOP都將無法解碼顯示,用戶看到的畫面將出現卡頓,直到完整的I幀到達接收端才能恢復畫面。

抖動同樣是造成卡頓的殺手鐧,抖動分為發送數據抖動、網路傳輸抖動、接收丟包恢復抖動。在端到端全鏈路上,任何環節都會引入抖動而影響畫面的流暢性。接收端的Jitter Buffer緩衝區負責消除抖動,提供穩定的解碼幀率,但是Jitter Buffer是犧牲延時作為代價的。

網路發生擁塞時,音影片的播放情況將變得更加惡劣,擁塞造成的直接影響是突發丟包或者突發抖動,如果不及時預測擁塞的發送降低發送數據量,接收端將會出現卡頓、延時大、畫質差等等問題。

發生丟包、抖動、擁塞時往往會伴隨著延時的增大,ITU StandardG.114對延時的定義是,端到端延時大於400ms時絕大數的交互體驗都將不能接受。

我們用QoE表示用戶在接收端的主觀體驗,而QoS是指通過一些量化指標衡量網路的傳輸品質並提供優質網路的服務。

那麼對抗以上這些網路問題,QoS都有哪些武器呢?

image.png

1 FEC

FEC是常用的抗丟包手段,又叫前向糾錯碼,是在發送端額外發送一些冗餘數據,用於抵抗網路丟包。當接收端檢測到媒體數據發生丟包時,就可以利用接收到的冗餘數據進行丟包恢復。FEC的優點是丟包恢復延時低,缺點是冗餘數據佔用額外頻寬,在頻寬受限場景會擠壓影片原始碼率,導致畫質變低。影響FEC的丟包恢復能力除了冗餘數據數量之外,還跟分組大小有關,分組越大,抗丟包能力越強,但是對應的丟包恢復延時也會變大。

分組大小與抗丟包能力示意

分組大小與抗丟包能力示意

FEC的編解碼演算法有XOR、RS等,衡量FEC演算法的指標主要有計算性能、抗丟包能力、恢復延時。其中基於柯西矩陣的RS(里德-所羅門碼)是目前比較流行的FEC演算法。該演算法結合合適的分組策略在以上三個指標上都有較好的表現。對於不同的應用場景也有不同的FEC演算法有更好的表現,比如噴泉碼、卷積碼等等,噴泉碼結合接收端回饋機制對無線信道等丟包波動大的場景有較好的表現。

總的來說,FEC是一種用碼率流量交換抗丟包能力的技術,相比重傳FEC的優點是恢復延時低。FEC技術的關鍵點是如何設計合理的冗餘策略和分組大小,達到抗丟包能力、影片碼率、恢復延時三者的有效平衡。

2 丟包重傳

有別於FEC的抗丟包技術,重傳不需要浪費太多的碼率,只有當接收端檢測到丟包時通過回饋給發送端丟包資訊(NACK)才進行相應數據的重傳,接收端每隔1個RTT對同1個包發起重傳請求,直到成功接收到相應的數據包。重傳最大的好處是碼率利用率高,缺點是會引入額外的丟包恢復抖動從而拉大延時,顯然,網路RTT越大重傳的恢復效果越差。

考慮到雙向丟包的場景,對於同一個包,接收端可以以1/2 RTT間隔發送重傳請求,以應對重傳請求包可能丟失的情況。發送端對同一個seq的包響應間隔按照RTT間隔控制,防止重傳碼率過多浪費。發送和接收按照以上間隔處理重傳請求和重傳響應,可以在碼率和抗丟包能力上達到有效的平衡,實現收益最大化。一個好的重傳策略設計還需要考慮是否需要容忍亂序,合理控制重傳碼率。

3 Jitter Buffer

接收側一個重要環節是Jitter Buffer。Jitter Buffer的作用是以最低的緩衝延時代價消除數據抖動,提供流暢的播放幀率。因為影片是按幀解碼播放,所以Jitter Buffer的延時計算也是按影片幀為最小計算單元,而不是按影片包,輸入Jitter Buffer的參數是每一幀影片數據的抖動。造成幀抖動的因素有很多,有採集抖動、編碼抖動、發送抖動、網路抖動、丟包修復引入的抖動等,總之,在解碼之前的任何環節引入的數據抖動會匯總到Jitter Buffer模組處理抖動消除。

image.png

有效發揮重傳的抗丟包能力需要有Jitter Buffer的拉伸策略加以配合。因為重傳只是保證數據能夠到達接收端,此外接收端還需要有足夠大的Jitter Buffer等待這些晚到的數據幀,否則即便重傳到達接收端的數據由於滯後性原因將被丟棄。

重傳結合Jitter Buffer拉伸策略是一種用延時交換抗丟包能力的技術,其中影響這種交換性價比的關鍵因素是RTT,RTT越小重傳收益越大,反之收益越差,更多需要FEC實現抗丟包。

image.png

4 長期參考幀

除了重傳、FEC等常規手段之外,長期參考幀技術即選擇參考幀技術,是一種網路模組和編碼器共同配合完成的技術。在RTC場景下一般的編碼參考策略是向前一幀參考,因為參考的距離越近壓縮效果越好,出於實時的考慮編碼只有I幀和P幀,沒有B幀。而長期參考幀是一種可跨幀的參考幀選擇策略,這種策略打破了傳統的向前一幀的參考的規則,可以更加靈活地選擇參考幀。

長期參考幀策略的目的是在有丟包的場景下,接收端不需要等待丟包恢復也能繼續顯示畫面,其最大的好處是低延時,不需要等待重傳恢復,但是帶來了壓縮率的犧牲,在相同碼率下表現為影像品質的犧牲,但是這種犧牲和收益的交換在某些場景下是值得的。此外,常態的長期參考幀技術在抵抗突發丟包能力上有很大提升,當網路突然出現丟包,FEC和重傳的立即恢復效果一般是比較差的,尤其是有基礎RTT的網路。而長期參考幀可以饒過丟失的幀,利用丟失幀之後任何一個恢復的幀進行解碼顯示,從而提升突發丟包時的流暢性。

image.png

根據長期參考幀的特點和目的,實現長期參考幀技術應用需要有接收端側回饋資訊,編碼器根據接收端回饋的幀資訊選擇參考幀編碼,在有丟包的場景下,接收端通過短時的幀率犧牲將很快恢復畫面。由於存在接收回饋,高RTT時回饋延時較大將會導致參考距離變大,而參考距離超出了編碼器的編碼緩衝限制將會導致編碼找不到參考幀,所以長期參考幀比較適合低RTT場景。在多人會議場景中,下行人數太多也會制約長期參考幀的參考幀選擇。

綜合來看,長期參考幀適合1V1的通訊場景,適合低RTT伴隨丟包或者擁塞的弱網場景,這樣的場景下長期參考幀比傳統的向前一幀參考有更好的實時性和流暢性,同時結合重傳和FEC的抗丟包貢獻,其抗弱網能力將大大提升。

5 大小流和SVC

長期參考幀比較適合1V1的場景,而多人場景時,需要大小流和SVC發揮作用。

大小流是指上行同時傳輸兩條不同解析度的流,媒體伺服器可以根據下行實際的頻寬情況轉發相應品質的流,如果頻寬足夠轉發高品質的大流,頻寬不足轉發低品質的小流。這種大小流機制的好處如下: 1)無需調節源端碼率就能向媒體伺服器提供兩種規格的影片碼率; 2)在下行接收者有不同的頻寬時,可靈活轉發,避免只有一個編碼源相互影響的情況。

SVC跟大小流的特點一樣,區別在於SVC提供了不同幀率的可選規格,媒體服務可以選擇不同的SVC層進行轉發,通過降低幀率達到降低碼率的目的。

在頻寬不足時,不同用戶對清晰優先和流暢優先的需求不一樣,SVC和大小流提供了靈活的機制滿足不同應用的需求。

6 場景差異化

image.png

我們把我們的應用場景簡單地分為兩大類,通訊場景和直播場景。通訊場景簡單的比如影片會議、主播連麥交流,在線面試等等,這種交互性的應用場景對實時性要求較高,它的特點是低延時、流暢優先。而直播場景比如主播直播賣貨,老師在線授課,這種場景的特點是大部分時間都是主播或者老師一個人在講,因此它的特點是高延時、清晰優先。在這兩種場景下有不同的策略傾向,通訊場景更多的是用FEC,重傳作為輔助,提升實時性。直播場景更多是用重傳,FEC作為輔助,提升清晰度。

結束語

image.png

本文主要介紹了對抗弱網的基本QoS策略,除了以上技術之外還有很多模組涉及到延時、清晰、流暢三個維度的平衡。很少有一種技術能做到完美無缺,魚和熊掌不可兼得,我們要做的平衡策略就是取長補短,趨利避害,在不同的網路條件下,不同的應用場景下,結合每種技術的自身特點,將其進行組合打出一套組合拳,實現受益最大化。

Tags: