关于音频:火山引擎-RTC-自研音频编码器-NICO-实践之路

36次阅读

共计 6608 个字符,预计需要花费 17 分钟才能阅读完成。

本文作者:张德军

1. 前言

随着互联网技术的一直倒退,越来越多的人开始尝试应用或者依赖实时音视频产品解决团队沟通与合作问题。在通话过程中,咱们时常会遇到因为网络稳定(如拥塞、丢包、延时和抖动等)而导致的音频卡顿、掉字或者杂音等问题,影响工作效率。

为解决此类音频弱网问题,业界个别采纳前向纠错(Forward Error Correction,FEC)或者重传等网络策略优化办法,但这些办法存在冗余率过高、带宽利用效率低等毛病,而晋升音频编码器的编码效率和抗丢包能力、进步带宽利用效率,是解决音频弱网问题更为高效的一种办法。

Opus 作为 RTC 畛域宽泛应用的音频编码器,其编码品质较高,且提供肯定的抗丢包能力,然而在高丢包以及突发丢包场景,音质会显著降落,同时,其编码效率也有进一步晋升的空间。

RTC 自研 NICO(Network Intelligent Audio Coding,NICO)编码器在齐全兼容 Opus 的根底上,极大进步了编码效率,并提供了超强的抗丢包能力。目前 NICO 曾经胜利集成进火山引擎 RTC,并利用于抖音和视频会议等业务,极大晋升了弱网场景音频体验。

2. 音频编解码技术简介

音频编码器是一种将音频信号进行压缩和解压缩的安装。个别分为 3 大类:波形编码器、参数编码器和对立编码器。

2.1 波形编码

波形编码,顾名思义就是对音频信号的波形进行数字化解决。G.711 是由 ITU-T 制订的一个典型的波形编码器,码率为 64kbps,最早利用于固定电话场景,其核心思想是将每一个 14 比特的音频采样数据压缩成 8 比特 示意。G.711 利用了人耳对大能量信号不敏感的特点,幅度大的信号量化误差大,幅度小的信号量化误差小,能够将信号码率压缩 50% 左右。

2.2 参数编码

随着科学家对语音信号的个性和人耳感知声音的机制了解更加深刻,参数编码器逐步在语音编码和音频编码畛域成为支流。参数编码就是指通过对信号提取若干个特征参数,并对特征参数进行量化压缩的办法。参数编码不以波形匹配为准则,而是通过对信号中的要害特色进行提取,并以高效的量化形式进行压缩,达到高质量复原信号要害信息的目标。因而,参数编码器的编码效率也要显著高于波形编码器。上面别离针对语音和音频信号的参数编码方法进行阐明。

2.2.1 语音编码

下图是一个码激励线性预测(Codebook Excitation Linear Prediction,CELP)编码器零碎框图,是一个典型的参数语音编码器。次要利用了语音信号具备短时相关性和长时相关性的特点,应用线性预测的办法去除相邻样点间的相关性(即短时相关性),提取到线性预测(Linear Prediction Coding,LPC)系数,通过剖析语音信号中的长时相关性提取基音周期参数,去除语音信号中的长时相关性,而后利用随机码书拟合随机激励信号,通过剖析合成的形式获得最佳编码参数。这种形式只须要对 LPC 系数、基音周期、随机码书和两个增益参数进行量化压缩,解码端就能够复原高质量语音。参数编码器只须要不到 20kbps 的码率即可达到与 [email protected] 雷同的品质,编码效率具备显著的劣势。典型的编码器有:G.729、AMR-NB 和 AMR-WB 等。

2.2.2 音频编码

下图是一个典型的频域编码器零碎框图。音乐信号和自然界的声音是通过不同的载体进行发声的,发声形式也千差万别,不太可能利用发声形式进行建模。换句话说,应用语音编码的办法编码音频信号的编码效率不高,编码品质比拟差。于是科学家另辟蹊径,通过对人耳感知声音的形式进行钻研,发现人耳对不同频率信号的感知敏感度也有所不同,因而创造了一种基于心理声学模型的编码器,尤其适宜对音乐信号和自然界声音的编码。典型的编码器有:MP3、AAC 和 HE-AAC 等。

2.3 对立编码

