语音交友app源码详解低延时高音质:编解码篇( 二 )


采样率决定了音频信号的分辨率 。在人耳可感知范围内,采样率越高,高频分量就被保留的越多,这段信号的听感就越清晰明亮 。举个例子,我们打传统电话时,往往会感觉对方的声音比较沉闷,这是因为传统电话的采样率是 8kHz,只保留了能保证可懂度的低频信息,很多高频的分量被丢失了 。所以想要音频互动体验越好,就需要在人耳可感知范围内尽量提高采样率 。
二、码率
经过采样,声音从模拟信号转化为数字信号 。码率表示的就是这个数字信号在单位时间内的数据量 。
码率决定了音频信号经过编解码后的细节还原度 。编解码器会把给定的码率按优先级分配给各个分析模块输出的参数 。在编码码率有限的情况下,编解码器会优先保证对语音质量影响较大的参数进行编码,而放弃编码一些影响较小的参数 。这样在解码端,因为使用的参数并不完整,所以其构建出的语音信号也会有难以避免的损伤 。一般来说,同一款编解码器的码率越高,其编解码后的损伤就越小 。但码率并不是越高越好,一方面,码率和编解码质量并不是线性关系,在超过“质量甜点”后,码率升高对质量的提升开始变得不明显;另一方面,在实时互动中,码率过高可能挤占带宽产生网络拥塞,从而引发丢包,反过来破坏了用户体验 。
关于质量甜点:在视频领域,质量甜点指的是在既定的码率和屏幕大小下通过设定合理的分辨率和帖速率来得到最佳视频主观质量体验 。在音频领域也有类似的情况 。
三、编码复杂度
编码复杂度一般集中在编码端信号分析模块 。一般来说,对语音信号分析的越详尽,其潜在压缩率可能就越高,所以编码效率和复杂度有一定相关性 。同样的,编码复杂度和编解码质量亦不是线性关系,两者之间也存在一个“质量甜点”,能否在有限复杂度的前提下设计出高质量的编解码算法往往直接影响了编解码器的可用性 。
四、抗丢包能力
首先,抗丢包的原理是什么?我们在传输音频数据的时候会遇到丢包,如果当前数据包丢失了,我们希望可以通过某种手段来猜出来或者得到当前帧大概的信息,然后利用这些不完全准确的信息,解码出一个和原始信号相近的语音帧 。当然,只靠凭空猜一般是没什么好结果的,如果前一个数据包或者后一个数据包能告诉解码器当前丢失包的一些关键信息就好了,这个信息越多,越有利于解码端恢复出丢失的语音帧 。这些包含在“前一个数据包”或“后一个数据包”中的“关键信息”,也就是我们之后要提到的“帧间冗余信息” 。(往期我们讲过丢包对抗的更多知识)
所以,抗丢包能力和编码效率是相对互斥的,编码效率的提升往往需要尽量减少帧间的信息冗余,而抗丢包能力又依赖一定的帧间信息冗余,帧间信息冗余可以保证在当前数据包丢失时,通过前/后序语音帧恢复出当前语音帧 。在实时互动场景下,因为用户的网络是非可靠网络,可能一个用户走着走着就进了电梯,或坐在高速行驶的车上 。在这种网络里,充斥着丢包与延时抖动,所以编解码抗丢包能力又是不可或缺的 。因此,如何平衡编码效率和抗丢包能力,也需要经过详尽的算法设计和打磨验证 。

语音交友app源码详解低延时高音质:编解码篇

文章插图
如何平衡音频体验与技术指标?
那怎么做的呢?我们的工程师综合考虑了上述几点,打造了一款专为实时通讯使用的高清语音编解码器 Agora Nova(以下简称 Nova) 。
32kHz 采样率
首先在采样率上的选择,Nova 并没有选择其他语音编解码器使用的8khz采样率或16khz采样率,而是选择了更高的 32kHz 采样率 。这意味着 Nova 首先在通话音质的起跑线上就取得了较大的领先优势 。虽然业内常用的 16kHz 采样率(备注:微信用的就是 16kHz)已经满足了语音可懂度的基本需求,但部分语音细节仍然需要更高的采样率才能捕捉到,我们希望提供更高清的语音通话能力,即既保证了可懂度,又提升了清晰度,这也是我们选择 32kHz 的原因 。