Zego语音视频社交方案助力​中国互联网出海

  • 内容
  • 评论
  • 相关

来源: 腾讯游戏        时间: 2017-07-07


中国互联网要出海,实时语音视频社交技术方案要解决三大技术难题:
       1)如何实现低延迟?
       2)如何支撑海量并发?
       3)如何实现国内外互通低延迟?

游戏实时语音是实时语音视频社交技术的一个典型的应用。

6月17日,在杭州举行的LiveVideoStack“后直播时代技术”沙龙上,来自阿里、网易等知名公司的技术专家汇聚一堂。即构科技Zego合伙人林君,就这三个技术难题,与在场的技术同仁们进行了深入讨论。

如何实现低延迟

协议选择

要实现低延迟,就要选择能够支持实时系统架构的传输协议。目前主流的做法是选择RTMP标准协议,或者开发基于UDP的专有协议。两者各自有优劣势,要结合具体的场景需要来做选择。

1)RTMP标准协议

RTMP是基于TCP协议的,而TCP协议是通用的IP网络协议,不是为实时媒体传输而设计的,在网络极端糟糕情况下延迟会增大。

TCP协议有内嵌的ARQ,但没有FEC,TCP协议不允许开发者对ARQ和FEC策略进行控制。

TCP协议不是从实时语音视频的角度进行设计的,更多考虑网络传输的公平性,内嵌的传输控制策略比较温和。

2)基于UDP的专有协议

UDP协议适合实时语音视频通讯,允许端到端全链条进行信道策略控制,在弱网环境下可控性更强。

延迟时间的大小取决于丢包的时候如何做ARQ和FEC策略,UDP协议允许开发者深度控制ARQ和FEC策略。

UDP协议允许从实时语音视频的角度进行设计,做到报文实时可达,根据网络状况自适应地选取ARQ和FEC策略,及传输码率。

在网络环境良好和编解码器相同的情况下,两种协议的延迟时间是相当的,都可以实现低延迟、不卡顿和高品质的实时通讯效果。

在网络环境较差的情况下,基于UDP的专有协议对端到端全链条可控,包括流控码控、ARQ&FEC、抖动缓冲等,对抗恶劣网络更有保障。

实时系统架构

要实现低延迟,在传输链路上各个环节的优化是其次,主要的是要构建一个实时的系统架构。下图是即构科技Zego的实时系统架构,可以满足实时游戏语音,视频交友,在线陪聊和互动直播等应用场景的需求。

1)实时网络

实时网络是为低延迟的场景而设计的,比如说游戏实时语音场景中的多人群聊,视频交友场景中的houseparty,在线陪聊场景中的一对一私聊,还有互动直播场景中的多主播连麦。实时网络采用优质的网络资源。主播推流和拉流都直接经过实时网络的服务器集群,其中包括信令服务器,媒体服务器,和调度服务器。媒体服务器的设计要尽量的简单,只是处理媒体流的传输。信令服务器负责信令的同步,比如说主播登入或者登出服务器。调度服务器负责服务器资源的调度和用户访问的调度。实时网络通过优质的网络资源和成熟的QoS策略来保障用户能获得低延迟。

2)分发网络

一般来说,除了部分用户需要极低的延迟来实现实时互动以外,还有相当一部分用户不需要进行互动,而只需要围观那群进行低延迟互动的用户就可以了。这样的场景包括游戏语音中的国战场景:少数几个游戏指挥者需要实时语音通话商量对策指挥作战,其它大部分的游戏玩家只需要听从这几个指挥者的命令,参与作战就可以了。那么,这部分围观的用户可以容忍稍微高一点的延迟,只要保障音质和流畅性就可以。

网络优化

在实时网络的基础上,要针对传输链条的各个环节进行优化。基本的原则可以分为三步:选择优质的网络资源,选择最优的传输链路,在该传输链路上做到最优。

1)优质的网络资源

这个就像在公路上开车,只有公路基建好,汽车才能跑得快。因此,要获得低延迟,首先要保证网络资源的质量,还有网络资源的覆盖面。即构科技Zego经验表明,首先要通过优质的BGP节点接入,解决跨网通讯的瓶颈问题;然后要根据用户分布水平部署足够多的服务器节点,确保全面无死角覆盖。

2)负载均衡&智能选路

调度服务器集群实际上也起了全局智能DNS的作用。它会把每一个访问的用户指派到最高效的接入点,从而让传输网络整体达到负载均衡。

数据包在从发送端到达接收端的路上,调度服务器集群会监测网络的情况,给数据包选择最优的传输路径。在不同的时段,往往最优的路径会不一样。同一个传输的数据包序列,也有可能通过不同的路径进行传输。等到到达接收端以后,再进行排序和解码。

3)传输QoS

