WebRTC GCC算法介绍

随着网络带宽的日益增加和便携式设备,如智能手机或平板电脑处理能力的增强,基于互联网的实时通信已经成为热点。

虽然视频会议已商用了多年,特别是SKYPE这样的视频应用在互联网上已有10年时间,但针对实时音视流高效传输的内部控制标准却是空白。所以标准化组织IETF和W3C准备解决这个问题(2011-2013年)。

IETF的RTCWeb 想法是把用于实时媒体流的网络拥塞控制算法标准化成协议。 W3C的WebRTC想法是标准化一套HTML5的API用于网络浏览器的实时流媒体。

CISCO向IETF提出NADA(Network Assisted Dynamic Adaptation)算法,但目前还没给出实现。

Ericsson也向IETF提出SCReAM(Self-Clocked Rate Adaptation for Multimedia)。Scream的目标网络偏向无线网LTE 3G 4G。

Google向IETF提出的是GCC(Google Congestion Contrl)。

本次要介绍的是Google Congestion Contrl。


1.GCC是什么?

GCC是Google Congestion Contrl的缩写,用于实时媒体通讯的网络拥塞控制算法。不是C/C++的编译工具。

GCC基于UDP,它已实现于开源软件WebRTC项目,也集成到M23后的chrome版本,同时应用在Google Hangouts应用中。

实时媒体通讯的网络拥塞控制有三个难点:

1.媒体信源不能立刻按要求调整成指定的带宽,通常媒体信源的变化是不连续甚至跳变的,变化的幅度也大;

2.即使网络拥塞已经被发现,参与的两端也不确定要如何反应,减少带宽不一定是正确的做法;

3.越是压缩率高的编码器越对网络丢包敏感,但网络实时性的要求基本要排除丢包重传的使用。

业界对媒体流的网络拥塞算法已有标准并开放,主要方法是基于速率的控制,通过平滑窗口的算法实现平滑的数据发送,如TFRC(TCP Friendly Rate Control)和RAP(Rate Adaptive Protocol)。

TCP偏向使用基于丢包率来感知网络拥塞,当网络设备因为拥堵引入队列时,没有丢包但要求实时性的双向媒体传输是不能接受的。 另一种是基于时延的方法感知网络拥塞,业界对哪种方案更优一直在争议。

GCC使用两种拥塞控制的算法来应对共享带宽网络的拥塞控制。

2.基于时延的网络拥塞控制

GCC里基于时延的网络拥塞控制由三部分组成:

1. 到达时间滤波器arrival-time filter;

2. 过载检查器over-use detector;

3.速率控制器rate controller。

GCC中使用包间间隔时间为度量,可以是两个网络包间也可以是两组包间的间隔。

d(i) = t(i) – t(i-1) – (T(i) – T(i-1))

d(i)表示时延,t(i) – t(i-1)是到达时间,T(i) – T(i-1)是发送时间。

一列数据包短时间里连续发送,这段时间称为突发时间,建议突发时间为5ms。不建议在突发时间内的包间隔时间做度量,而是把它们做为一组来测量。这种组包发送的形式在WI-FI和无线网络里常常这么用。

T(i)用到达包里的时间戳,或一组到达网络包最后一包的时间戳。如到达包有乱序则不采用其数据。

当我们把定义发送时间一组长度为L的数据包通过能力为C的通道。

ts = L/C,于是我们建模有:

d(i) = dL(i)/C(i) + w(i)

=  dL(i)/C(i) + m(i) + v(i)

w(i)是随机函数W的信号量,它的输入因子有吞吐能力C(i),当前网络阻塞情况,当前速率。在这种模型中我们认为输吞吐能力C比其它参数相对稳定,接近常数或变化缓慢。

我们再把w(i)建模成白色高斯过程,于是当对信道过载使用时,w(i)会增加,当信道通过数据量减少时,w(i)会减少,其他情况w(i)为0。

