https://datatracker.ietf.org/doc/html/draft-alvestrand-rmcat-remb-03 - REMB
https://datatracker.ietf.org/doc/html/draft-ietf-rmcat-gcc-02 - A Google Congestion Control Algorithm for Real-Time Communication on the
World Wide Web
REMB GCC 擁塞控制的關(guān)鍵說明
-
接收端帶寬估算 REMB
Delay-based controller: 根據(jù)包到達(dá)信息奕坟,發(fā)送端報(bào)告估算最大帶寬
-
Arrival-time model
- d(i) = t(i) - t(i-1) - (T(i) - T(i-1))
- d(i): 數(shù)據(jù)組間延遲
- t(i): 數(shù)據(jù)組發(fā)送時(shí)間戳
- T(i): 數(shù)據(jù)組到達(dá)時(shí)間戳
d 表達(dá)了兩個(gè)數(shù)據(jù)組間收發(fā)時(shí)長(zhǎng)的差值翰守。
d 平均值增大表明數(shù)據(jù)擁堵练对,下降表明網(wǎng)絡(luò)趨于暢通冰寻。 -
Pre-filtering
為了應(yīng)對(duì)網(wǎng)絡(luò)中斷恢復(fù)導(dǎo)致的瞬間數(shù)據(jù)爆增的情況鳄炉,加入預(yù)處理:
- burst_time 時(shí)間內(nèi)發(fā)送的所有數(shù)據(jù)变秦,合并為一個(gè)數(shù)據(jù)組
- 到達(dá)時(shí)間少于 burst_time 并且 數(shù)據(jù)組間延遲少于0 合并到當(dāng)前數(shù)據(jù)組
-
Arrival-time filter
通過卡夫曼濾波去掉網(wǎng)絡(luò)抖動(dòng)噪聲壳嚎,估算出實(shí)際的
數(shù)據(jù)組間延遲
- 關(guān)于卡夫曼濾波的解釋 https://www.zhihu.com/question/23971601/answer/137325095
- 根據(jù)多個(gè)測(cè)量值估算
- 加權(quán)平均
- 根據(jù)下一次的測(cè)量值修正權(quán)重
- 關(guān)于協(xié)方差的解釋 https://www.zhihu.com/question/20852004
- 關(guān)于卡夫曼濾波的解釋 https://www.zhihu.com/question/23971601/answer/137325095
-
Over-use detector
根據(jù)動(dòng)態(tài)閥值來得到擁塞狀態(tài)障癌。超出閥值范圍一定時(shí)間(建議10ms)凌外,則置為非正常狀態(tài)。
- 大于閥值范圍涛浙,over-use: 擁堵
- 閥值范圍內(nèi)康辑,normal:正常
- 少于閥值范圍,under-use:空閑
-
Rate control
根據(jù)擁塞狀態(tài)來調(diào)整估算碼率轿亮。
空閑則回升碼率疮薇,擁堵則下調(diào)碼率
估算碼率 A_hat(i)
-
-
發(fā)送端帶寬估算 SendSide-BWE (chrome m55 及以上版本)
原理與 gcc 一致,濾波方法改用了 trendline filter
-
發(fā)送端碼率控制 GCC
Loss-based controller: 根據(jù)丟包率我注,編碼性能按咒,RTT時(shí)間估算碼率
每次收到 REMB 需要計(jì)算一次丟包率,估算碼率 As_hat(i)-
2%-10%丟包率
:保持不變 -
<2%
:As_hat *= 1.05 -
>10%
:As_hat = 1 - 0.5丟包率
2-10%制定的理由:如果丟包率保持在10%以下但骨,一般不是因?yàn)樽陨泶a率原因?qū)е碌睦撸圆蛔鞔a率調(diào)整。如果是自身碼率原因?qū)е聛G包嗽冒,丟包率會(huì)不斷遞增呀伙,直到突破10%。
- 據(jù)說添坊,碼率還會(huì)根據(jù) TFRC 估算剿另。最后取 Delay-based Loss-based TFRC 三個(gè)估算值的最小值。
-
-
發(fā)送端編碼性能控制
- 機(jī)制說明 bugs.webrtc.org/8504
通過編碼耗時(shí)來估算性能
相關(guān)資料
https://blog.csdn.net/fishmai/article/details/78793512
https://blog.csdn.net/crystalshaw/category_9281395.html