实时音视频流媒体传输的思考和实践( 四 )


Underuse的状态是一种不稳定的状态,这时候采取的策略一般是比较保守的,在Underuse的状态下是可以把码率调上去的,但是能调多少,往上调多久,都是有一定不确定因素存在的,需要要一步一步去试探 。
3.3.4 评估调整码率的方式

实时音视频流媒体传输的思考和实践

文章插图
 
上图是GCC评估调整码率的方式 。第一行的公式阐述是1.05,它表示的是逐步缓慢的上调 。右边的R是过去五百毫秒里面接受抖动缓冲队列里面的包数,实际上表示过去五百毫秒里的最大码率,乘上α就是0.85,这是GCC的做法 。
其实上述公式所表示的下降也是逐步下降的,如果之后的状态码率不会发生变化,根据具体不同的情况下会采取一些比较激进的做法 。
实时音视频流媒体传输的思考和实践

文章插图
 
网络拥塞的情况下追丢包需要处理三个问题,第一个问题,首先要基于丢包率获得码率,因为需要根据已有码率才能调整码率,这是最重要的信息 。在接收端根据抖动缓冲队列里面统计得到丢包率,通过RTC包反过来给到发送端,发送端继续判断究竟码率应该是多少,最终得到想要的码率 。
实时音视频流媒体传输的思考和实践

文章插图
 
这里列了GCC做的公式,GCC公式第一行列了两个例子,一个是丢包率10%,一个是丢包率2%,超过10%的话我们一般认为已经发生了拥塞,网络处于比较差的状态 。低于2%我们认为网络处于比较好的状态 。GCC采用(1 - 0.5)丢包率表示是比较缓慢在上调码率,如果网络处于一个比较好的状态,丢包率低于2%,上调的幅度也不会太大,这是GCC的做法 。即构科技的做法相对会比较激进 。
基于丢包的拥塞控制还有一个情况需要去考虑,就是根据不同的网络它会有不同的表现,如果是有线网络的话,数据一般比较可靠,但如果是无线的网络的情况下,或者说跨国网络的情况推算出来的结果往往是不准的,这时候需要把这种方法和刚才说的delay Congestion Control 结合起来使用 。
3.4 拥塞控制总结
实时音视频流媒体传输的思考和实践

文章插图
 
最后总结一下,之前的公式的最终目标就是上限以下的最低码率,因为我们最终可以得到两个码率,一个是基于丢包,一个是基于延迟,然后加起开发者设置的上下限,就得到一个最终码率 。基于丢包和基于延迟都存在一定的优缺点,可以将它们结合起来使用 。
4. 信道纠错策略4.1 前向纠错
实时音视频流媒体传输的思考和实践

文章插图
 
前向纠错的缺点是不精准,比较低效,最重要的是费用较高 。它的好处是不受RTT的影响,只需要发送一次 。
4.2 丢包重传
实时音视频流媒体传输的思考和实践

文章插图
 
ARQ的劣势是受RTT的影响较为明显,需要重传并且有可能引起重传风暴 。ARQ的好处是实现比较简单,算法复杂度较低并且十分精准,最重要的一点是省钱 。
4.3 ARQ vs FEC
实时音视频流媒体传输的思考和实践

文章插图
 
即构科技在比较之下偏好使用ARQ,这很大部分归结于成本的原因,但是ARQ不能解决所有的问题,RTT比较小的情况下,它可以做到精准和低延迟,但RTT很大的时候,例如跨国的情况下,需要结合FEC来用 。即构科技关于结合的做法是尽量的使用ARQ,如果发现当前情况ARQ解决不了,需要重传的时候要保证重传这次必须成功,我们的做法是加冗余,重复发两次,或者说用FEC来保证这次重传必须是成功的 。
实时音视频流媒体传输的思考和实践

文章插图
 
关于RTT判断的问题,RTT在国内一般是在一百毫秒以内,普遍认为是比较小的 。跨国的情况下,比如从深圳到纽约,RTT会达到140左右,这个情况下算比较大的 。冗余会降到可用的带宽,所以做冗余的时候需要慎重 。
4.4 Takeaway
实时音视频流媒体传输的思考和实践

文章插图
 
总结以上分享内容,关于实时网络传输延迟和实时RTC通信,它的延迟不仅仅是来自延迟传输,终端处理也十分重要 。对网络传输调控的主要手段包括刚调度系统、拥塞控制以及信道纠错,同时在下行要结合分层编码 。在网络方面,码率取决于用户是否有一个良好的网络环境 。


推荐阅读