網絡QoS的平衡之道——音視頻弱網對抗策略介紹

王興鶴文章封面圖.jpeg

做者:網易智企雲信資深音視頻引擎開發工程師 王興鶴面試

隨着AI和5G的到來,音視頻應用將變得愈來愈普遍,人們對音視頻的品質需求也愈來愈高,視頻分辨率已經從高清發展爲超高清、VR,視頻幀率也已出現60fps、120fps等應用,交互式的應用對端到端延時也提出了更高的要求。與此同時,設備的硬件性能也日新月異。能夠預見,隨着5G的到來網絡中傳輸的數據將會呈現爆發式增加,大量數據將會給網絡傳輸帶來巨大的挑戰。所以,如何保證用戶高品質的音視頻體驗?傳輸將會是一個重要環節。算法

網絡中常見的問題有丟包、抖動、擁塞、延時。如下將分別介紹這些問題對視頻體驗帶來的影響。服務器

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

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

網絡發生擁塞時,音視頻的播放狀況將變得更加惡劣,擁塞形成的直接影響是突發丟包或者突發抖動,若是不及時預測擁塞的發送下降發送數據量,接收端將會出現卡頓、延時大、畫質差等等問題。編碼

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

咱們用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策略,除了以上技術以外還有不少模塊涉及到延時、清晰、流暢三個維度的平衡。不多有一種技術能作到天衣無縫,魚和熊掌不可兼得,咱們要作的平衡策略就是取長補短,趨利避害,在不一樣的網絡條件下,不一樣的應用場景下,結合每種技術的自身特色,將其進行組合打出一套組合拳,實現受益最大化。

相關文章
相關標籤/搜索