从这个模型我们可知,传输的数据量越大所要的时间越长需要相对时延也更大。而网络抖动和其他影响时延的因素不被采集和考虑。

因为d(i)和dL(i)是简单可测量的,那么通过w(i)预测C(i)可用一个自适应滤波器来实现,如使用卡尔曼滤波器Kalman filter。

3.卡尔曼滤波

数据滤波是去除噪声还原真实数据的一种数据处理技术。

卡尔曼Kalman滤波在测量方差已知的情况下能够从一系列存在测量噪声的数据中,估计动态系统的状态,由于它便于计算机编程实现, 并能够对现场采集的数据进行实时的更新和处理, Kalman滤波是目前应用最为广泛的滤波方法。

卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。

卡尔曼滤波不要求信号和噪声都是平稳过程的假设条件。对于每个时刻的系统扰动和观测误差(即噪声),只要对它们的统计性质作某些适当的假定,通过对含有噪声的观测信号进行处理,就能在平均的意义上,求得误差为最小的真实信号的估计值。

假设状态空间的n-1时刻估计值和观测空间的n时刻测量值都满足独立高斯分布,Kalman滤波器就是通过高斯分布的乘积运算将估计值和测量值结合,获得最接近真值的n时刻估计。高斯分布乘积运算的结果仍为高斯分布,高斯分布的均值对应n时刻的估计值,高斯分布的方差对应n时刻的均方误差。

4.过载探测器

d(i) =  dL(i)/C(i) + m(i) + v(i)

m(i)是从滤波器获取到的预测值,当预测值高于阀值gamma_1(i)则过载探测器发出过载信号给速率控制器。附加条件有这个过载状态需要持续gamma_2毫秒时间。如果m(i)小于m(i-1),即使高于阀值也不需要发出过载信号。相对应的负数区间也是如此,如m(i)小于-gamma_1(i)时,过载被发现。

所以阀值gamma_1对算法的影响很大。如果是gamma_1是静态值会导致一系列问题,所以gamma_1需要动态调整来达到良好的表现。公式如下:

gamma_1(i) = gamma_1(i-1) + (t(i)-t(i-1)) * K(i) * (|m(i)|-gamma_1(i-1))

当m(i)超过[-gamma_1(i-1),gamma_1(i-1)]时增加gamma_1(i),而当m(i)落入[-gamma_1(i-1),gamma_1(i-1)]区间时减少gamma_1(i)。当|m(i)| – gamma_1(i) > 15,建议gamma_1(i)不更新。K(i)为更新系数。

同时建议gamma_1(i)控制在[6,600]区间。太小的值会导致探测器过于敏感。建议增加系数要大于减少系数K_u > K_d。

其实建议值如下:

gamma_1(0) = 12.5 ms

gamma_2 = 10 ms

K_u = 0.01

K_d =  0.00018

5.速率控制器

速率控制器由两个控制器组成,一个是基于时延的预测控制,另一个是基于丢包的的预测控制。控制器内部置状态机,结合过载探测器进行状态的切换。

6.基于丢包的控制

前面介绍基于时延的控制是有一个假设前提,即传输通道的缓冲足够大。当传输通道的缓冲很小时,通过时延是观测不到过载状态的,这时需要丢包率来表示过载。

·当接收侧感知到2-10%丢包率,发送端的预测值不变。

·当实际丢包率超过预测值10%时,新的预测值可更新为As_hat(i) = As_hat(i-1)(1-0.5p),其中p为丢包率。

·当实际丢包率小于2%时预测时可更新为As_hat(i) = 1.05(As_hat(i-1)),其中p为丢包率。


在GCC中基于丢包的预测值不应大于基于时延的预测,也不应小于基于TFRC(rfc3448)的预测。

7.参考

https://tools.ietf.org/html/draft-ietf-rmcat-gcc-00#page-10

https://tools.ietf.org/html/rfc3448

更多WebRTC优秀资源可登陆 编风网 http://befo.io/

微信公众号:WebRTC中文网,微信ID:webrtcorgcn

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容