综上可知,语音编码器只适宜编码语音信号,音频编码器只适宜编码音频信号。在理论利用场景中,咱们常常会遇到在谈话过程中会有音乐或者其余背景声音的场景。那么是否存在一种编码器,可能根据信号的类型,自适应抉择最佳编码方式,达到最佳编码品质呢?答案是必定的。对立编码器采纳对立框架高质量编码语音信号和音频信号,它可能很好的解决混合语音和音乐信号的高质量编码问题。典型的对立编码器有:Opus、EVS 和 USAC 等。

3. 自研 NICO 编码器技术优化

为了解决 Opus 编码器在高丢包以及突发丢包场景中品质变差的问题,自研 NICO 编码器引入了多种编码工具和翻新技术,以进步编码器抗高随机丢包和突发丢包的能力。另外,在进步编码效率的同时,NICO 实现了与 Opus 编码器齐全兼容,解决了与现网 RTC 设施互联互通的问题。

3.1 抗弱网编码技术及优化

3.1.1 多形容编码

多形容编码是一种专门为弱网场景设计的编码技术,其核心思想是“编码器产生的多个形容码流互相独立又互为补充”。单个多形容码流就能够解码取得残缺语音,每多收到一个多形容码流,取得的解码语音品质能够失去进一步加强。多形容编码方法是一种非常适合在无牢靠传输网络场景应用的编解码技术,可能无效缩小因为丢包引起的各种音频卡顿问题,然而在无丢包场景,其解码品质差于单码流编码器。而且,多形容编码算法的复杂度要比单码流编码器高很多,多形容码流个数越多,复杂度就会成倍增加,这也在肯定水平上限度了多形容编码技术的应用。

针对上述问题,咱们在设计多形容编码算法时,对现有多形容编码技术和 Opus 编码器中 NSQ 量化办法进行了具体的剖析。咱们发现,现有算法只能做到宽带多形容编码,且高频品质显著差于 Opus,同时 Opus 中 NSQ 量化办法十分复杂,基于 Opus 的多形容编码复杂度会显著偏高。咱们通过多种技术优化,解决了上述难题,使 NICO 反对了窄带到全带的多形容编码,满足了不同利用场景对编码音质的差异化需要,同时保障了 NICO 在无丢包场景编码品质能对齐甚至稍优于 Opus,在高丢包场景显著优于 Opus,而编码复杂度和 Opus 相当。

3.1.2 带内 FEC 算法

带内 FEC 算法是一种在以后帧码流中携带过来历史帧码流的一种办法,与带外 FEC 算法相比,其缩小了 RTP 头部开销,比特利用效率更高。当 Opus 码流携带带内 FEC 信息时,如果以后帧码流数据失落,解码器能够通过解析下一帧码流中的带内 FEC 信息解码以后帧音频。Opus 带内 FEC 有不错的反抗随机丢包的能力,但对突发丢包无能为力,开启带内 FEC 也会导致编码复杂度显著回升,并且其带内 FEC 帧信息在无丢包时不会带来额定的品质晋升,带宽利用效率不高。在理论应用场景中,咱们还发现带内 FEC 占用码率过多,影响主帧编码品质,会导致杂音的问题。

为解决下面这些问题,NICO 带内 FEC 算法做了许多翻新,全面优化了编码流程和码率调配等环节,晋升了编码效率,升高了编码复杂度,并且在突发丢包场景,NICO 的成果远优于 Opus。

3.1.3 丢包暗藏算法

丢包暗藏(Packet Loss Concealment,PLC)算法是指以后帧的码流因为某种原因失落时,解码器利用历史解码数据或者参数预测以后帧解码数据的算法。PLC 算法作为复原失落帧音频的最初解决方案,是大多数音频编码器中罕用的技术,对晋升丢包场景下的主观听感有较大作用。Opus 的 PLC 算法对丢包帧解决较为简单,对于能量、基音周期等参数只是做简略的衰减或者复制等操作,复原出的音频常常会呈现能量偏低、杂音等问题。NICO 对此进行了大量改良,参考了历史帧的变化趋势,对于丢包帧解码参数预测更为精确,复原的音频听感较 Opus 有显著晋升。

3.2 编码品质晋升

3.2.1 带宽扩大算法

