关于开源:技术原理解析如何让语音通话App兼顾低延时与高音质

36次阅读

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

语音社交曾经呈现了数十年,前不久的“互动播客”场景让音频互动再次成为业界焦点。但咱们想聊的不是这个场景,而是底层那套汇聚了工程师们数十年教训的实时音频互动技术。

从软件算法到传输架构,有哪些因素会影响你的通话音质?为什么说不是延时越低越好?机器学习、大数据如何帮忙优化传输、音质? 咱们将从明天开始通过四篇音频技术系列内容 ,从多个层面深入浅出逐个解答这些问题,并分享声网的实践经验。

咱们曾在《详解低延时》中讲过这样一个音视频数据传输的流程,如下图。在这条端到端的链路上的每个环节,都存在影响延时、音质的技术难点。

接下来四篇内容会从编解码、降噪与回声打消算法、网络传输、音质优化几方面,由浅入深地讲讲高音质、低延时背地的技术原理与“革新”思路。

本篇先来讲一下语音编解码器。不过在讲语音编解码器之前,咱们须要先理解音频编解码的原理,能力更快地了解到底是什么在影响着音质体验。

语音编码与音乐编码

这里先给一些不理解编解码原理、作用的工程师,简短介绍下。

音频编码指的是把音频信号转化为数字码流的过程(如下图所示)。在这个过程中,音频信号会被剖析从而产生特定参数。随后,这些参数会依照肯定规定写入比特流。这个比特流也就是咱们常说的码流。解码端接管到码流后,会依照约定好的规定将码流还原为参数,再应用这些参数构建出音频信号。

音频编解码器的倒退历史十分悠久,晚期编解码器的外围算法是非线性量化,这是一种当初看来比较简单的算法,其压缩效率并不算高,但实用于包含语音和音乐在内的绝大多数音频类型。之后,随着技术的倒退和编解码分工的细化,编解码器的演进方向分成了两条路——语音编码器和音乐编码器。

次要用来编码语音信号的语音编解码器,开始逐步向基于时域线性预测框架的方向演变。这种编解码器参考了声道的发音个性,将语音信号合成为次要的线性预测系数和主要的残差信号。线性预测系数编码所需的比特率非常少,却能高效的构建出语音信号的“骨骼”(能够设想为能听出这段语音大抵在谈话但听不出是谁在说);残差信号则像是“血肉”,可能补充出语音信号的细节(有了血肉,则能够设想为你能够听出这段语音是谁在谈话了)。这种设计大幅晋升了语音信号的压缩效率,然而这种基于时域的线性预测框架在无限复杂度下无奈很好的编码音乐信号。

而针对音乐信号进行编码的音乐编解码器则走上了另一条演变的路线。因为相比时域信号,频域信号的信息更多的集中在少部分频点上,更利于编码器对其进行剖析和压缩。所以音乐编解码器根本都会抉择对在频域上对信号进行编码。

起初,随着技术日趋成熟,两种编解码架构又再次走到了一起,即语音音乐混合编码器,WebRTC 中默认应用的编解码器 Opus 就是这类编解码器。这类编解码器的特点是交融了两种编码框架,并针对信号类型主动切换适合的编码框架。一些国内外出名的产品都会用到 Opus,比方 Discord。

语音编码中,什么在影响互动体验?

要评估音质,那么咱们就须要先晓得编解码器的一些技术指标。技术指标个别有采样率、码率、复杂度、抗丢包能力等,那这些技术指标别离代表什么,对音频体验的影响又是怎么的呢?

你可能看到过“采样率越高,音质越好”、“编码复杂度越高越好”的说法,但放在实时互动的场景下事实并非如此!

一、采样率

从人耳能够听到的模拟信号,转化到计算机能够解决的数字信号,须要一个采样的过程。声音能够被合成为不同频率不同强度正弦波的叠加。采样能够设想成在声波上采集了一个点。而采样率指的就是在这个过程中每秒采样的点数,采样率越高,示意在这个转化过程损失的信息越少,也就是越靠近原声。

采样率决定了音频信号的分辨率。在人耳可感知范畴内,采样率越高,高频重量就被保留的越多,这段信号的听感就越清晰亮堂。举个例子,咱们打传统电话时,往往会感觉对方的声音比拟爽朗,这是因为传统电话的采样率是 8kHz,只保留了能保障可懂度的低频信息,很多高频的重量被失落了。所以想要音频互动体验越好,就须要在人耳可感知范畴内尽量进步采样率。

二、码率

通过采样,声音从模拟信号转化为数字信号。码率示意的就是这个数字信号在单位工夫内的数据量。

码率决定了音频信号通过编解码后的细节还原度。编解码器会把给定的码率按优先级调配给各个剖析模块输入的参数。在编码码率无限的状况下,编解码器会优先保障对语音品质影响较大的参数进行编码,而放弃编码一些影响较小的参数。这样在解码端,因为应用的参数并不残缺,所以其构建出的语音信号也会有难以避免的伤害。一般来说,同一款编解码器的码率越高,其编解码后的伤害就越小。但码率并不是越高越好,一方面,码率和编解码品质并不是线性关系,在超过“ 品质甜点 ”后,码率升高对品质的晋升开始变得不显著;另一方面,在实时互动中,码率过高可能挤占带宽产生网络拥塞,从而引发丢包,反过来毁坏了用户体验。

