webrtc 音频 NetEQ 笔记

1.计算当前帧是提前还是延后到

先计算当前帧持续时长

webrtc 音频 NetEQ 笔记_第1张图片

再从定时器获取本地时长,定时器10ms tick一次

webrtc 音频 NetEQ 笔记_第2张图片

得到iat_packets,也就是延迟包数,iat_packets =0,就是提前到了,iat_pakets =1就是正常时间到,iat_packets>1就是延迟到了

然后计算延迟时间,并记录2s以内的总延迟

webrtc 音频 NetEQ 笔记_第3张图片

2.更新统计直方图

webrtc 音频 NetEQ 笔记_第4张图片

这个里面有个容量为100的数组,index是2s内总延迟的包数,数组记录的是延迟包数出现过的概率(通过遗忘因子和历史数据调整过的概率,数据量越大,遗忘因子递增,数据趋于平稳)

通过上面的数组拿到能满足97%概率的延迟包数,定为当前的最佳抖动延迟target_level,并限制一下最大值和最小值

webrtc 音频 NetEQ 笔记_第5张图片

3.将target_level传递到buffer_level_filter

webrtc 音频 NetEQ 笔记_第6张图片

4.根据当前缓冲区大小和缓冲区伸缩变化值,计算filtered_current_level_

webrtc 音频 NetEQ 笔记_第7张图片

5.计算延迟的上下限

webrtc 音频 NetEQ 笔记_第8张图片

6.根据前一次的决策和filtered_current_level_指定当前dsp决策,是应该加速还是减速

webrtc 音频 NetEQ 笔记_第9张图片

参考

《WebRTC语音引擎中NetEQ技术的研究_吴江锐》

 

你可能感兴趣的:(webrtc 音频 NetEQ 笔记)