带宽扩大(BandWidth Extension,BWE)是一种应用大量比特编码高频信息,高质量复原高频信号的算法。在 Opus 编码器中,所采纳的 BWE 技术是以填充随机噪声的形式复原高频空洞,这种形式会导致复原出的高频信号可能听到显著的高频噪声,体验较差;在低码率编码方法中,还会应用频谱折叠的形式复原高频,因为没有思考高频与低频信号的相关性,折叠后的高频局部与原始信号往往相差较大,有时会听到显著的高频量化噪声。在 NICO 编码器中,咱们对 BWE 算法进行了改良,充分利用高频与低频信号的相关性优化高频复原成果,晋升了低码率条件下音频信号的复原品质。

下图是低码率 Opus 和 NICO 解码音频的频谱比照。能够看出,在高频局部,Opus 应用随机噪声复原,而 NICO 复原了更多的高频细节,与原始信号更为靠近。

3.2.2 不间断传输算法

不间断传输(Discontinuous Transmission,DTX)是指 VAD 算法检测到非流动语音时,编码器会缩小数据发送,只间隔性发送低字节数的静音形容帧(Silence Insertion Descriptor,SID),达到升高编码码率的目标。舒服噪声生成(Comfort Noise Generation,CNG)指的是解码端收到 SID 帧后会根据解码参数生成舒服噪声,放弃听感间断。Opus 的 DTX/CNG 算法存在编解码端 CPU 耗费偏高、VAD 算法不够精确导致呈现不安稳噪声等问题。针对上述问题,咱们对 DTX/CNG 算法做了一系列优化,改良了编码端 VAD 算法和编解码解决逻辑,解决了舒服噪声不安稳问题,还大幅升高了 DTX 段编码端与解码端的 CPU 耗费。

以下是 Opus 和 NICO 解码带噪语音的成果比照,Opus 解码音频在噪声段不够安稳,而 NICO 解码音频噪声段能量安稳,听感更佳。

3.2.3 动静模式切换

在理论通话过程中,用户的网络情况可能比较复杂。为了在各种网络情况下获得最佳通话质量,咱们设计了动静模式切换性能。编码器能够根据网络反馈的网络状态信息自适应调整编码模式。当用户网络情况很好时,编码器基于网络反馈的丢包率信息主动切换到 Opus 编码模式,以取得更优语音通话质量;当用户网络情况变差时,编码器基于网络反馈的丢包率以及带宽等信息,从 Opus 编码动静平滑切换到 NICO 模式编码,晋升编码器的抗丢包能力。

3.3 兼容 WebRTC 的设计

传统计划中,让具备不同编码器能力的终端进行通信,往往须要服务器进行转码再转发的操作,而转码操作会造成音质降落、复杂度减少和延时变长等问题。NICO 编码器通过独特的码流设计,使得 NICO 的码流与 Opus 齐全兼容。换句话说,具备 NICO 编码能力的客户端能和 Web 端等原生 WebRTC 利用间接进行互通,不仅躲避了转码服务器带来的各种问题,还拓展了 NICO 的应用领域,在 P2P 通信和不同厂商间互联互通等场景都能无障碍应用 NICO。

为了达到与原生 Opus 齐全兼容的目标,NICO 的码流构造和 Opus 完全一致。当只有 Opus 解码能力的终端在接管到 NICO 的码流时,也能解码出失常品质的语音,听感较解码原生 Opus 的码流无显著差别;而具备 NICO 解码能力的终端解析 NICO 的码流时,便能应用到 NICO 的抗丢包能力,在丢包场景下达到远优于 Opus 的成果。

以下三段音频别离是原始音频、应用 Opus 编解码音频和应用 NICO 编码 Opus 解码的音频,能够感触到,对于雷同音频序列,应用 NICO 编码的码流被 Opus 解析时,解码音质较 Opus 编解码简直无差别。音频体验点击:「链接」。

3.4 复杂度优化

为晋升抗丢包能力并齐全兼容 Opus 码流,NICO 编码器做了十分多的技术创新和改良,同时对复杂度也做了很多优化工作,达到对齐 Opus 的程度。这些优化工作在保证质量的同时升高了 NICO 的复杂度,确保 NICO 在低端机器上都可能晦涩运行。

下图为 NICO 和 Opus 编码器 CPU 耗费比照后果,测试采纳了实时率(Real-Time Factor,RTF)作为 CPU 耗费掂量指标。在 iPhone Xs Max 手机上,NICO 在优化个性都开启的状况下,CPU 耗费相较于 Opus 敞开带内 FEC 减少了 9%,而相较于 Opus 关上带内 FEC 升高靠近 15%。