为了获得整个传输链条获得比较好的掌控力,往往会开发基于UDP的专有协议。由于IP网络遵循尽力而为的原则,在UDP协议的基础上,要实现QoS策略来对信道进行保护。即构科技Zego的做法是采用前向纠错(FEC),丢包重传(ARQ)和码率自动控制(ARC)三种策略相结合来保障QoS。在丢包率比较高的弱网环境,即使FEC也不能保证百分之一百不丢包,这种情况下,如果RTT不高,可以适当地采取ARQ进行配合。在可用带宽不稳定的情况下,ARC可以自动调节码率去适应可用带宽的变化,甚至自动调节分辨率来适应接受方的播放窗口的大小变化。

贴近应用场景的方案

没有任何一套技术方案是适应所有应用场景的,即使是同样的应用场景,在不同区域使用,后台资源的配置也要做适当的微调。下面以狼人杀中的游戏语音方案为例,分享一下怎么针对应用场景的特点,制定不同的游戏语音方案。

1)低成本游戏语音方案

如果狼人杀游戏的规则规定用户是轮流发言,不允许用户像马东的饭局狼人杀中的那样插麦,那么从技术的角度来说,音频的交互不是实时的。这种轮流发言的模式允许上一个用户发言完毕,间隔一秒多时间以后,另外一个用户才开始发言。这个间隔时间是可以接受的,毕竟用户需要思考时间。

因此,这种狼人杀的规则允许用户之间的交互不是实时的,延迟可以是比较高的(超过1秒)。那么可以采取通过分发网络传输的方案:发言用户把媒体流推到分发网络,分发网络负责把媒体流分发到边缘节点,其他用户从边缘节点拉留播放。

这个种方案避免了使用相对昂贵的核心服务器资源,而采用经济型的分发网络资源,既满足了需求,又节约了成本。

2)低延迟游戏语音方案

如果狼人杀游戏的规则规定用户可以在发言者讲话过程中插麦,和发言者即时进行辩论的话,那么从技术的角度来说,音视频的交互是实时的。比如说,马东的饭局狼人杀为了和米未传媒的网络综艺节目“饭局的诱惑”中的规则保持一致,其规则是允许其他用户插麦和发言用户进行实时辩论的。

因此,这种允许插麦的模式要求用户之间的交互是实时的,延迟的时间要比较低(低于400毫秒)。那么可以采取如下方案:

被允许插麦的用户无论是推流还是拉流都经过核心服务器集群,延迟在400毫秒以内。

旁路服务器从核心服务器集群拉流,然后混流,最后转推分发网络;

分发网络把媒体流分发到边缘节点。

围观的用户可以从边缘节点拉流播放,延迟在1秒左右。

这种方案采用了优质的服务器资源,保障了超低的延迟时间,不但满足了狼人杀游戏环节中进行插麦的需求,而且还满足了在才艺表演环节中进行音视频互动的需求。

值得注意的是,这种方案除了要解决低延迟的问题,还要解决噪音抑制和回声消除的问题。

游戏语音技术难点

1)噪音抑制(ANS)

在实时游戏语音中,会出现一些杂音。杂音会干扰到通话的愉悦度,因此很多人把杂音统统都成为噪音。其实有很多杂音不是噪音,比如说敲打键盘的声音,或者楼下汽车的鸣笛。一般来说,噪音抑制的算法是不会把这些声音作为目标来抑制的。抑制敲键盘的声音是一种专门的技术,严格来说不属于噪音抑制的范畴,这里不讨论。

即构科技Zego的做法是抑制背景的平稳噪音和部分非平稳噪音。根据听音心理学原理,并非在绝对没有噪音的环境,人类才感觉到最舒服。一定信噪比范围内的噪音,其实是在人类的心理需要。噪音抑制的作用是把噪音抑制到人类感觉到舒服的一个信噪比范围。

为了达到这个目的,即构科技Zego同时采用了噪音抑制(ANS)和自动增益控制(AGC)技术,一方面结合心理声学模型,能够提高20dB+的信噪比,同时不损伤语音音质;另一方面自动调整麦克风音量,把有效的声音放大,把无效的背景声音降低。

2)回声消除(AEC)

回声消除的原理请见上图。简单的来说,远端传说过来的声音,被近端的麦克风采集了,重新传回到远端,远端的用户就听到了自己的回声。回声消除的情形分为两种,一种是单讲,一种是双讲:

● 单讲,只有远端讲话,近端没有人讲话。

● 双讲,不只是远端讲话,近端的人也讲话。

在单讲的情况下,相对比较好处理,因为回声没有和有效的声音混合,直接把回声干掉就好了。在双讲的情况下,处理的难度就相当的高,因为回声和有效声音混合了,一方面要把回声分辨出来消除干净,另外一方面又要不伤害有效的声音。一般来说,会结合VAD(VoiceActivityDetection)来辨别单讲还是双讲的情形。下面将会重点讲讲双讲的情况。

3)语音双讲

