火山引擎智能擁塞控制算法 VICC(Volcano Intelligent Congestion Control)是一種自適應的擁塞控制算法,旨在解決全球不同網絡環(huán)境下,不同音視頻應用對帶寬利用率和延時的差異化要求。它結合了傳統(tǒng)擁塞控制算法(如 GCC 和 BBR)的優(yōu)點,并且能夠根據不同的網絡條件、業(yè)務偏好和碼率特征進行自適應調整,包括自適應擁塞響應速度、自適應帶寬探測幅度、自適應丟包檢測策略、自適應抗抖動能力和自適應 Padding。通過這些自適應調整,VICC 算法能夠提升各種復雜弱網下的帶寬利用率,同時在滿足不同延時的條件下,盡量提升帶寬的穩(wěn)定性,為用戶提供更好的音視頻體驗。
實時音視頻應用的網絡傳輸面臨諸多方面的挑戰(zhàn),其中包括:
除了上述挑戰(zhàn),實時音視頻傳輸還需要關注體驗指標,如實時性、流暢性、清晰度、音畫同步性等,這些指標對于提供高質量的音視頻體驗至關重要。
為了快速提升線上用戶弱網相關的體驗,火山引擎根據抖音集團真實用戶的負反饋數據打磨研發(fā)了“音視頻卡頓歸因模型”,它可以對線上音視頻卡頓的所有 case 進行自動歸因和聚類,為弱網問題的優(yōu)化和優(yōu)先級給出有效指導。
根據模型對線上用戶音視頻卡頓反饋的歸因和聚類,我們發(fā)現(xiàn),當前引起線上卡頓問題的主要原因是上下行大小緩存問題。
線上用戶視頻/音頻卡頓歸因類型占比
大小緩存的描述,可以參考:https://www.ietf.org/archive/id/draft-cardwell-iccrg-bbr-congestion-control-00.txt
大緩存:Deep buffers,at bottleneck links with deep buffers, congestion happens before packet loss.
小緩存:shallow buffers, in shallow buffers, packet loss happens before congestion.
自 Google 開源 WebRTC 實時音視頻框架以來,GCC 作為默認擁塞控制算法備受行業(yè)研究和關注,而 WebRTC 在演進過程中,也在不斷演進集成 BBR、PCC 等擁塞控制算法,以期望進一步提升實時音視頻的傳輸性能。
下文以 GCC 和 BBR 算法為例,我們來看一看當前主流擁塞控制算法的特性和不足。
GCC 算法是專為實時音視頻傳輸設計的擁塞控制算法,但隨著網絡環(huán)境日益復雜、音視頻應用場景越來越豐富,GCC 算法難以提升上限以獲得更好的音視頻傳輸體驗。
GCC 算法帶寬估計與觸發(fā)擁塞延時示意圖
GCC 算法的關鍵特征
GCC 算法的發(fā)送/接收碼率的聯(lián)動是非連續(xù)性的。在檢測到擁塞之前,發(fā)送碼率和接收碼率是不聯(lián)動的;檢測到擁塞之后,發(fā)送碼率和接收碼率才開始聯(lián)動。如果要降低非聯(lián)動過程中的網絡延遲,GCC 算法需要過降帶寬排空非聯(lián)動過程中網絡中堆積的數據。另外,GCC 的網絡探測速度也較慢。
GCC 算法存在的問題
GCC 算法的幾個主要問題中,最核心的問題是帶寬估計的準確性(帶寬利用率)和擁塞檢測的有效性(對網絡的沖擊)存在很難調和的矛盾,導致這個問題的主要原因是:
BBR 算法是互聯(lián)網通用的擁塞控制算法,其設計目標追求高帶寬利用率、低擁塞延遲和丟包,BBR 在通用互聯(lián)網領域具備良好的性能表現(xiàn),但因其設計目標和算法特性,不適應于實時音視頻傳輸場景。
BBR 算法帶寬估計與觸發(fā)擁塞延時示意圖
BBR 算法的關鍵特征
和 GCC 算法不同,BBR 算法的發(fā)送/接收碼率的聯(lián)動是連續(xù)性的,它實時跟蹤接收碼率,同時根據擁塞檢測的結果,來調整發(fā)送窗口(cwnd)的大小,并最終影響發(fā)送碼率。
BBR 算法存在的問題
雖然 BBR 在帶寬估計準確性上等能力要高于 GCC,但它也存在一些明顯的問題:
由于 GCC 和 BBR 等算法在實時音視頻傳輸場景存在一些不足,火山引擎網絡傳輸團隊自研了 VICC 算法,旨在優(yōu)化上述問題的同時,也為火山引擎實時音視頻業(yè)務提供更加良好的用戶體驗。
VICC 算法主要通過網絡狀態(tài)統(tǒng)計進行自適應帶寬估計決策,并作出帶寬評估動作,以提升各種復雜網絡下?lián)砣刂频男阅鼙憩F(xiàn)。在近一年的實驗室和線上業(yè)務打磨過程中,我們深入分析了不同算法原理及現(xiàn)網痛點弱網問題,輸出了 40+ 項最佳工作點及 9 篇技術專利,線上業(yè)務的各項指標,特別是視頻卡頓率、首幀時長等也得到了顯著的改善。
火山引擎智能擁塞控制算法 VICC 架構圖
評估當前網絡狀態(tài)的重要指標之一是網絡狀態(tài)統(tǒng)計參數,而準確的基礎網絡狀態(tài)參數是提高帶寬估計準確性和帶寬利用率的關鍵基石。VICC 算法提供了多種基礎網絡狀態(tài)參數,部分基礎網絡狀態(tài)統(tǒng)計參數如下:
VICC 算法結合了傳統(tǒng)擁塞控制算法的優(yōu)點,并且能夠根據不同的網絡條件、業(yè)務偏好和碼率特征進行自適應調整,包括自適應擁塞響應速度、自適應抗干擾能力、自適應丟包檢測、自適應帶寬探測幅度、自適應擁塞排空等。
VICC 繼承并優(yōu)化了 GCC 和 BBR 擁塞檢測能力,通過對發(fā)送碼率、接收碼率及延遲參數的關系進行建模,觀察延遲參數變化趨勢及其關聯(lián)性,以及對于延遲參數的容忍程度進行擁塞響應,從而快速排空網絡擁塞。
和 GCC / BBR 相比,VICC 擁塞響應及收斂速度更快。
GCC / BBR / VICC 擁塞響應及收斂速度比較(線上實測)
擁塞響應越靈敏,意味著在網絡抖動場景下容易誤判,導致算法抗干擾能力下降。VICC 使用蟻穴算法來對抗網絡抖動和亂序,通過接收碼率和發(fā)送碼率來度量網絡透過率,并結合觀察延遲參數變化趨勢及關聯(lián)性,提升自適應抗干擾能力。
VICC 可以對抗 2000ms 以內的延遲抖動幅度,抗抖動能力顯著比 GCC 和 BBR 強。
GCC / BBR / VICC 抗抖動能力比較(線上實測)
靈活可配置的擁塞檢測靈敏度
在自適應擁塞檢測的基礎上,VICC 還會根據業(yè)務偏好,提供靈活可配置的擁塞檢測靈敏度模式設置,以適用于不同業(yè)務場景的訴求,并做好擁塞響應靈敏和抗干擾能力強的 trade-off。
以火山引擎 RTC 典型應用場景為例,互娛、企業(yè)通訊等場景一般可以容忍 200-300ms 的延時,而遠程車控、云游戲等場景只能容忍 50-100ms 的延時。VICC 提供多種模式來適應不同場景的延時需求,在延時容忍度較高的場景,VICC 可以通過延遲擁塞響應時間來獲得更高的帶寬估計的穩(wěn)定性,在延時容忍度較低的場景,VICC 可以通過快速擁塞響應來降低網絡擁塞延遲。
火山引擎 RTC 典型應用場景
通過對發(fā)送碼率、接收碼率及丟包參數的關系進行建模,并微幅調整發(fā)送碼率,檢測接收碼率和丟包參數之間的關聯(lián)性,VICC 可以自適應檢測出丟包為隨機丟包和擁塞丟包。一旦識別出隨機丟包后,VICC 可以準確地對隨機丟包進行系數補償,以達到不誤降帶寬的效果。
和 GCC / BBR 相比,VICC 隨機丟包抗性可達到 70% 以上。
GCC / BBR / VICC 隨機丟包抗性比較(線上實測)
考慮實時音視頻傳輸對于延遲的容忍,根據延遲參數的程度、自適應上探幅度及下探幅度,在保留競爭力的同時,VICC 避免了因為頻繁探測引入的網絡延遲堆積問題。同時,在檢測到擁塞緩解后,VICC 通過對發(fā)送碼率、接收碼率及延遲參數的關系進行建模,迅速提升帶寬上探幅度和調整時間窗口;在探測到帶寬滿足音視頻傳輸體驗后,再逐步放慢上探幅度和時間間隔。
當網絡存在瓶頸帶寬時,VICC 的帶寬探測相對 GCC 和 BBR 更平穩(wěn)。當瓶頸帶寬發(fā)生變化時,VICC 可以快速跟蹤實際瓶頸帶寬。
GCC / BBR / VICC 帶寬探測平穩(wěn)度比較
VICC 使用自適應 Padding 策略來解決帶寬下溢疊加復雜弱網場景下的帶寬估計,在精準探測網絡帶寬的同時,盡量避免網絡沖擊和帶寬浪費。在決策需要發(fā)送 Padding 時,會先根據帶寬估計值設定目標發(fā)送碼率,并實時度量接收碼率,同時動態(tài)調整目標碼率。
VICC 自適應 Padding 策略示意圖
通過對擁塞響應速度、帶寬探測幅度、丟包檢測策略、抗抖動能力等一系列的“自適應調整”,VICC 算法能夠提升各種復雜弱網下的帶寬利用率,同時在滿足不同延時的條件下,盡量提升帶寬的穩(wěn)定性,為用戶提供更好的音視頻體驗。
為了更直觀地展示 VICC 算法對于用戶音視頻體驗的提升效果,我們在不同類型的弱網環(huán)境下進行了音視頻通話測試,通過比較對端畫面的實時性和流暢性來比較 VICC 算法和市場上同類算法的擁塞控制能力。
在上行 70% 丟包網絡環(huán)境下,使用了 VICC 算法的火山引擎 RTC 依然保持穩(wěn)定傳輸,幾乎沒有表現(xiàn)出卡頓。
當網絡突發(fā)上行 300kbps 限速小緩存時,使用了 VICC 算法的火山引擎 RTC 出現(xiàn)了短暫的卡頓,但算法很快進行了對抗,迅速恢復穩(wěn)定和流暢,對用戶的體驗影響較小。
VICC 算法經過了字節(jié)內部質量專項評估實驗室打磨和驗證后,在火山引擎線上業(yè)務上也進行了充分的流量驗證,在視頻通話、屏幕共享等場景中,視頻卡頓率和首幀指標得到了顯著的改善,其中,視頻通話卡頓率下降 27%、首幀延時下降 100ms+;屏幕共享卡頓率下降 15%,首幀延遲下降 200ms。 同時,使用自適應 Padding 策略后,現(xiàn)網上下行碼率也得到了明顯的改善,其中,上行Padding碼率下降 90%,下行下降 70%。
VICC 算法上線后對視頻卡頓、首幀和 Padding 碼率指標的改善
在網絡環(huán)境高度復雜的背景下,影響用戶體驗的因素眾多,有時通用算法難以精準匹配所有場景的環(huán)境特點,因此,一些特定場景的用戶體驗難以做到極致,無法實現(xiàn)“個性化場景自適應”的目標。
未來,我們將根據線上問題歸因聚類建模,對用戶網絡場景精準識別,提升網絡場景識別算法的準度和范圍,并以此為驅動,針對不同的弱網場景進行全鏈路的差異化優(yōu)化,使算法在各類網絡模型下的收斂達到最優(yōu),持續(xù)提升用戶體驗。
本文鏈接:http://www.www897cc.com/showinfo-26-14336-0.html火山引擎實時、低延時擁塞控制算法的優(yōu)化實踐
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: JavaScript,是時候瘦瘦身了!