webrtc 消费者从neteq定期取音频引起的累积延时误差问题
背景:
从webrtc定期取音频数据, 发现通话时间越长, 音频包缺失的越多.
从包的字节数计算出每个包的播放时间t, 一分钟取出来的包拼不成一分钟的时间长度.
问题分析:
consumer线程每次sleep(10ms - delta_t), delta_t 包含从neteq取数据、分发出去的时间.
但是每次sleep()的时间不是完全精确的, 比如十次sleep中有一次多了1ms. 累积下来就导致了较大的误差.
问题解决:
引入总时间量, 从consumer线程开始, 到现在应该抛出来多少次, 实际抛出来多少次, 如果有误差, 及时调成sleep(10-5-delta_t)时间, 相当于往前进5ms, 缩小累积误差.