游密定义行业新标准,实时语音抗网络抖动高达 50%

摘要

网络通话大量应用于游戏、在线教育、金融等各个领域,虽然普及度越来越高,但也有它的弊端,例如大家在玩游戏,特别是 5 人组队的竞技类游戏,经常打着打着会出现通话中断、杂音、卡顿等现象。出现这类现象的原因有很多,如 wifi 切换到 4G 网络、乘地铁穿梭山洞、无线网络不稳定等情况,都有可能造成过度延迟、失真、甚至是通话中断。

随着移动 3G、4G 网络的发展与成熟、网络资费逐年降价、拥有 wifi 的公共场所越来越普及,网络通话已有渐渐取代电话通话势头。网络通话拥有更好的性价比,稳定可靠、实时性高且可以多人参与等优势。除此之外,网络通话大量应用于游戏、在线教育、金融等各个领域,虽然普及度越来越高,但也有它的弊端,例如大家在玩游戏,特别是 5 人组队的竞技类游戏,经常打着打着会出现通话中断、杂音、卡顿等现象。出现这类现象的原因有很多,如 wifi 切换到 4G 网络、乘地铁穿梭山洞、无线网络不稳定等情况,都有可能造成过度延迟、失真、甚至是通话中断。

那么网络丢包是如何造成的呢?其实原因有很多,例如数据包丢失当数据包到达时间不一致时,接收端点必须进行时间补偿并尝试纠错。在某些情况下,接收端没办法进行合适的纠错,导致数据包丢失。再如网络拥塞,网络拥塞发生在传输网络上。网络设备在接受数据后,由于无法发送同等数量的数据,导致数据包缓冲区过满,就开始丢弃数据包。如果在网络中的端点没有遇到网络扰动,那么每个数据包都会到达。但是,如果端点的缓冲区满了,数据包的到达时间就会越来越迟,从而导致抖动。就像高速公路两端的送货方 A 和收货方 B,拥堵不是收货方 B 造成的,因为它只是没有足够的停车位。拥堵是由送货方 A 造成的,因为它不断地运送货物到没有足够停车位的收货方 B 处。

那么网络丢包在什么程度下对用户会有什么影响呢?我们做了个测试:在没有任何优化的情况下,当网络丢包达到 10% 的时候,通话发送方从 1 数到 50,在听众方却只能听到一半的数字,体验非常差;当丢包达到 30% 的时候,发送方说出的内容,接收方大多数只能听到刺耳的杂音,通话失败。由此可见,网络通话对于网络的稳定性有着非常苛刻的要求,而在实际的网络环境中,不可避免的会出现各种网络抖动。如游戏里一场重要的比赛,假如漏掉关键的指挥命令,将会影响甚至扭转整个战局。所以如何抵抗网络抖动,保证通话的流畅性与清晰度尤为关键。

游密科技一直致力于研究保证稳定、流畅的通话体验,核心团队由音视频、游戏及软件开发等领域的专家组成,他们曾服务腾讯、华为、盛大等企业,具备 10 年以上相关领域工作经验。游密科技自主研发的音视频通讯云解决方案,获得了多项核心技术专利,并于近日获得重大突破,成功将丢包率在 50% 环境下的语音通话做到字字必达、清晰稳定。游密科技通过动态码率,错误隐蔽算法以及动态的前向纠错算法等技术手段,将 50% 网络丢包下的通话做到一字不落,属于行业首创。

下面我们来了解下,游密通讯使用了哪些策略来优化网络抖动的问题?

一、 带宽检测,根据带宽动态调整码率

带宽决定了音频数据的最大传输速度,为了保证音频传输的完整与及时,首先要保证带宽足够。当检测到当前码率下,带宽不够时,就需要降低音频码率,减少发送的数据总量,以牺牲部分音质来保证语音的流畅;而当带宽恢复的时候,可以适当调高码率,以提供更好的音质。

可用带宽 = min(本地可用发送窗口大小,远端可用接收窗口大小) * (1 - 丢包率) / RTT

根据以上公式,我们实时监测带宽的变动情况,再根据情况动态调整码率。

二、 偶尔丢包,采用错误隐蔽算法

基于接收端的丢包补偿技术是错误隐蔽算法。它通过产生一个与丢掉的语音包相似的包来替代,从而达到抗丢包的作用。错误隐蔽算法主要是基于语音的短时语音相似性。它不需要发送额外的数据,对较短的语音包丢失效果较好,非常适合偶尔丢包的情况。

在各种错误隐蔽算法中,我们选择了基于插入的重复法。重复法利用接受到的最近的包来替代丢失的包。如果丢失了较长的语音,则第一个包采用最近包,后续的包采用最近的包进行衰减获得。重复法具有低计算量和适度的音质,适合实时通话的场景。

三、 连续丢包,采用 FEC

接收端的错误隐蔽算法只能解决较低丢包率的情况,而当丢包率上升,我们需要在发送端采用 FEC 技术,通过发送冗余数据来抗丢包。

1) FEC(Forward Error Correction,前向纠错)技术

FEC 在每发送 N 个媒体数据包后,附带发送 K 个校验包。校验包的每个比特都是由前面的 N 个数据包的同位置比特产生。接受方如果发生丢包,可以通过收到的数据包和校验包,把丢失的数据包恢复回来。该方法的优点是补偿与具体的媒体内容无关,计算量小,易于实施。但也有不足:校验包是冗余数据,会增加带宽。且如果出现丢包,丢包数据需要等后面的包都收到了,才能进行恢复,这会引入一定延迟。

2) 动态的 FEC

FEC 的冗余量越大,恢复的效果越好,但同时带宽增加越大。带宽的增大,一方面是浪费,另一方面也可能引起网络情况的恶化。所以合理的配置 FEC 的冗余量是非常必要的。然而需要的冗余量并不是一成不变的,所以我们需要能动态的调整 FEC 的冗余量,以获得更好的语音效果。

所以,如果网络状态比较好,丢包率低,那么较低的冗余量就足够恢复语音数据。而如果网络状况不好,丢包率高则需要较高的冗余量才能达到抗丢包的效果。所以,我们需要实时监测网络状况,根据网络带宽和丢包情况的变动情况,动态调整冗余量。网络情况好就设置低冗余量,网络情况差,设置高的冗余量。在网络通信中,各个音频片段的重要性是不同的。很明显,语音帧比较重要,如果丢失,会影响收听的效果。而静音帧,噪音帧,即使丢掉,也不太影响收听的效果。所以在通信过程中,可以监测当前的音频特性,在语音部分,采用高一点的冗余量,而在静音,噪音部分,采用比较低的冗余量,甚至不做冗余。从而更好的利用带宽,以获得更好的抗丢包效果。

关于游密通讯云:

游密通讯云作为国内领先的音视频通讯解决方案提供商,为 APP、手游提供专业的音视频通讯服务(包括但不限于即时通讯、音视频通话、互动直播等服务),拥有着坚实的技术实力以及丰富的开发经验。

如今使用游密通讯的玩家规模已突破 5 亿、语音通话累计时长超过 500 亿分钟,市场规模及占有率已遥遥领先。随着公司的不断发展,游密科技的海外业务也迅速崛起,全球布局服务器网点超过 200 个,未来还将持续扩张,为更多优质的、不同类型的客户提供最前沿的技术与服务。


最新文章

极客公园

用极客视角,追踪你最不可错过的科技圈。

极客之选

新鲜、有趣的硬件产品,第一时间为你呈现。

顶楼

关注前沿科技,发表最具科技的商业洞见。