实时音视频通话一直是我们通信行业必不可少的一门技术,并且近今年音视频边缘设备产品涌现出很多设备,然而,在当今网络环境中,网络传输质量确常常无法得到有效的保障,那么,在当今弱网环境下,如何提升音视频传输的通话质量就显得尤为重要,即便是音视频技术发展到今天,音视频弱网处理仍然是一个不小的技术挑战,本文重点介绍下一种针对弱网环境下的音频处理策略,我们的目标是:
在弱网环境下:丢包率30%、延迟300ms、抖动150ms情况下,仍然可以提供流畅的高音频质量通信,做到让用户通话无感。丢包率达60%的情况下,仍可正常语音沟通,听清语义。
一、弱网是如何形成的
现在你了解了音频是怎么传输的,接下来我们来看看弱网是如何形成的。其实弱网状态中有三个常见的问题:丢包(Packet Loss)、延迟(Latency)和抖动(Jitter)。我们挨个来看看它们分别是怎么产生的。
丢包
我们还是以物流小车为例。"丢包"指的是有的车无法在有效时间内到达终点,甚至可能永远也到不了终点。比如有的小车发生了车祸,或者小车司机罢工了。如果 100 辆车里有10 辆无法到达终点,那么我们就把它叫做丢包率为 10%。
是的,在网络传输中,数据包会经过很多复杂的路径,有的是在物理传输中发生了丢失,有的是在服务器、路由转发时由于拥堵或等待时间过长被抛弃。可以说,互联网传输并不是百分百可靠的,总有数据无法按时传输到目的地。
延迟和抖动
在网络这条公路上,从起点到终点我们有很多不同的路径可以选择。你可以选择走高速但也可能走了乡村小道,这样就会导致包裹到达终点所经历的时间发生变化。而这个从发送到接收经过的时间我们把它叫做延迟。
那么很显然,音频在发送的时候是按照时间顺序等间隔发送的,但是由于每个数据包经过的路径不同,从而到达目的地的延迟也不一样。这就导致有的时候很长时间都没有一个数据包到达,而有的时候几乎是同时来了好几个数据包。这就是我们常说的抖动。如果我们按照数据包到达的顺序去播放音频,那么音频播放可能是乱序的而发生杂音,也可能是没有数据可以播放,导致卡顿。
此外,还有一些其他网络特定原因,比如:
1、带宽限制:很多网络情况,由于各种条件限制,带宽并不是高,很难保障正常情况下的高质量音视频传输。
2、比如卫星通信网络,网络延迟大多都在1秒以上,这种情况下如果不做弱网处理,基本上是无法进行正常的音视频通信。
针对以上网络问题,我们做如下具体分析:
1、当网络环境只有延迟、没有抖动时,这种情况只会造成声音延迟播放而不会出现声音卡顿现象,因此在这种情况下我们只需根据抖动的计算评估,自动调整jettebuffer缓冲大小即可;
2、当网络环境仅有延时和抖动时,那么就相对比较复杂,会出现数据包乱序,导致声音卡顿。因此需自动调整jettebuffer缓冲大小,对音频数据包重新排序,使音频包顺序调整正确。
3、当网络环境仅有网络丢包时,会造成音频数据包的丢失,导致声音卡顿。
抖动包处理
二、弱网处理策略
预处理:
1、带宽估计:实时检测网络可用带宽值以及带宽变化趋势,计算出网络可用带宽情况。
2、网络监测:实时检测网络延时均值、网络丢包以及网络抖动的变化趋势。
策略:
1、jettebuffer队列根据网络检测情况自动调整大小,做到网络环境好时,既不会影响正常通话网络延迟,而网络环境差时,可以做到最大容错处理,牺牲延迟换取音频质量。
2、当丢包严重时,使用PLC、FEC等音频处理算法技术,可以恢复丢失的数据包,当然如何使用、何时使用时重中之重。
3、采用高频处理音频编码,比如opus,内部处理相对较好,对抗网络弱网环境也是有不错的体验。
综上所诉,其实可以对抗音频弱网的算法和技术还是有很多,但是难点是如何用,何时用才是最难的,如果用的不好,可能会适得其反,这个就需要多年的经验积累了
为了使用方便,我自己把所有音频处理算法都独立抽像出来小模块,比如像FEC、PLC等等这小小算法,直接就可以调用,就一两个接口使用比较方便,有需要技术沟通交流的可以跟我联系。
联系方式:
vx:unique_no_1
tel:18108010758