从远端过来的声音信号,经过扬声器播放以后,在被麦克风采集之前,会在声音环境中经过传播路径:首先是空气,然后被墙壁吸收或者反射,最后经过空气被马克风采集。经过传播路径以后的声音信号和远端的声音信号是不一样的,但是还是高度相关的,这个相关性可以用一个函数y=f(x)来表示。回声消除的原理就是要通过分析回声的模式,参考远端信号,解出这个函数。这个函数的具体实现就是一个滤波器。求解这个函数需要不断的试错和调整,最后得到一个比较合适的解,这个过程所需要的时间也就是收敛时间。滤波器根据这个函数的解,生成一个反向波和输入的声音信号叠加,最终的结果就是把回声消除掉。

在双讲的情况下,有两种回声消除的做法,一种是允许对有效声音有些许损伤也要把回声消除干净,另外一种是允许保留些许回声也不要对有效声音造成损伤。因此,回声消除就是在这两种做法之间找平衡点。

如何支持海量并发

海量并发系统架构的本质就是水平部署和并发量分布相匹配的计算和网络资源,然后通过监控这些资源的使用率进行智能调度。同时为了均衡覆盖率和成本关系,在边缘地区通过代理调度的方式确保覆盖率。

水平部署

比较实操的方法是根据大客户的用户在各个区域的分布,相应地规划和部署网络节点和带宽资源。这些节点除了可以支持海量并发以外,还可以起到冗余热备的作用。通过小平结构部署的网络资源十分的灵活,可以根据客户的用户规模增长无缝扩容。当然,如果仅仅是水平部署资源,而无法有效地调度资源,还是没办法支持海量并发的。因此,水平部署还要靠智能调度去保障资源的利用率。

智能调度

智能调度包括了访问调度,资源调度和智能选路。这是有调度服务器集群完成的。

1)访问调度:通过大数据分析,根据时段、区域、和网络实时状况等因素,把访问的用户指派到附近最高效的接入点,在整体上实现了网络资源的负载均衡。

2)资源调度:通过监控、搜集、和分析各个网络节点的负载和网络情况,对带宽和节点资源进行调度。比如说,某条线路出现问题了,就自动下线该线路,而选用其它可用线路代替。

3)智能选路:在网络传输的过程中,两点之间并非直线最短,这个和交通网络的状况类似。数据包在网络上传输,调度服务器要为其避开拥塞,选择最优路径。甚至有时候,同一个链路的数据包序列,会分开几个路径同时传输,在适当情况下再进行重组,以此获得最优的传输效果。

代理调度

在偏远区域,除了成本因素的考虑,往往不会部署核心机房。然而,这些区域还是有用户访问。为了确保全面的覆盖率,可以采用代理调度的模式。当有用户从偏远地区发起访问,代理调度节点会把这个用户重定向到最为有效的核心节点,以此来快速处理该用户的访问。

如何实现国内外互通低延迟

国外的网络基建发展及其不均衡。在一些欠发达国家和地区,网络情况甚至比国内的偏远地区还要差好多。基本的逻辑是,要在该地区找到一个能把数据传出去的节点,然后选择高效的中转接点进入国内。直接把数据传输会国内是不可行的,要么根本传不回来,要么传回来的效果很差。要通过中转节点把数据传入国内,需要解决两个问题:媒体数据的中继续传,和信令数据的加速。

媒体数据中继续传

中转节点的服务器一般支持媒体数据的中继续传。从海外节点回来的媒体数据在中转节点进行中转续传,国内的用户可以从中转节点进行拉流。通过这种方式可以保障跨国实时音视频通讯效果。

信令数据加速网络

信令数据和媒体数据走的是不同的链路。中转节点往往是不支持信令数据的中继续传的。国内的用户直接从中转节点获取信令数据的效果是无法保障的。然而,不像用户和机房之间的通讯效果,机房和机房之间的通讯效果是可以得到保障的,可以通过在国内建立加速网络的方式来解决这个问题。根据用户的分布情况,在各个区域部署加速节点,构建加速网络,把信令数据转发到各个加速节点让用户访问。这样就可以解决国内外信令传输效果差的问题。

为了保证全球用户访问没有死角,即构科技Zego在全球部署了超过100个核心节点,全球范围内语音视频通讯的延迟达到100毫秒左右。即构科技Zego能做到全球覆盖无死角,首先要一点一点的去绘画全球的网络图谱,然后根据用户分布和当地网络情况部署网络节点资源。

上图是即构科技Zego的大数据分析团队使用算法绘画的一张全球用户分布图。其中,使用了用户的IP地址来确定地理经纬度,使用当地用户的数量来确定圆点的亮度和大小。依靠大数据这么一分析才知道,原来不知不觉地在过去两年里,即构科技Zego的用户已经超过两亿,遍布了全球五个大洲,而且还是在持续快速的增长中。


阅读完莫急走

即构科技是腾讯QQ前总经理lyy率领原QQ核心团队创立的语音视频云计算公司,致力让企业快速获得实时语音视频通讯能力。

获取实时语音视频通话demo或者技术文档

请访问即构官网的开发者中心 https://www.zego.im/

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注