自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

RTC 弱網(wǎng)對(duì)抗之冗余策略

原創(chuàng) 精選
開發(fā)
網(wǎng)絡(luò)傳輸鏈路上存在著許多不穩(wěn)定的情況,造成所發(fā)出去的數(shù)據(jù)包出現(xiàn)丟包、延時(shí)或者抖動(dòng)。不穩(wěn)定的原因有很多,兩個(gè)通訊雙方在物理空間上存在距離,傳輸過程經(jīng)過很多設(shè)備的處理,中途存在線路硬件故障、軟件驅(qū)動(dòng)限制、或者鏈路數(shù)據(jù)擁塞等情況,都會(huì)導(dǎo)致發(fā)送出去的數(shù)據(jù)包在接收端沒有辦法收到或者延遲收到。

?1. 背景

當(dāng)下社會(huì),實(shí)時(shí)音視頻通話已經(jīng)成為人們生活、工作中重要的組成部分,如商務(wù)會(huì)談、親朋聊天等。而在通話過程中,總會(huì)存在著這樣那樣的意外情況:可能你坐在飛馳的高鐵上——信號(hào)時(shí)好時(shí)壞;又或者在會(huì)議途中離開辦公室——網(wǎng)絡(luò)從 wifi 切換到 4G……實(shí)現(xiàn)高質(zhì)量的實(shí)時(shí)音視頻通話需要搭建一座無視距離連接人們的“橋梁”,而這座“橋梁”需要優(yōu)秀的“基建技術(shù)”來保障網(wǎng)絡(luò)傳輸?shù)姆€(wěn)定性和可靠性。

網(wǎng)絡(luò)傳輸鏈路上存在著許多不穩(wěn)定的情況,造成所發(fā)出去的數(shù)據(jù)包出現(xiàn)丟包、延時(shí)或者抖動(dòng)。不穩(wěn)定的原因有很多,兩個(gè)通訊雙方在物理空間上存在距離,傳輸過程經(jīng)過很多設(shè)備的處理,中途存在線路硬件故障、軟件驅(qū)動(dòng)限制、或者鏈路數(shù)據(jù)擁塞等情況,都會(huì)導(dǎo)致發(fā)送出去的數(shù)據(jù)包在接收端沒有辦法收到或者延遲收到。

我們可以通過一些簡單基礎(chǔ)的工具檢測網(wǎng)絡(luò)是否處于波動(dòng)情況,比如 ping 命令或者 Iperf 工具可以幫助統(tǒng)計(jì)丟包、延時(shí)以及單向抖動(dòng)。我們用 ping 命令向一個(gè)遠(yuǎn)端的主機(jī)發(fā)送 ICMP 消息,遠(yuǎn)端主機(jī)會(huì)對(duì)你進(jìn)行應(yīng)答,這個(gè)過程中如果你發(fā)送出去的 ICMP 消息丟了,或者遠(yuǎn)端服務(wù)器應(yīng)答的消息丟了,在命令行界面上,對(duì)應(yīng)的 icmp_seq 就會(huì)顯示超時(shí)未收到,這種情況就直觀地體現(xiàn)了丟包。

ping vs iPerf   

圖片

帶寬分配和冗余策略是弱網(wǎng)對(duì)抗核心模塊,隨著算法的演進(jìn)迭代,我們能夠保證線上大部分場景的優(yōu)質(zhì)音視頻體驗(yàn)。對(duì)于一些小概率或特殊場景,如突發(fā)網(wǎng)損、擁塞恢復(fù)、PPT 翻頁等,我們還引入了多種冗余策略,來兼顧流暢、恢復(fù)效率和低延時(shí)的需求。

2. 常用包恢復(fù)技術(shù)

通常,一個(gè)數(shù)據(jù)包在網(wǎng)絡(luò)傳輸鏈路中丟失了,主要有兩種方式將包進(jìn)行恢復(fù):一種是發(fā)送端利用接收端通知或者超時(shí)的機(jī)制,重新將這個(gè)包發(fā)送過來;另一種則是基于其他收到的冗余包,在接收端將該包恢復(fù)出來。