品质甜点 :在视频畛域,品质甜点指的是在既定的码率和屏幕大小下通过设定正当的分辨率和帖速率来失去最佳视频主观品质体验。在音频畛域也有相似的状况。

三、编码复杂度

编码复杂度个别集中在编码端信号剖析模块。一般来说,对语音信号剖析的越详尽,其潜在压缩率可能就越高,所以编码效率和复杂度有肯定相关性。同样的,编码复杂度和编解码品质亦不是线性关系,两者之间也存在一个“品质甜点”,是否在无限复杂度的前提下设计出高质量的编解码算法往往间接影响了编解码器的可用性。

四、抗丢包能力

首先,抗丢包的原理是什么?咱们在传输音频数据的时候会遇到丢包,如果以后数据包失落了,咱们心愿能够通过某种伎俩来猜出来或者失去以后帧大略的信息,而后利用这些不齐全精确的信息,解码出一个和原始信号相近的语音帧。当然,只靠凭空猜个别是没什么好后果的,如果前一个数据包或者后一个数据包能通知解码器以后失落包的一些要害信息就好了,这个信息越多,越有利于解码端复原出失落的语音帧。这些蕴含在“前一个数据包”或“后一个数据包”中的“要害信息”,也就是咱们之后要提到的“帧间冗余信息”。(往期咱们讲过丢包反抗的更多常识)

所以,抗丢包能力和编码效率是绝对互斥的,编码效率的晋升往往须要尽量减少帧间的信息冗余,而抗丢包能力又依赖肯定的帧间信息冗余,帧间信息冗余能够保障在以后数据包失落时,通过前 / 后序语音帧复原出以后语音帧。在实时互动场景下,因为用户的网络是非牢靠网络,可能一个用户走着走着就进了电梯,或坐在高速行驶的车上。在这种网络里,充斥着丢包与延时抖动,所以编解码抗丢包能力又是不可或缺的。因而,如何均衡编码效率和抗丢包能力,也须要通过详尽的算法设计和打磨验证。

如何均衡音频体验与技术指标?

那声网是怎么做的呢?咱们的工程师综合思考了上述几点,打造了一款专为实时通信应用的高清语音编解码器 Agora Nova(以下简称 Nova)。

32kHz 采样率

首先在采样率上的抉择,Nova 并没有抉择其余语音编解码器应用的 8khz 采样率或 16khz 采样率,而是抉择了更高的 32kHz 采样率。这意味着 Nova 首先在通话音质的起跑线上就获得了较大的当先劣势。尽管业内罕用的 16kHz 采样率(备注:微信用的就是 16kHz)曾经满足了语音可懂度的根本需要,但局部语音细节依然须要更高的采样率能力捕捉到,咱们心愿提供更高清的语音通话能力,即既保证了可懂度,又晋升了清晰度,这也是咱们抉择 32kHz 的起因。

优化编码复杂度

采样率越高,语音清晰度就越高,同时意味着单位工夫内须要剖析 / 编码 / 传输的采样点就越多,编码码率和复杂度都须要相应地减少。编码码率和复杂度的减少势必会给用户的带宽和设施性能功耗带来压力。但这不是咱们想看到的。为此,咱们通过实践推导和大量试验验证,设计了一套精简的语音高频重量编码零碎,在剖析复杂度减少很小前提下,最低应用 0.8kbps 即可实现高频信号的编码(基于不同技术,以往要表白高频信号,码率个别须要高于 1~2kbps),极大减少了语音信号的清晰度。

均衡抗丢包性能与编码效率

在抗丢包能力的保障上,咱们也在保障编码效率的前提下抉择了最均衡的计划,通过试验验证,这种计划即又保障了编码压缩效率,又保障了丢包时的复原率。此外,除了 Nova,针对不稳固的网络环境,咱们还研发并开源了抗丢包能力更强的语音编解码器 Agora Solo 和语音音乐混合编解码器 SoloX 等。

Agora Nova vs. Opus

Nova 有着丰盛的模式抉择以供不同场景抉择,诸如可适应模式、高品质模式、低能耗高品质模式、超高频模式和超低比特率模式等。

如果把 Nova 和先进的开源编解码器 Opus 做比照,得益于 Nova 高效的信号处理算法,其在通用语音编码码率下,无效频谱信息要比等同码率下的 Opus 多 30%。在主、主观评估体系下,Nova 的语音编码品质高于 Opus:

  • 主观评估层面,应用 ITU-T P.863 规范定义的主观品质评估算法对两个编解码器的编码 - 解码语料进行打分,Nova 得分始终比 Opus 略高一筹;
  • 主观评估层面,通过 Nova 编解码的语音信号的还原度要高于通过 Opus 编解码的语音信号,反映在听感上就是更通透,量化乐音更小。

得益于这款高清的语音编解码器,声网 Agora SDK 为寰球用户提供了统一的高质量音频互动体验。其实一段语音通话体验的好坏,除了间接与编解码器的编码品质关联,也会极大地受到其余模块的影响,比方回声打消、降噪、网络传输等,咱们将在下一篇介绍声网在回声打消与降噪算法方面的最佳实际。

想理解更多声网技术,🔎欢送搜寻并关注「声网 Agora 开发者」公众号。

正文完
 0