组队开黑必备:如何做好游戏内实时语音体验
文:腾讯云游戏行业资深架构师 张晓愚
游戏内语音沟通需求
早在2015年,艾媒咨询即有移动游戏社交相关数据统计:近40%的玩家因为社交因素选择一款游戏;15.6%的玩家因为一款游戏社交性差而选择离开。因此,如何提高游戏的社交属性已成为各大游戏厂商游戏策划的重要组成部分。从小队战斗、团队副本,到游戏排名、PVP团队竞技、公会、家族等游戏玩法,无一不是为了增强游戏的社交性,进而提高游戏粘性和玩家活跃度、留存率的有效方式。随着移动设备性能大幅攀升,移动游戏也从场景简单的休闲类游戏发展为更追求操作和游戏体验的竞技类和大型MMO类等重度游戏,该类游戏内玩家间的沟通交流是其必不可少的功能需求。然而相比端游而言,手游内打字系统更加不方便,文字消息完全无法满足沟通的实时性需求;此外,由于重度游戏对手机网络及性能的要求很高,不稳定的网络和有限的计算资源是每个移动端目前都无法完全解决的问题,游戏外的语音通信软件如移动QQ等也无法满足在资源紧张的情况下做到不影响游戏内玩家的体验,因此,移动游戏内集成轻量级的语音聊天能力已成为各手游厂商的必然选择。
移动游戏语音能力面临的挑战
实时语音通信技术在行业内早已不是一个新话题,从传统的VOIP呼叫中心厂商,到云通信领域的语音服务提供商,均有大量现成的SDK供各类APP集成其实时语音能力。然而,针对移动游戏内的实时通信需求,不仅仅是简单实现实时通话就可以满足,更多的挑战如下:
- 对游戏核心玩法的影响
近年来,移动设备性能大幅增强,但相对玩家对游戏体验的追求而言,目前消费级智能设备的性能仍然是只能满足高品质游戏的基本需求,并没有过多的富余。若实时语音能力占用了过多的设备CPU和内存,会导致游戏本身体验的下降,社交需求虽然是玩家选择游戏的重要方向,但游戏体验才是决定一个游戏能否存活的根本。而从15年起,对网络延迟要求极高的MOBA和FPS类游戏也被搬上移动端,面对移动端极度不稳定的网络环境和昂贵的4G流量费用,各游戏厂商为了优化游戏报文、减少网络流量、降低网络延迟费心尽力,若由于语音能力的加入将游戏网络质量一夜影响到解放前,显然是得不偿失的。此外,语音能力的加入是否会大幅提高游戏下载首包的大小也是各大游戏发行厂商关注的重中之重。
- 移动游戏环境下的声音处理
相比于客户端游戏的场景,移动端游戏最大的优势在于我们可以“移动”着玩游戏,然而在实时语音上,这种“移动”的便捷性也为清晰的语音传输引入了更多的问题:地铁或路上嘈杂的背景音影响正常的语音质量;手机距离嘴巴距离的忽远忽近,声音忽大忽小;多人说话外加游戏的背景音的混叠导致能量过大引起爆音;多玩家手机声音外放造成的大量回声。这些都是在端游相对简单的环境加耳麦场景下不会频繁产生的复杂的声音处理问题。
- 移动游戏多语音场景的能力覆盖
目前比较重度的手游中,竞技类如MOBA、吃鸡和MMO类游戏占据了主流,该类游戏的实时战斗属性急需移动游戏引入语音能力,而休闲棋牌类游戏内语音也逐步成了增强玩家间交流的重要手段。在新进火热的社交类游戏中,语音已成为游戏的基础能力之一。然而,各类游戏对语音能力的需求也不尽相同:竞技类游戏要求游戏内同队玩家均可连麦游戏,在保证基本沟通需求的同时尽量减少对移动设备性能和网络的影响;MMO类玩家很多,如PVP场景下的小队语音、PVE场景下的团队语音,而类似游戏内主播频道的玩法也在最近被众多MMO游戏所关注;社交类游戏如狼人杀更关注实时语音的音质,流畅无卡顿的沟通是游戏长久运营的必要条件;休闲类游戏也将实时语音和语音消息作为辅助的社交手段来提高玩家的活跃度。 此外,也有众多玩家在移动端的环境下不具备收听语音的能力,因此类似微信上提供的语音消息转文字功能也是移动游戏必不可少的能力之一。
- 移动游戏语音全球化能力
2017年国内移动游戏用户规模已接近6亿,增速逐年放缓,人口红利已然消失,竞争日益激烈,也逼迫各大厂商走向游戏精品化路线。相比之下,国产游戏在海外则大有发展空间,更多的精品手游也在获得国内玩家认可后在迅速在全球推广发行。外国玩家是否也有跟国内玩家一致的语音需求呢?在Greg Wadley等人的调研报告中(Voice in Virtual Worlds: The Design, Use, and Influence of Voice Chat in Online Play),给出了明确的答案:游戏内语音在全球来看,都是可以极大的提升玩家游戏体验的。游戏全球化对游戏内语音提出了新的挑战—如何为跨地域的玩家提供流畅清晰的语音体验—不稳定的网络,长距离的传输外加全球各地语音服务基础设施的部署与运维,都是让游戏厂商头疼的问题。
实时语音常用技术方案
在语音相关的众多研究中,已有大量关于不同环境下语音处理的方法,并且在互联网环境下流媒体协议及如何解决的一些网络问题也有前人给出建议。本节即针对上述移动游戏环境下实时语音所面对的挑战,介绍一些语音预处理、流媒体协议等通用的解决方案。
语音预处理常规流程
- 语音降噪
在移动设备所处复杂环境的情况下,接收语音信号的同时会接收到大量噪音,因此语音降噪技术是提高音质、增加语音识别准确率的的必要手段。降噪技术一般分为单麦克风系统和多麦克风系统下的降噪方法,其中多麦克风系统对多麦克的方向、之间的距离要求很高,常用的移动设备中并不具备如此完善的多麦克风通道设计,因此单麦克风下的滤波降噪或噪声阈值方法在移动设备噪声处理中更为常用。噪声处理在移动设备上相对比较简单,第一因为许多高端智能设备上已经内置了专用降噪芯片供操作系统调用,并且移动操作系统中也内置了很多高效的降噪算法供开发者调用,如Android中的NoiseSuppressor。
- 语音激活检测(VAD, Voice Activiy Dection)
语音激活检测的目的即判断一段声音是背景噪音还是语音,该技术往往作为在各类语音后续处理及语音识别技术的基础。在移动游戏无处不在的噪声环境中,语音信号的准确识别尤为关键。一方面,可以通过对语音信号的识别,去掉没有语音的部分的声音,减少语音传输文件的大小,也减少了其他语音处理方法的CPU内存消耗;另一方面,准确提取语音信号,也可以有效提高语音识别转文字的准确性。
VAD处理过程
由于语音本身的特性及其相对背景音的区别:能量高且不连续,因此在声音的时域分析方法中短时能量结合短时过零率的分析可以有效辨别声音是语音还是噪音;在频域中语音信号也可以通过倒谱及谱熵等特征作为识别参数;随着机器学习的发展,隐马尔科夫模型、决策树模型乃至最新的深度神经网络也被应用于VAD领域,以提高噪音环境下VAD的准确率。几种方式比较而言,时域分析对硬件要求最低,频域分析速度最快,而模型方式则相对较复杂,但在准确率上更占优势。截止目前,市场上三类VAD分析方法都在不同需求场景中被广泛应用。
- 回声消除
回声,作为噪音和背景音外的第三类另人头疼语音问题,在移动游戏场景下也广泛存在。噪声的处理过程可简单的理解为从近端收集的所有音频中,通过自适应滤波器消除远端传来的音频信号,再输出到对端,即完成了回声消除的目的,其中的关键点在于不断减小滤波器权值与回声路径信道权值的误差。
回声消除—自适应滤波器
自适应滤波算法一般分为两类:最小均方算法(LMS)和递推最小二乘(RLS)算法,RLS优势在于滤波效果更好,但LMS具有结构简单、计算复杂度低等优点,因此更多的研究也集中在LMS上,如归一化最小均方(NLMS),比例归一化最小均方(PNLMS)等在滤波性能、收敛速度等多方面对LMS算法进行优化和提高。同时,Android中也同样提供了AcousticEchoCanceler接口可以直接对声音进行回声消除,高端智能手机中也会内置专业声音处理芯片,在硬件层面更好的对回声进行消除。
- 多路声音混叠
游戏中小队语音会有多个玩家同时说话的情况,并且在玩家收听语音的同时,游戏的背景音也不可被去除,因此如何使多路语音清晰传递并且不会造成爆音是该场景下优质混音的评判标准。最简单的混音方式是简单的时域音频叠加,强度超过最大值时削峰为最大值来避免爆音,但人为削峰方式会在破坏音频信号的同时引入额外的噪音;另一种方式是多路声音线性叠加后取平均,该算法实质即把多路音频音量减小,但声音路数时多时少时,该方法会导致每路声音的音量忽大忽小,影响体验;因此,在实际使用场景中,更好的方式是根据每路语音的重要性,在混音时候给予相应的权重,以保证混音后各路音频的可识别性。
- 语音自动增益
自动增益控制技术在数据通信、语音处理等方面应用广泛,通信信号的信号幅度经常会发生较大波动,通过自动增益技术可以平滑信号幅度,进而提高通信质量。在移动游戏场景中,手机离人嘴部的距离可能依赖于玩家游戏时不同的外部环境而剧烈变化,因此,平滑每个人的声音大小及一个人在不同说话时间的声音大小对语音通话的质量关系重大。在多人实时语音通信的场景中,自动增益可在VAD处理后完成,并且门限值可按照多路声音混叠中的需求所设定,采用基于能量比较的语音自动增益算法即可实现较好的平滑音量的效果。
峰值AGC系统结构
- 流媒体传输协议
常见的流媒体协议包含RTP,RTMP,HLS,HTTP-FLV等,其中RTMP,HLS,HTTP-FLV由于在国内外CDN平台支持度更高,因此更常见于现今流行的各大直播平台。RTMP为Adobe专利协议,协议延迟较低,国内流行度很高,是最常用的推流协议;HLS为苹果提出的基于HTTP的流媒体传输协议,支持H5,可多平台多浏览器随意播放,但延迟较高;HTTP-FLV使用HTTP传输FLV格式文件,避免了Adobe协议绑架,延迟略优于RTMP。在实时性要求较高的视频监控、高清视频会议领域,RTP为更常用的协议。其相对于前三种基于TCP的流媒体传输协议相比最大的区别在于,RTP是基于UDP的协议的。由于UDP本身是无序的,因此RTP常常与RTCP协议公用,用于对RTP协议的包序等内容进行控制。同时也可以采用数据包拥塞控制协议(Datagram Congestion Control Protocol,DCCP)来自如的控制拥塞、延迟及数据质量。如网络视频会议领域市场占有率最高的Webex视频会议系统即采用SRTP(Secure RTP)协议作为其流媒体传输协议。而目前各大云厂商的互动语音视频产品也大多采用类RTP协议——基于UDP协议优化的私有协议——作为其实时流媒体传输协议,以达到降低延迟、带宽消耗的目的。
- 流媒体丢包处理
在移动设备所处的不稳定的网络环境下,外加游戏全球发行所带来的跨地域玩家间的网络质量问题,语音通信需要考虑在网络抖动丢包的情况下,仍然可以保证玩家间的正常通信。常见的流媒体丢包处理方案有:ARQ、FEC和交叉传输。在网络丢包严重的情况下,无法根据现有报文处理产生明确的语音信息,自动重传请求(ARQ, Automatic Repeat-reQuest)丢失报文的方式可以将大范围丢失报文重新传输,增加延迟但可以保证数据的有效性。前向纠错(FEC,Forward Error Correction)可以在少量丢包情况下,通过数据冗余而非数据重传,来保证数据的有效性,降低重传频率,减少延迟。算法的核心可类比为二元一次方程,需要两个方程即可以求出两个元的解。在FEC中,传输三个二元一次方程,因此在丢失一个方程的情况下,我们仍然可以求出解,达到可容忍部分包丢失而不影响信息有效性的目的。
FEC:在报文3丢失情况下,仍然可以依靠冗余报文恢复原始数据
此外,常规的数据包传输都是按照严格的顺序来发送的,如把一序列数据拆分为123,456,789三个报文发送,一旦一个报文丢失,会产生一整段信息的空白,但在流媒体环境下,大多数情况下单帧的丢失内容是完全可以通过前后帧的内容补偿而变得影响很小,因此若采用147、258、369的交叉传输方式封装报文,单个报文的丢失并不会对整体体验带来很大的影响。此外,在网络带宽允许但丢包不可控的服务期间跨地域传输情况下,单帧多包封装的传输方式也可以有效降低丢包导致频繁重传带来的延迟影响。
综上可知,仅从声音的处理、协议的选择及应对网络抖动方面,即需要专业的语音处理研发人员进行多项优化处理措施。然而,这仅仅是从理论层面的论述,在实际的游戏场景中,更重要的是在做到上述所有语音优化基础之上,不能影响游戏的核心玩法,即:1)需要对语音通讯所需的CPU、内存及网络资源进行不断优化降低;2)在面对市面上众多安卓设备时保持极低的Crash率并随时适配最新设备;3)支持常用的游戏引擎如Unity, Cocos。 此外,为保证语音全球服务的稳定性,架构设计的研发成本、多地域间专线连接成本及后期运维成本等问题都是游戏厂商自建游戏内语音服务的众多阻碍。
本文来自GAD,本文观点不代表GameLook立场,转载请联系原作者。