第一種是我們熟知的自動(dòng)重傳請求 ARQ 技術(shù)。與 TCP 協(xié)議中的 ACK 應(yīng)答機(jī)制不同,實(shí)時(shí)音視頻場景使用的是 NACK 否定應(yīng)答機(jī)制,通過接收端檢查包序號(hào)的連續(xù)性,主動(dòng)將丟失的包信息通知給發(fā)送端進(jìn)行重新發(fā)送。這種方式的優(yōu)點(diǎn)是在低延時(shí)場景下的恢復(fù)效率高,帶寬利用率好,但在高延時(shí)場景下的效果比較差,存在重傳風(fēng)暴等情況。

圖片

第二種是 Forward Error Correction (FEC) 即前向糾錯(cuò)編碼,一種通過冗余發(fā)送對(duì)抗網(wǎng)絡(luò)丟包的技術(shù)。它主要的技術(shù)原理就是分組編碼,組內(nèi)進(jìn)行冗余恢復(fù)。假設(shè)每個(gè)分組由 k 個(gè)媒體包和 r 個(gè)冗余包組成,一個(gè)分組中 k+r 個(gè)數(shù)據(jù)包中任意 k 個(gè)包可以用來重建 k 個(gè)原始媒體包。這種方式的優(yōu)勢是根據(jù)先驗(yàn)知識(shí)進(jìn)行冗余決策,不受延時(shí)影響。

圖片

3. 冗余策略

在上述基本的包恢復(fù)技術(shù)下,為了使各種場景的整體抗弱網(wǎng)能力最大化,需要針對(duì)帶寬分配、抗丟包技術(shù)的組合配置等進(jìn)行一系列的優(yōu)化,從而達(dá)到抗丟包能力、端到端延時(shí)、卡頓率、冗余率的平衡,達(dá)到“消耗最小的代價(jià),實(shí)現(xiàn)最優(yōu)的體驗(yàn)”。

下面具體介紹我們在這方面做的幾項(xiàng)優(yōu)化。

3.1 自適應(yīng)調(diào)整策略

冗余策略大致可以分為兩類,一類是前向冗余,一類是被動(dòng)冗余。按照前文的描述,我們知道前向冗余的優(yōu)點(diǎn)是不需要交互,在高延時(shí)環(huán)境下更加適用,缺點(diǎn)是帶寬占用過多。被動(dòng)冗余的優(yōu)點(diǎn)是按需發(fā)送,占用帶寬較少,缺點(diǎn)是高延時(shí)場景效果會(huì)急劇下滑。

圖片

我們的冗余策略則是在尋找一個(gè)平衡點(diǎn),通過被動(dòng)冗余和前向冗余策略比例的調(diào)整,在保證丟包恢復(fù)率(比如 99.5%)的前提下,盡量的減小冗余占比,盡量的減小抗丟包恢復(fù)時(shí)間。所以,我們可以將當(dāng)前問題抽象成如下一個(gè)數(shù)學(xué)場景:

  • 假設(shè) m 個(gè)媒體包,在重傳 k 次后,收到 i 個(gè)包的概率記為: P(m, i, k)
  • 假設(shè) n 個(gè)冗余包,接收端收到 j 個(gè)包的概率記為: P(n, j, 0)
  • 根據(jù)當(dāng)前的 FEC 算法,這個(gè) m + n 的分組在重傳 k 的情況下,接收端只需要接收到任意 m 個(gè)包,就能夠恢復(fù)全部的媒體包, 這個(gè)概率為:圖片
  • Nack FEC 算法就是基于恢復(fù)概率大于 99% 的情況來計(jì)算當(dāng)前最少需要配置的 FEC 冗余度 n

