目录
一、背景概念
Opus是一款完全开放、免版税、功能多样的音频编解码器。它适用于互联网上的交互式语音和音乐传输,但也适用于存储和流媒体应用。Opus是由IETF(互联网工程任务组)标准化的开源音频编解码器(RFC 6716),由Xiph.Org基金会、微软、Mozilla等公司联合开发。它结合了Skype的SILK语音编码和Xiph的CELT音乐编码技术,支持从6kbps到510kbps的可变比特率,以及8kHz到48kHz的采样率范围。
二、Opus的发展
Opus 是由两个编解码器Silk 和 Celt 融合而成。Opus的主要作者,Jean Marc Valin,他从学生时代就开始致力于高音质编解码算法的实现,著名的编解码器 Speex 也是他的作品之一。时间回到2007年,Jean Marc Valin 在博士后期间,完成了 Speex 的开发。在当时,业内编解码器主要分为两个流派:高延时的音乐编解码器(如 MP3、AAC 和 Vorbis)和低延时的语音编解码器(AMR、Speex、G.729)。而工业界对低延时音乐编解码器的需求越来越高,于是 Celt 的开发也被提上了日程。Celt 的早期目标是实现 4-8ms 的编码延时,相比当时 MP3 和 AAC 编码的 100ms+ 延时,优势是非常巨大的。
图2.1、几种常用音频编码器的性能对比
在研发过程中,Jean Marc Valin 和其他开发者始终围绕着 Vorbis 作者 Christopher “Monty” Montgomery 的意见“尽量保持信号能量谱的低失真”进行开发,这也是 Celt(Constrained Energy Lapped Transform)名字的由来。第一版 Celt 的研发持续了两年,但因为需要保证低延时的原因,Celt 的表现并没有超过 MP3 和 AAC。但在经过了持续六个月的改进后(使用了部分 MP3 的技术),Celt 的表现第一次超过了 MP3。也就是在那个时候,Celt 逐渐走出实验室,迎来了它在工业界的第一批使用者–部分用户因为低延时的强需求不得不选择了 Celt。也就是这一批最早期的用户给了 Celt 的开发者们宝贵的反馈,使其不断改进 Celt。
在开发 Celt 的同时,另一批来自 Skype,以 Koen Vos 为首的开发者开发了业内领先的语音编解码器 Silk,并将其提交至 IETF,作为一款免版税的开源编解码器。Celt 也紧随 Silk 的步伐进行了提交。但 Silk 和 Celt 都遭遇了很大的阻力,这个阻力的来源更多的不是技术因素,而是『政治』因素:此前有大量投资者投资了带版税的编解码器,这些投资者在业内的权威也很大。正是这些阻力促使 Silk 和 Celt 结合到一起,诞生了 Opus。在 Opus 里,Silk 主要负责处理 16khz 及 8khz 的信号,而 Celt 则能处理 8khz 以上的信号。实际上,关于 Opus 里 Silk 和 Celt 的工作模式并不仅仅这么简单,Opus 里共有 32 种模式用来处理不同种类的信号。Opus编解码器架构如下。
Opus的前身是celt编码器。在当今的有损音频格式争夺上,拥有众多不同编码器的AAC格式打败了同样颇有潜力的Musepack、Vorbis等格式,而在Opus格式诞生后,情况似乎不同了。通过诸多的对比测试,低码率下Opus完胜曾经优势明显的HE AAC,中码率就已经可以媲敌码率高出30%左右的AAC格式,而高码率下更接近原始音频。
为了和 Silk 结合,Celt 做出了一定的改动。之前 Celt 为了极低延时,把帧长设置的比较短,但 Silk 需要 20ms 的帧长,于是 Celt 牺牲了部分延时和 Silk 的帧长对齐&#