语音传输中的抖动缓冲

之前有一个实习生问我,说他做了一个语音通话的功能,但是为什么传过来的声音几乎不能听。为什么会这样呢?如果用的是tcp传输应该是不会丢的,但是如果是UDP传输的话,那么丢的概率就比较大了。丢包只是一方面大原因,其实还有另一个原因那就是由于网络的延迟,拥堵而导致的播放乱序。大家知道网络的传输是无序的,那么很有可能一包数据到达的很晚,一包会较早的到达。所以对于网络传输语音需要一个抖动缓冲区对网络发送语音进行一定的策略才能再转给上层播放。那抖动缓冲区的原理是什么呢?

抖动缓冲区就是将接收到的语音先存到一个buffer里面,根据当前网络的延迟时间以及当前上层获取的时间对数据进行选取。使用抖动缓冲是以延迟为代价的,从而保证语音的流畅。首先会计算当前网络的延迟,可以根据网络延迟的大小设定变化的buffer的大小,但是buffer也可以是不变的,这要看怎么设计了。当上层来取数据的时候根据当前网络的延迟时间取当前时间减去网络延迟时间的数据包,这个时间并不一定这样严格,可以有一定的幅度。比较有名的开源项目:doubango,webrtc都实现了这样的功能。

你可能感兴趣的:(语音传输中的抖动缓冲)