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


3.3 拥塞控制的步骤3.3.1 监控排队延迟

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

文章插图
 
接下来详细介绍拥塞控制的四个步骤 。第一步,监控排队延迟,如上图左边是发送段,右边是接收端,发送端的大T是发送的时间,接收端的小t是包到达的时间,可以看大T的Ti-T(i-1),这是两个包发送的时间差,T1是到达的时间差 。如果用下面小T的差减去大T的差可以得到排队延迟的差,这是观察得到的数据,做数据分析的时候需要考虑观察到的东西永远和实际客观的东西是有差别的,一方面得到的这些排队,抖动里面排队的延迟存在异常值,另外一方面,发送的每个帧长度不一定是一样的,要做到消除帧的差别 。最后网络本身它是有噪音的,需要通过这一系列的去除以后才能得到比较接近网络排队延迟的抖动数值 。
实时音视频流媒体传输的思考和实践

文章插图
 
以上公式就表示接收端的包到达两个帧之间的时间差,减去发送端的包发送出去的时间差的差,这是观察到的数据,数据里面是有正常的差和网络噪音带来的异常值,可以通过kalman滤过器去掉异常的值,kalman滤过器它能做的事情就是把M一系列的值里面的一些比较异常的值抹掉,留下其他正常的值 。那么正常的DL(i)除去C(i)得到是正常之间的差异所带来的时间的差异 。最终把这两个公式结合,就可以得到一系列的在路由器这一侧排队的延迟,最终的数据也只是接近结果,永远不是真实的数值 。
3.3.2 评估负载状态
实时音视频流媒体传输的思考和实践

文章插图
 
第一步最终得到结果是一系列M的值,M1,M2,M3,M4在路由器排队的时间的延迟,根据这些时间延迟去判断它处于Underuse,Normal还是Overuse状态 。一般的做法是,如果排队的延迟超过了一个域值,就判断它是Overuse状态,如果是低于某个域值的话就是Underuse状态,处于某个域值之间为Normal状态 。域值有两种方法定义,一种是规定一个固定值,固定值往往是根据经验摸索出来的结果 。另外一种做法是让域值变得能够自适应,这两种方法各有优劣点 。
实时音视频流媒体传输的思考和实践

文章插图
 
上图为评估负载状态列了两个图和公式,其中解决了两个问题,一个问题是评估出网络状态是按照Underuse、Normal还是Overuse 。另外一个事情是把域值gamma做成自适应的 。第一个问题,可以把左边图跟右边图结合起来看,它解决的是M和gamma之间的关系,红色的线是gamma的正值和它的负值,加起来就是一个通道 。其实它就是一个管道,在管道中间处于一种比较正常的状态,是可以接受的Normal值,如果在通道上面就是Overuse值,再下面是Underuse值 。
反映到代码上面来说,一般IF语句,我就先看else,else如果是负值的话,对应的就在右边图的最下面,此时它处于一种Underuse的状态,如果按照use的状态应该是Normal,同时把等待的时间给清零 。如果说它应该是处于中间管道以内的全Normal的状态,如果它的MR大于gamma,说明它在上面,或者在下面,我们首先看在下面的情况 。如果在下面的情况,M是一个负值的,负值的情况下应该把等待的时间清零,变成-1 Underuse的状态 。
自适应的基本的原理是让gamma值以上一个时刻的值做为基础,不断地去微调 。如果gamma是正数,就往上调,如果是负数的话,就往下调,一般上调的时候是采取一种比较保守的状态慢慢上调,如果往下调就调的比较快,最终拿到的结果就是gamma值,它会跟着网络抖动的延迟不断地调整,而且是相对平滑的去波动 。
3.3.3 评估网络负载状态
实时音视频流媒体传输的思考和实践

文章插图
 
上一步最终的结果是得出了目前网络状况的三种情况,分别是Normal、Underuse和Overuse,根据这三种情况去做下一步的动作,这里用GCC的自动机来表征下一步该做什么,即构科技采用的方法不见得完全跟它一样,但思路基本上是比较接近的 。
如果是在正常的情况下,自动机总是会不断去尝试把码率调高,这是在Normal的情况下,如果是在Overuse的情况下,基于把码率调低的这种趋势它会表现的比较激进 。如果处于Normal情况下,自动机会处于Underuse的情况下不断地调高 。即构科技在细节上的处理有些不一样,在Normal情况下有两种方法,一种方法是根据网络状况,如果网络状况处于逐步恢复的状态,它会比较保守的来提高,如果发现网络状况一下子变得很好,丢包率很低且没有抖动的情况下会把码率在短时间内调的很高 。在Overuse情况下,GCC的建立逐步向上的,即构科技的做法是直接降到可用的目标码率之下,甚至更低,具体变得多低要根据拥塞的情况来具体分析,如果拥塞很严重的话就降的很低,就要给足够的时间做缓冲去恢复带宽,如果拥塞不是那么严重的话,就降到比实际可用带宽低一些就可以了 。


推荐阅读