基于上面的模型,在 m (平均幀分組大小), k (允許時(shí)間范圍內(nèi)的重傳次數(shù)), i,j 是可以自變量。我們只要將 n 從 0 開始代入,上面求和的結(jié)果大于 99%,就可以將這個(gè) n 作為 FEC 的冗余率。

圖片

通過上面的算法,我們定義一個(gè)抗丟包恢復(fù)時(shí)間 resend_delay,就可以獲得被動(dòng)重傳次數(shù) k。通過參數(shù) k,可以推導(dǎo)出為了達(dá)到恢復(fù)率 99%,還需要的 FEC 比例。上述就是理論上的最優(yōu)冗余率計(jì)算邏輯。通過該算法邏輯,我們可以獲得一個(gè)自適應(yīng)的冗余調(diào)整策略,從而獲得最優(yōu)的冗余比例、最合適的延時(shí)損耗、以及最佳的丟包恢復(fù)率。

3.2 可靠重傳策略

在接收端媒體緩存中,對(duì)于 seq 最新和最老范圍內(nèi)沒有接收到的數(shù)據(jù),接收端會(huì)發(fā)送 Nack 請求,然后發(fā)送端接收 Nack 請求,將相應(yīng)的包傳送過來。

正常工作狀態(tài)中,Pacer 優(yōu)先發(fā)送 RTX 重傳數(shù)據(jù),然后再發(fā)送媒體數(shù)據(jù),這樣接收端這邊較老的丟失數(shù)據(jù)包,總能夠優(yōu)先得到恢復(fù)。

但是在一些場景下,比如大丟包(70% 或以上的丟包率),或者突然限寬(4M ---> 300K)時(shí),會(huì)出現(xiàn)大量的數(shù)據(jù)包被丟棄掉。這個(gè)數(shù)據(jù)包既包括原始包,也包括 Nack 重傳包,這樣會(huì)導(dǎo)致如下圖的一些問題。

圖片

如圖,如果丟包恢復(fù)效果比較差,比如上面 n + 3 的幀已經(jīng)開始發(fā)送了,但是 n 幀還沒有被接收端全部接收到,這時(shí),接收端生成的需要重傳的包列表 nack_list 就會(huì)很長。對(duì)于發(fā)送端來說,由于媒體數(shù)據(jù)還在繼續(xù)發(fā)送,理論上接收端請求的 nack 會(huì)越來愈多,這樣就會(huì)形成 nack 風(fēng)暴。

Nack 風(fēng)暴不但會(huì)導(dǎo)致大量的重傳流量擠占媒體帶寬,導(dǎo)致帶寬分配模塊分配給媒體的碼率降低,也會(huì)導(dǎo)致 Pacer 擁堵,從而帶來更大的端到端延時(shí)。同時(shí),由于不是選擇性的重傳某個(gè)幀的媒體包,導(dǎo)致接收端需要解碼的幀能夠被完整丟包恢復(fù)的概率比較低。

為了避免上述情況,我們引入了可靠重傳模塊:在檢測到上述情況后,及時(shí)暫停媒體發(fā)送,同時(shí)全力保障已經(jīng)發(fā)送的幀數(shù)據(jù)能夠完全恢復(fù)。

圖片

我們通過 TccAck 和 Nack 請求的信息來確定某一個(gè)包處于什么狀態(tài),然后統(tǒng)計(jì)當(dāng)前已經(jīng)發(fā)送的數(shù)據(jù)中沒有被完整 ACK 的幀數(shù)量。如果這個(gè)數(shù)量過大,則會(huì)暫停媒體發(fā)送(同時(shí)暫停編碼器)。暫停媒體發(fā)送后,按照幀從老到新的順序,把 pacer 預(yù)算分配給最高優(yōu)先級(jí)的幀,主動(dòng)發(fā)送這些幀里面沒有被 ACK 的數(shù)據(jù)。

通過上面的方式,我們有效解決了目標(biāo)場景長時(shí)間卡死或者卡頓過多的問題。

圖片

3.3 擁塞恢復(fù)場景下快速抑制 FEC 碼率

