共计 3314 个字符,预计需要花费 9 分钟才能阅读完成。
总体来看,通信倒退经验了几个阶段 - 音讯(电报)- 语音通话 - 视频通话 -AR/VR,当然声音在其中是少不了的,即便在视频和 AR/VR 阶段,都须要有声音的交换,总不能视频上光白活没声音吧。本文就分享一下在实时通信畛域音频编解码的一些经验和教训。
音频编解码其实有很多种,在不同畛域有不同的利用,要了解这个首先要从人谈话和人耳朵听到声音的频谱范畴说起,人谈话的声音频谱能量范畴大部分散布在 300~3400HZ,而人耳能听到声音的频谱范畴个别为 20~20000HZ,所以人耳是能够听到除人谈话外的自然界的很多其余声音的,像乐器,自然界,尖鸣声等等。当然每个人都会不太一样,B 站上有个能够测试本人听觉范围的,链接在上面,大家能够去试试(当然高频的时候如何有任何不适,自己概不负责)。
https://www.bilibili.com/video/BV1Xs411s7qo?from=search&seid=12278321081543626393
同时科学界奈奎斯特定理表明,通过 2 倍于最高频率进行采样的,就能够残缺的还原模拟信号。理解了这两个原理后,上面对音频编解码的利用就能够比拟好的了解了。
先看一下音频编码和解码的整体流程
人谈话的声音通过数字采样后,即为 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 编解码对于语音有特地好的编码成果,据说能够使得通话单方听起来像单方在同一个房间里一样(silk 源码原来在 skype 开发者网站凋谢的,不过网站当初无法访问了,能够到 github 上找下声网技术 VP 高大神共享上传的源码 https://github.com/gaozehua/SILKCodec)
赫赫有名的 WebRTC 为了晋升语音体验,默认应用的编解码就是 Opus(silk 编解码和 celt 编解码的组合);此编解码器内一个 Music detector 去判断以后帧是语音还是音乐,语音抉择 silk,音乐抉择 celt(这款编解码我的确不太熟悉,不过据说高频畛域比 AAC 弱一些);同时 opus 反对 PLC(丢包弥补),具备较好的网络抗丢包个性。其实大家能够看到,WebRTC 在 google 始终是走开源策略,如果不开源,google 是不会应用的,像 H.264 因为不开源,google 就另行开发了 VP8,VP9,这个在后续的视频编解码里再探讨。
其实音频也不只在通信畛域应用,像 AAC(Advanced AudioCoding(高级音频编码)),是一种由 MPEG- 4 规范定义的有损音频压缩格局,由 Fraunhofer 倒退,Dolby, Sony 和 AT&T 是次要的贡献者。在应用 MP4 作为各种内容的容器格局的新多媒体 MPEG- 4 规范中,它是 MPEG Layer III / MP3 的人造后继者。AAC 编解码跟 Mpeg4 的视频编解码协定相似,也分为多 Profile,LC-AAC(低复杂性)和 HE-AAC(高效性),集体了解就是耗费 CPU 少和压缩率更高。
当然说到 RTC 技术,必定要提到声网 Agora,Agora 在 19 年 RTC 大会上也开源了自研的编解码协定 SOLO。SOLO 应该是以 Silk 为根底,交融带宽扩大 (BWE) 和多形容编码 (MDC) 技术,打造出的一款不稳固网络下抗包出众的编解码,至于具体实现我就要去 GitHub 上学习了。
最近验证应用 Agora 的 RTSA-Lite 的 SDK 库,依照 API 接口文件形容,反对这四种编解码。能够看出其抉择还是很有针对性的,opus 能够无缝的和 WebRTC 对接;G722 能够适应与挪动端通信;而两个 AAC 系列能够利用在音乐音质要求比拟高的畛域。(不晓得为什么没有 SOLO?)
最初,随着 5G 时代的到来,随着内容业务百花齐放,除了通话 / 音乐外,置信实用于新场景的音频编解码技术也会失去疾速倒退。像 VR 技术,就须要 3D 沉迷式的音频技术,像大家都晓得的杜比全景声技术,像 object based audio 和 ambisonics 技术;随着网络带宽不再是问题,音频编解码应该不会再辨别音频和音频了,交融是趋势;所谓体验无止境,从而音频编解码技术也无止境。
其实作为业务开发者,我感觉应该理解的是编解码的特点,联合你所在畛域的业务特点,以及业务所处网络,带宽,丢包等等因素,曾经编解码所在硬件的解决能力(内存 /CPU/ 协处理器),从而能够做出正确的抉择,初期咱们是把这项技术利用在业务畛域为客户提供好的体验(毕竟这个畛域的大大神们钻研了这么多久,咱们没必要从信号采样再钻研起);对于编解码内核的频域转换 / 滤波等原理性技术能够随着业务的倒退,当然联合本人的能力,再逐渐加深学习。
本文为集体原创,首发于 声网开发者社区[https://rtcdeveloper.com/t/to…]