DentistryDoctor的专栏

欢迎大家指正其中的错误

原创 视频传输过程中的缓冲时间自适应算法收藏

新一篇: UDP传输的基于反馈机制的速度控制算法 | 旧一篇: SetThreadName & GetThreadName 给线程命名

在音视频的实时传输过程中,缓冲时间对于播放的效果十分重要。这个值设多大合适呢?为了达到实时性,当然是在满足质量要求的条件下越小越好了。

但网络延迟及一些其它因素是多变的,而且是不可预测的。因此在程序中硬编码一个值肯定是合适的。如果这个值设置小了,肯定会很卡,如果设置大了,延迟又太大了,实时性又差了。最好就是根据网络延迟及延迟波动自动调整最好不了。

1.每一帧延迟的计算

假设发送方的参考时间为s0, 接收方的参考时间为R0, s0与R0可以同步设置.Si - S0 == Ri - R0 + di. di= Ri - R0 + S0 - Si

延迟波动为相领两帧的延迟差的绝对值. vi = |di - dj|, d=i-1

为了使延迟及延迟波动较为平滑,可以用历史值占较大比重,当前值占较小比重。设u为1/16,则

d = d*15/16 + di/16

v=v*15/16 + vi/16

为了容许一定的延迟波动,实际的缓冲时间可以用延迟加上延迟波动乘以一个系数K,设置K=5

则pi = ri + d + K*v

在延迟变大时,视频可以考虑慢放,在缓冲时间由大变小时,可以考虑快放,这样就不需要丢帧,保证所有帧都解压并显示出来。声音在缓冲时间变化时只能停顿或丢弃一些帧。

经过测试,在实际的网络环境下,此算法级保证一个比较稳定的并且比较理想的缓冲时间。

发表于 @ 2007年06月09日 21:00:00|评论(loading...)|编辑

新一篇: UDP传输的基于反馈机制的速度控制算法 | 旧一篇: SetThreadName & GetThreadName 给线程命名

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © DentistryDoctor