我們 FEC 使用 loss 計(jì)算 FEC 冗余率,為了防止抖動(dòng)帶來的劇烈變化,這個(gè) loss 值被平滑過。但是對(duì)于一些場景,比如帶寬突然掉落到較低的場景下,當(dāng)擁塞狀態(tài)解除后,網(wǎng)絡(luò)丟包就會(huì)消失。這個(gè)時(shí)候,我們需要快速的抑制 FEC 碼率,讓出帶寬給到媒體,這樣可以盡快地提升畫面質(zhì)量。

圖片

使用上面的狀態(tài)機(jī),在接收到擁塞解除信號(hào)(擁塞狀態(tài)解除,并且瞬時(shí) tcc loss 變?yōu)?)后,在平滑 loss 沒有變?yōu)?0 的情況下,使用瞬時(shí) loss,可以快速取消掉 FEC 冗余。

3.4 空余帶寬利用優(yōu)化

在共享場景下,冗余策略會(huì)遇到進(jìn)一步的挑戰(zhàn)。比如在 PPT 不翻頁的時(shí)候,空余帶寬需要讓給視頻。但是在翻頁的時(shí)候共享流又會(huì)迅速占據(jù)帶寬。這樣就會(huì)導(dǎo)致視頻碼率在翻頁時(shí)出現(xiàn)較大的波動(dòng)。如果整體可用帶寬較低,就能夠看到視頻質(zhì)量的明顯變化——卡頓率、延時(shí)上升。

圖片

如圖,在 PPT 翻頁場景,video 會(huì)使用 screen 空余未被使用的帶寬。靜止畫面下,video 使用了大部分原本共享的預(yù)算。一旦 PPT 翻頁,共享的碼率瞬時(shí)提高,而 video 沒有及時(shí)把編碼碼率降下來,就會(huì)造成 pacer 模塊的擁堵,導(dǎo)致丟幀從而攝像頭流卡頓。

針對(duì)該場景,我們對(duì)帶寬分配策略進(jìn)行了優(yōu)化:

  • 緩升快降

帶寬分配過程中對(duì)每個(gè)媒體流使用的上一層傳過來的空余碼率進(jìn)行緩升快降操作,防止高優(yōu)先級(jí)碼流過快讓出空余帶寬,導(dǎo)致低優(yōu)先級(jí)碼流的分配碼率大幅波動(dòng)。

  • 關(guān)鍵幀檢測

當(dāng)某個(gè)媒體流開始收到關(guān)鍵幀的時(shí)候,降低該流讓出空余帶寬的量,使得整體輸出碼率的波動(dòng)性降低。

  • 波峰檢測

使用 300ms 統(tǒng)計(jì)窗口判斷波峰,出現(xiàn)較大的波峰數(shù)據(jù)時(shí),降低該流讓出帶寬的量,減小整體輸出碼率的波動(dòng)性。

4. 優(yōu)化效果

在上述的冗余策略優(yōu)化下,飛書會(huì)議整體冗余率大幅度降低(部分上漲是由于原有算法冗余不足,出現(xiàn)大量卡頓,算法優(yōu)化后,整體冗余率調(diào)整為最佳值)。同時(shí),在保證了音視頻整體效果的前提下,整體端到端延時(shí)也進(jìn)一步下降,提升了飛書會(huì)議的整體音視頻體驗(yàn)。

  • 算法優(yōu)化大幅度降低了低延時(shí)場景的冗余率,高延時(shí)場景的冗余率也趨于理論上的合理值。
  • 解決了原有算法在高丟包場景下的問題,對(duì)于高延時(shí),高丟包率的弱網(wǎng)場景下的體驗(yàn)大幅提升。
  • 解決了場景,網(wǎng)絡(luò)狀態(tài)變化過程中的收斂速度,提升了變化過程中的音視頻體驗(yàn)。?

圖片

圖片