3.5 品质比照

咱们评估了 NICO 与 Opus 开启带内 FEC 在等同码率、无丢包、随机丢包 30%、40% 和突发丢包 25% 测试条件下的 POLQA 打分。结果显示,Opus 解码音频品质随着丢包率的减少有显著降落,在突发丢包场景下,更是降到 2 分以内。NICO 解码音频随着丢包率的减少,MOS 分有肯定水平降落,但降落迟缓且显著优于 Opus。在突发丢包 25% 时,NICO 的 MOS 分靠近 4 分,远远好于 Opus。

上面是 Opus 和 NICO 在 40% 随机丢包和 25% 突发丢包条件下的频谱比照示意图。从频谱图上来看,Opus 在随机丢包场景会频繁呈现因 PLC 造成的能量衰减、频谱能量不间断的状况,而 NICO 的频谱复原成果更好,有更好的连续性,没有显著的频谱上的伤害。

在突发丢包场景,Opus 解码音频会呈现语音听感显著不间断、卡顿掉字等景象,而 NICO 解码音频的连续性十分好,无任何卡顿。

文档中为一条音频序列的测试后果,感兴趣的敌人能够点击「链接」自行体验成果差别。

3.6 小结

能够看出,相较于带外 FEC、重传等网络策略,晋升编码器抗弱网能力和编码品质是解决音频弱网痛点问题性价比更优的计划。相比业界已有计划,NICO 编码器的技术优化和翻新工作具备以下几项长处:

  • 全面反对窄带到全带多形容编码,满足不同业务场景对编码音质的差异化需要,改良带内 FEC 和 PLC 算法,在高丢包与突发丢包场景,弱网抗性显著优于 Opus 编码器;
  • 改良 BWE、DTX 和 CNG 等算法,提出动静编码模式切换办法,显著晋升编码品质;
  • 独特的码流设计齐全兼容 Opus,确保 NICO 终端与 WebRTC 终端以及不同 RTC 厂商互联互通,升高了端到端兼容性革新老本;
  • 高效优化编码复杂度,保障在高中低端机上均能够晦涩运行,应用火山引擎 RTC 利用的用户都能享受到 NICO 带来的品质晋升。

4. 将来瞻望

目前,NICO 次要针对通话场景做了大量优化工作,晋升了弱网场景的音频体验,后续咱们会将其拓展到其它场景,例如直播、连麦和空间音频传输等。同时,AI 技术为编解码器方向带来了技术革新,将来有后劲在复杂度可控和超低码率条件下实现高清音频通话,进一步晋升用户在弱网场景下的通话体验,咱们将亲密关注业界相干技术的停顿,一直晋升火山引擎 RTC 语音相干技术的能力下限。

参考资料

  1. Recommendation G.711 (11/1988): Pulse code modulation (PCM) of voice frequencies
  2. M. Schroeder; B. Atal, 1985. Code-excited linear prediction(CELP): High-quality speech at very low bit rates. ICASSP ’85. IEEE International Conference on Acoustics, Speech, and Signal Processing
  3. Andreas S., Ted Painter. Audio Signal Processing and Coding ,2007, Wiley-Interscience
  4. Neuendorf; et al. The ISO/MPEG Unified Speech and Audio Coding Standard – Consistent High Quality for all Content Types and at all Bit Rates, 2013, Journal of the Audio Engineering Society. Audio Engineering Society
  5. J.M. Valin, RFC 6716: Definition of the Opus Audio Codec, 2012
  6. V.K. Goyal. Multiple description coding: compression meets the network, 2002,IEEE Signal Processing Magazine
  7. H Sanneck, A Stenger, A new technique for audio packet loss concealment. Proceedings of GLOBECOM’96

对于咱们

火山引擎 RTC,致力于提供寰球互联网范畴内高质量、低延时的实时音视频通信能力,帮忙开发者疾速构建语音通话、视频通话、互动直播、转推直播等丰盛场景性能,目前已笼罩互娱、教育、会议、游戏、汽车、金融、IoT 等丰盛实时音视频互动场景,服务数亿用户。

🏃 扫描上方二维码退出咱们吧!

正文完
 0