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