在與同類產(chǎn)品的比較中,我們優(yōu)化算法的冗余度明顯低于同類產(chǎn)品,在流暢度對(duì)齊的情況下,消耗更小的帶寬。特別是在高丟包,高延時(shí)場景下,我們的冗余率只相當(dāng)于同類產(chǎn)品的 40%。

圖片

圖片

5. 未來展望

通過這些經(jīng)優(yōu)化的冗余策略,當(dāng)前飛書會(huì)議在弱網(wǎng)場景下的卡頓率、端到端延時(shí)、冗余率等指標(biāo)得到了大幅度的優(yōu)化。在此基礎(chǔ)上,我們未來會(huì)在極端弱網(wǎng)支持,帶內(nèi)冗余聯(lián)動(dòng)策略,智能場景識(shí)別等方面,進(jìn)一步加大投入,增加飛書會(huì)議在各種弱網(wǎng)場景下的客戶端體驗(yàn)。

5.1 極端場景下的抗弱網(wǎng)能力支持

增加針對(duì)極高丟包、極高延時(shí)、丟包+延時(shí),低帶寬+高丟包等場景的支持,配合冗余策略以及帶寬分配策略,達(dá)到極端弱網(wǎng)場景下面的最佳音視頻體驗(yàn)。

圖片

5.2 帶內(nèi)冗余聯(lián)動(dòng)下的抗弱網(wǎng)策略

冗余策略,除了前面提到的非音視頻編碼內(nèi)的帶外冗余(Nack,F(xiàn)EC 等),也包含音視頻編碼內(nèi)的帶內(nèi)冗余。相比于帶外冗余,帶內(nèi)冗余往往結(jié)合編碼自身的特點(diǎn),使用更少的冗余碼率代價(jià),達(dá)到更高的抗弱網(wǎng)效果。

我們的冗余策略也會(huì)進(jìn)一步結(jié)合、更大化利用帶內(nèi)冗余算法,進(jìn)一步提高抗弱網(wǎng)能力,降低整體延時(shí)和帶寬占用。

圖片

5.3 場景識(shí)別下的抗弱網(wǎng)策略優(yōu)化

后續(xù),我們還將對(duì)當(dāng)前的網(wǎng)絡(luò)環(huán)境進(jìn)行識(shí)別,獲取到當(dāng)前的網(wǎng)絡(luò)場景,從而可以進(jìn)一步對(duì)冗余策略以及編碼策略進(jìn)行預(yù)判式的策略下發(fā)。

圖片

比如,我們識(shí)別到當(dāng)前場景為高鐵場景,就可以在冗余策略生成的時(shí)候偏向于抗連續(xù)丟包的策略,也可以預(yù)先增加默認(rèn)前向冗余來增加突發(fā)弱網(wǎng)的抗性。根據(jù)識(shí)別場景的特性,可以在實(shí)際發(fā)生弱網(wǎng)之前以及發(fā)生弱網(wǎng)之后,做出策略上的區(qū)別。

責(zé)任編輯:未麗燕 來源: 字節(jié)跳動(dòng)技術(shù)團(tuán)隊(duì)
相關(guān)推薦

2022-11-24 09:35:52

2018-01-05 16:14:25

VM存儲(chǔ)策略

2024-11-05 09:56:30

2020-12-28 09:42:25

弱密碼密碼加密

2016-07-28 10:34:12

云計(jì)算

2017-11-14 14:24:46

移動(dòng)端DNS無線網(wǎng)絡(luò)

2023-02-17 08:03:11

2014-05-19 09:25:33

2019-09-16 09:46:55

對(duì)抗反分析檢測逃逸惡意軟件

2019-09-16 09:46:55

2015-06-05 15:29:16

網(wǎng)絡(luò)優(yōu)化

2019-09-11 15:49:02

入侵檢測反分析逃逸技術(shù)

2023-09-08 15:20:30

2020-06-22 14:18:02

運(yùn)維架構(gòu)技術(shù)

2010-09-14 14:52:37

2012-01-11 16:52:05

Strix礦井

2011-07-20 16:07:55

組策略
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)