LearningWebRTC: Opus
WebRTC M59使用Opus作为默认的音频编解码器,这里只简答介绍,太深的暂时也不懂。
Opus Overview
Opus的目标应用场景为“Interactive audio over the Internet”,第一版在2012年发布。
从官网的介绍来看,压缩效率和延迟比AAC在内的绝大多数音频编解码器都要优秀。
Opus internal modules
Opus是一个混合编码器,由SILK和CELT两种编码器混合而成,SILK主要负责wideband(8khz)以下的语音编码,CELT主要负责高频编码,如音乐等。
SILK由Skype Speex改良而来,像通常的语音编解码器一样,使用LPC(Linear Predictive Coding)在时域完成压缩。
CELT则像通常的音频编解码器一样,使用MDCT在频域完成压缩。
为了尽量减小延迟,SILK帧长最小为10ms,最大60ms;而CELT帧长则在2.5ms~20ms。
Opus anti packet loss
Opus FEC只用在低频部分,用更低的码率编码出码流(redundant bitstream),然后与原始码流(primary bitstream)在同一个RTP session里发送。
参考
- WebRTC M59源码
- Presentation @2012
- Opus wiki
- RFC6716 @2012 Definition of the Opus Audio Codec
- RFC7587 @2015 RTP Payload Format for the Opus Speech and Audio Codec
- Book @2003 RTP Audio and Video for the Internet
- Range coding wiki
- Introduction to CELP Coding of The Speex Codec Manual
xjs.xjtu@gmail.com
2017-07-08