类似于webrtc这种基于IP网络实时通信中音质好坏受多方面因素的影响,一类为回声,噪声抑制等必须解决的问题,否则无法实现双向通话,另一类是网络丢包延迟等导致的音质变差。本文主要讨论第二类情况。
由于弱网引起的语音通话质量差通常是丢包,乱序,延迟等因素导致,针对这几种情况需要引入自适应 jitter buffer, PLC(丢包补偿),FEC(丢包恢复),NACK(重传)技术。
1.jitter buffer
jitter buffer 自适应抖动缓冲是实时音频通信中处理乱序,延迟,平滑播放的基础,一个好的jiiter buffer实现会基于网络延迟抖动情况自适应缓存大小,能在网络环境好的情况下延迟降到最低,也能在网络情况差的情况下实现平滑播放,这部分已知的实现有speex 开源的jitter buffer,不过效果一般,webrtc里的neteq 是已知开源里实现最好的,可以参考,如果单独拿neteq出来使用还是有一定工作量,因为里面融合了解码,重传,red,dtmf等内容。
2.PLC
plc是在丢包无法恢复情况下的一种语音补偿技术,有的语音编码内置了plc,比如opus,在丢包情况下,如果没有fec包的情况下,调用opus解码器,传空数据即可产生plc补偿包。如果codec不支持plc,则需要通过plc算法实现,这部分在webrtc 的neteq里也有实现。
3.FEC
前项纠错技术在视频丢包恢复里用的比较多,包括in-band fec和outband fec, inband fec是指codec 内部支持的f