极致流畅体验的密码:网易云信 QoS 策略介绍 | 体验共享技术专题
導讀:近日,艾媒咨詢發布了《2021年中國泛娛樂行業體驗共享專題報告》,首次提出「體驗共享」將成為泛娛樂行業日后發展的重要方向。針對該趨勢,網易云信推出「體驗共享」技術專題,從?QoS 策略、WE-CAN 全球智能路由網絡、視頻、音頻等維度解讀一起聽、一起看、一起唱、一起玩等場景背后的技術支持。本篇文章是該系列的第一篇。
文|王任
網易云信資深音視頻引擎開發工程師
隨著移動網絡的普及和發展,視頻會議、互動直播等音視頻交互式應用迎來了爆發式的增長,為滿足人們對音視頻高品質、低延時、極致流暢體驗的要求,網絡 QoS(Quality of Service,服務質量)策略提供了對數據傳輸通道的基礎保障。
音視頻網絡傳輸常見的問題和挑戰有:擁塞、延時抖動、丟包等。當網絡出現擁塞,對擁塞的處理不當,會導致網絡延時不斷變大,嚴重時甚至會出現丟包,最終導致音視頻播放延時久、卡頓等。擁塞控制是網絡 QoS 非常重要的部分,本文主要介紹網易云信的擁塞控制技術和策略。
?什么是網絡擁塞和擁塞控制
網絡擁塞是指對網絡資源(包括鏈路帶寬、存儲空間和處理器能力等)的使用超過了固有的處理能力和容量,造成網絡傳輸性能下降的情況。擁塞控制的目的是通過控制發送端發送數據的速率,避免出現網絡擁塞,以及出現擁塞之后,進行擁塞消除,從而提升網絡吞吐量。
如果把網絡中傳輸的數據比喻為道路交通中的車輛,網絡擁塞就如同交通擁塞,擁塞控制策略就像是交通秩序管理和疏通措施。
網絡擁塞產生的原因與網絡分類
在 WIFI 網絡中,信號強度和傳輸能力隨著傳輸距離的增加而下降,物理遮擋、信號干擾、接入設備眾多等原因都會導致鏈路的可用傳輸帶寬受到限制。
移動通信網絡中,同樣也會受到移動網絡信號強度以及基站接入容量的限制。
有線網絡中,如果分配的是共享帶寬,而不是獨享帶寬,上網高峰期間同樣也有可能存在帶寬的限制。
無論是哪種物理類型的網絡,根據擁塞后不同的表現現象,可把網絡大致分為兩類,淺緩沖區(shallow buffers)網絡:幾乎沒有網絡節點 buffers,擁塞后直接表現為丟包,丟包前延時不增加或增加不明顯;深緩沖區(depth buffers)網絡:有較大的網絡節點 buffers,擁塞后最先表現為延時增加,只有當網絡節點 buffers 消耗殆盡時,才會產生丟包。
擁塞控制策略介紹
擁塞控制策略,主要包括實時帶寬估計算法、碼率分配策略以及平滑發送。
?融合的帶寬估計算法?
采用融合算法,分別使用基于延時變化(delay-based)的算法和基于丟包(loss-based)的算法,對網絡擁塞狀態、丟包趨勢進行檢測,并結合 ACK 碼率,計算得到帶寬估計值。
算法流程如下:
發送端平滑發送數據,接收端周期性反饋收包情況,包括每個包是否到達,以及具體的到達時間。
發送端在接收到反饋信息后,把包到達時間以及包大小輸入,計算給定時間窗內(通常是數百 ms)接收方接收碼率的樣本值,并通過貝葉斯估計算法(使用當前估計值和新的樣本碼率計算得到新的估計值。與當前估計值相差甚遠的樣本,被賦予較小的權重,因為它們被認為更有可能是與擁塞無關的延遲峰值造成的)計算接收方的接收碼率(以下稱為 ACK 碼率),網絡出現擁塞時,把ACK碼率作為估計帶寬值的參考值。
delay-based 算法進行帶寬估計時,首先把發送數據包進行分組(burst group)處理,并計算得到相鄰包組的傳輸延時變化值,然后把它作為輸入,通過趨勢線性(trendline)算法,對網絡負載情況進行估計。一共有三種網絡狀態:擁塞(overuse)、正常(normal)、低負載(underuse)。
loss-based 算法根據反饋信息,計算得到樣本丟包率,然后把它和發送碼率一起輸入,通過濾波算法對丟包率趨勢做出判定,有三種趨勢狀態:LossIncr、LossHold、LossDecr。
首先根據網絡負載狀態、丟包趨勢狀態以及 ACK 碼率,進行碼率計算(Rate Control),有三種狀態:RC Decr、RC Hold、RC Incr,得到 RC 估計值。再結合當前丟包率和丟包趨勢狀態,計算得到最終的帶寬估計值(Bandwidth Estimate)。
丟包率小于設定的閾值(低),取 θ*RC 估計值為最終估計值(θ 取值大于1.0,根據 RTT 動態調整,RTT 越大,越接近1.0);丟包率大于設定的閾值(高)且處于 LossIncr 狀態持續超過閾值,取 ACK 碼率為最終估計值;其他情況,取 RC 估計值為最終估計值。
對于深緩沖區網絡,當網絡出現擁塞時,傳輸延時呈現逐漸增加的趨勢,所以 delay-based 算法能夠及時檢測網絡處于擁塞狀態,從而可以準確計算得到帶寬估計值,并進行擁塞控制。
而對于淺緩沖區網絡,當網絡出現擁塞時,延時沒有增加或增加不明顯,delay-based 算法無法或無法及時檢測到網絡處于擁塞狀態。此時,需結合丟包率和丟包趨勢進行估計。
網絡帶寬變化時,根據實時帶寬估計值動態調整編碼碼率,如下:
00:29
?碼率分配?
通常,我們把帶寬估計值的上限設置為視頻的最大推薦碼率(由視頻質量控制 VQC 模塊,根據采集分辨率和幀率等計算得到)。當網絡沒有丟包時,帶寬估計的所有碼率,全部分配用于編碼;當網絡存在丟包時,采用前向糾錯(FEC)+丟包重傳(NACK)的策略,進行丟包恢復。因此,帶寬碼率分配時,需保證帶寬估計值等于 FEC 碼率+重傳碼率+編碼碼率三者之和,才不會導致網絡擁塞。可見,丟包情況下,FEC 和重傳碼率會擠占編碼碼率,視頻質量會有一定程度上的下降。
動態碼率上限策略
根據過去一段時間統計的發送總碼率與編碼碼率的比值,得到當前的帶外系數樣本值,經濾波平滑處理(取觀察窗口內的均值)后,得到最終的帶外系數,用它乘以編碼最大推薦碼率,作為新的帶寬估計上限。上限值的更新采取快升慢降的策略。
通過動態上限機制,即通過計算帶外系數,把帶寬估計值的上限進行提升,在可用帶寬足夠的情況下,使 FEC 和重傳碼率占用帶外碼率,提升編碼碼率。
70%丟包+2Mbps帶限VS 70%丟包不限帶寬,視頻清晰度提升效果明顯:
00:10
70 loss+2m
VS
70 loss
00:10
?平滑發送?
平滑發送(Paced Send)通過令牌桶限速機制來實現對發送速度的控制。所有待發送的 RTP 數據包(包括編碼、FEC、重傳包),都先放入優先級隊列中進行管理,定時器根據帶寬估計值和 Pacer 系數定期更新預算。當預算不為零時,直接發送隊列中的數據并消耗預算,預算消耗完,暫停發送數據。
由 Pacer 系數控制平滑力度,若 Pacer 系數等于1.0,則表示嚴格按照帶寬估計值發送數據,此時對網絡的突發沖擊最小,有利于提升帶寬利用率和穩定性,但可能會引入一定的幀發送延時(Pacer 延時)。
在音視頻應用中,由于以下原因,往發送隊列中添加數據的速率存在波動:
周期性的 I 幀、場景變化等導致編碼器輸出的幀大小、幀碼率不均勻;
應對突發丟包而增加的 FEC 、重傳碼率。
一方面要通過平滑減少碼率波動峰值對網絡造成的擁塞,避免引入大的擁塞延時導致卡頓;另一方面要減少較大幀的幀發送耗時,兩者不可兼得。因此平滑系數的設置顯得尤其重要,這實際上是 Pacer 延時、擁塞延時、帶寬利用率、卡頓率等 QoE 評價指標之間的平衡。
動態 pacer 系數策略
設計原則:在帶寬受限時,把平滑系數盡量設置小一些,并根據排隊延時動態增減;在帶寬不受限時,把平滑系數設置大一些,結合當前帶寬估計值和過去一段時間內的網絡擁塞狀態(觀察窗口期),判定帶寬是否受限。
結語
本文主要介紹了云信網絡 QoS 中的擁塞控制策略,包括帶寬估計算法、碼率分配以及平滑發送策略。擁塞控制應用到具體的音視頻業務中,實際是各種 QoE (Quality of Experience,體驗質量)指標之間的平衡。算法的改進通常不是一蹴而就的,需要通過實驗室弱網模擬結合線上灰度觀察關鍵指標來驗證,采用數據驅動的方式,幫助打磨出最合適的擁塞控制策略和參數,在保障端到端低播放延遲、低卡頓率的同時,擁有高帶寬利用率,為打造極致流暢的高品質音視頻體驗保駕護航。
?作者介紹?
王任,網易云信資深音視頻引擎開發工程師,主要負責網絡引擎的QoS算法開發,在流媒體傳輸協議、弱網對抗、擁塞控制算法設計方面有豐富的經驗。
?相關閱讀推薦?
網絡QoS的平衡之道——音視頻弱網對抗策略介紹
艾媒咨詢:泛娛樂「體驗共享」報告發布,網易云信多個案例領銜
總結
以上是生活随笔為你收集整理的极致流畅体验的密码:网易云信 QoS 策略介绍 | 体验共享技术专题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教师节特辑丨网易云信:素质教育「名师」是
- 下一篇: 眼界大开 声临其境丨胡宜峰:视频深度伪造