技术分享| RTC通讯中常用的音频格式
上次我们介绍了RTC通讯中常用的图像格式,这次我们来介绍一下RTC通讯中常用的音频格式。
一,概述
音频格式有哪些?要回答这个问题,先来给大家看一下百度百科对音频的解释:音频格式即音乐格式。音频格式是指要在计算机内播放或是处理音频文件,是对声音文件进行数、模转换的过程。音频格式最大带宽是20KHZ,速率介于40-50KHZ之间,采用线性脉冲编码调制PCM,每一量化步长都具有相等的长度。人们说话的声音频谱能量范围大部分分布在300-3400HZ,而人耳能听到声音的频谱范围一般为20~20000HZ,所以人耳是可以听到除人说话外的自然界的很多其他声音的,像乐器,自然界,尖鸣声等等。
通讯发展经历了几个阶段-飞鸽传输-烽火台-消息(电报)-语音通话-视频通话-AR/VR,从之前的文字通讯发展到现在的音视频通讯,而且随着时代的发展,人们已经不再满足于简单的能听到对方的声音,现在对于声音的音质,立体声甚至空间环绕声都有着强烈的需求场景;所以也需要各种音频格式与之相匹配,才能满足现实场景中的需求。
二,常用的音频格式
就目前的音频市场来看,音频格式主要分为两种:无损压缩何有损压缩。如果我们听不同格式的音频,音质上也会有比较大的差异。无损压缩的音频能在百分百保存源文件的所有数据的基础上,将音频文件的体积压缩的更小,然后将压缩的音频文件还原后,就能实现与源文件相同的大小、相同的码率。还有一种就是有损压缩的音频,这种就是降低音频采样频率与比特率,这样输出的音频文件会比源文件晓。
1、MP3 ——没有比这更熟悉的名字:MPEG音频文件的压缩是一种有损压缩,MPEG3音频编码具有10:1~12:1的高压缩率,同时基本保持低音频部分不失真,但是牺牲了声音文件中12KHz到16KHz高音频这部分的质量来换取文件的尺寸,相同长度的音乐文件,用 *.mp3 格式来储存,一般只有 *.wav 文件的1/10,因而音质要次于CD格式或WAV格式的声音文件。
2、PCM ——最常用的音频格式:PCM中文称脉冲编码调制(Pulse Code Modulation),是70年代末发展起来的,记录媒体之一的CD,在80年代初由飞利浦和索尼公司共同推出。脉码调制的音频格式也被DVD-A所采用,它支持立体声和5.1环绕声,1999年由DVD讨论会发布和推出的。脉冲编码调制的比特率,从14-bit发展到16-bit、18-bit、20-bit直到24-bit;采样频率从44.1kHz发展到192kHz。PCM脉码调制这项技术可以改善和提高的方面则越来越来小。
3、AMR ——AMR全称Adaptive Multi-Rate,自适应多速率编码,主要用于移动设备的音频,压缩比比较大,但相对其他的压缩格式质量比较差,由于多用于人声,通话。
4、Opus ——WebRTC的首选音频:集成了两种声音编码的技术:以语音编码为导向的SILK和低延迟的CELT。Opus可以无缝调节高低比特率。在编码器内部它在较低比特率时使用线性预测编码在高比特率时候使用变换编码(在高低比特率交界处也使用两者结合的编码方式)。Opus具有非常低的算法延迟(默认为22.5 ms),非常适合用于低延迟语音通话的编码,像是网上上的即时声音流、即时同步声音旁白等等,此外Opus也可以透过降低编码码率,达成更低的算法延迟,最低可以到5 ms。在多个听觉盲测中,Opus都比MP3、AAC、HE-AAC等常见格式,有更低的延迟和更好的声音压缩率。
5、AAC ——直播场景的常胜将军:AAC实际上是高级音频编码的缩写,苹果ipod、诺基亚手机也支持AAC格式的音频文件。AAC是由Fraunhofer IIS-A、杜比和AT&T共同开发的一种音频格式,它是MPEG-2规范的一部分。AAC所采用的运算法则与MP3的运算法则有所不同,AAC 通过结合其他的功能来提高编码效率。AAC的音频算法在压缩能力上远远超过了以前的一些压缩算法(比如MP3等)。它还同时支持多达48个音轨、15个低频音轨、更多种采样率和比特率、多种语言的兼容能力、更高的解码效率。总之,AAC可以在比MP3文件缩小30%的前提下提供更好的音质。
6、Lyra 一一人工智能的新产物:Lyra是google 提出的一种基于深度学习的低码率语音编解码器,在google Duo中使用,能够实现每秒3kb的网络下清晰地聊天。将数据分为40ms每帧,提取特征(log mel spectrograms)压缩,在decoder部分一个生成模型将特征转为语音信号。与传统参数音频编解方法混合激励线性预测(MELP通过计算和传输线性预测系数来提高效率)结构很相似,但是传统参数音频编解码生成的数据音质比较差,而生成模型(如WaveNet)已经被证明是可以实现从特征生成多个语音采样点。(WaveNetEQ 利用生成模型实现丢包补偿)。 MBE(多频带激励,将频域划分为相等大小的频带,传输频带的能量,并确定每个频带的有声/无声信息)的解码器Griffin-Lim算法是在仅提供能量而没有相位信息的情况下恢复信号的方法,与WaveNet系列算法相比,Griffin-Lim算法在音质方面要差很多。但是WaveNet等方法计算量较大,Lyra中使用超过70种语言的数千小时的数据来训练WaveRNN的变种模型来实现较高的音质和较低的复杂度。
三,声音是如何在RTC中传输的
先看一下音频编码和解码的整体流程:
人说话的声音经过数字采样后,即为PCM原始采样数据,从上图中可以看出,无论什么编解码类型,都是将PCM编码压缩后方便传输,然后再解码恢复成PCM的过程。
首先看在早期的固定电话时期,固话时期的编解码主要有G.711a/u;G.729;G.722;G.723;G.726等等;这些编解码基本都是使用8KHZ的采样的,由于当时的通讯只是主要是人与人之间说话,8K采样率足以覆盖人说话声音的最主要部分能量范围了。最初的G.711a/u属于无损编码,但是由于要64Kbps的速率(但是ADSL电话线的速率也就是64K带宽)。
不知道还有多少朋友知道ADSL上网,最初就是用这64K的电话线传输,但是G.711把带宽占光了,还怎么传输数据呢,因此后续逐渐被压缩率更高但是效果也不逊色的G.729,G.726等编解码取代使用。其中G.722属于比较出名的一个系列,G.722.1是polycom研发的编解码,而G.722.2就是AMR-WB+,下面提到的AMR-WB的超宽带版本。
接下来到了移动通信(2G/3G)时代,由于通信的内容仍然是人与人之前的说话,所以编解码仍然是采用语音编解码,移动侧主要是使用的AMR(Adaptive Multi Rate-Narrow Band Speech Codec),AMR-WB(分别是窄带AMR和宽带AMR)。窄带AMR虽然仍然使用8K采样,但是从其全称可以看出,编解码本身是多速率(8种速率模式),并且是可以切换的,这个特性的主要原因是适应无线信道和传输通道的情况来自适应。举个例子,可以想象一下,一个基站,如果有10部手机通话和100部通话,每部手机被分配的信道带宽肯定是不一样的,速率变换则可以根据信道情况进行灵活的速率切换,从而保障更多人的通话。
再往后就是Volte(4G),也就是大家当前在用的,采用了AMR-WB(Adaptive Multi-RateWideband Speech Codec);此编解码采用是16K采样,比原来高了一倍;产生的效果就是时域上每秒多采样8K个数据,频域上覆盖的高频范围更广,声音细节更丰富。不过对于消费者体验来说好像未得到大的提升。
但是到了4G时代,随着带宽越来越高,业务发展越来越丰富,为了提升语音清晰度和通话体验,几个大厂推出了EVS高清编解码,并作为进入3GPP的唯一标准,EVS兼容了AMR-NB和AMR-WB,同时支持SWB(超宽带)和FWB(全宽带)采样(最高到48KHZ),已经覆盖人耳听到声音的全部频谱范围了。大家手机上可以看到一个“HD”的标签,这个其实就是E2了。随着EVS的推出以及新业务的推广(像最近的视频彩铃),大家应该可以感受到更丰富的声音体验了。
当然到了3G/4G时代,随着互联网的发展,基于互联网的VOIP技术也蓬勃发展起来,但是基于互联网的VOIP比运营商语音通话面临着更加严峻的复杂网络情况,毕竟不是专网,因此面临的延时带宽问题更加严峻。VOIP的音频编解码也存在类似的发展阶段,首先是语音编解码,像iLBC和iSLK,这两种编解码都是GIPS公司开发的编解码技术,被Google收购后,两种编解码技术就用应用在WebRTC技术中并且开源了,ILBC编解码的特点是减少每个音频编码帧之间的冗余性,每帧独立可解,因此具备了很不错的抗丢包特性。ISAK除了继承ILBC能力之外,好像是增加了带宽预测功能。红极一时的Skype使用的编解码则是silk,silk编解码对于语音有特别好的编码效果,据说可以使得通话双方听起来像双方在同一个房间里一样。
明星级开源项目-WebRTC为了提升语音体验,默认使用的编解码就是Opus(silk编解码和celt编解码的组合);此编解码器内一个Music detector去判断当前帧是语音还是音乐,语音选择silk,音乐选择celt;同时opus支持PLC(丢包补偿),而且具备较好的网络抗丢包特性。
其实音频也不只在通讯领域使用,像AAC(Advanced AudioCoding(高级音频编码)),是一种由MPEG-4标准定义的有损音频压缩格式,由Fraunhofer发展,Dolby, Sony和AT&T是主要的贡献者。在使用MP4作为各种内容的容器格式的新多媒体MPEG-4标准中,它是MPEG Layer III / MP3的天然后继者。AAC编解码跟Mpeg4的视频编解码协议类似,也分为多Profile,LC-AAC(低复杂性,普通质量)和HE-AAC(高效性,高质量);同时AAC在直播领域也是大放光彩。
四,总结
有的小伙伴会问,这么多音频编码格式,我到底该选哪个;从文章中我们可以看到,没有任何一个音频编码格式可以覆盖所有应用场景,在不同的场景下根据自己的需求去选择一个适合的编码器是个明智的选择。