前情提要
在一些以多人在线生存为主要玩法的游戏中,玩家们通常彼此之间不认识,比如说Minecraft服务器,如果为了增强玩家们的互动体验,把所有玩家都拉到一个语音频道(如YY),难免会有些隔阂。而且语音频道中太多人了也会影响通话体验。
于是,我前段时间希望在我的世界生存服务器内添加一款语音通话插件,该插件有以下功能:
- 语音通话
- 近场语音通话(只有相隔较近的玩家才能听到彼此的声音)
- 数据安全(客户端不会知道远处玩家的坐标)
- 听声辨位(客户端模拟玩家之间的方位来处理音频效果)
- 环境效果(模拟游戏中所处的环境对音频进行处理,比如说山洞中有回音)
是不是有点意思?所有的玩家都在一个频道中,当玩家们聚集在游戏中的一个区域(比如说开始广场),他们能听到嘈杂的交流声…当玩家组队生存时,他们在大部分时间里只能听到队友的声音。
实现原理
实现的原理比较简单,游戏通过插件向中继服务器实时上报所有玩家的位置信息,中继服务器对所有玩家进行方位计算和环境计算,将计算结果推送给进入了频道的玩家客户端,再由客户端配合语音SDK实现加入频道、语音通讯、听声辨位等功能。
总体流程无法表达细节,特别是有挺多地方需要鉴权,就不一一写出了,有兴趣可以私聊我了解。
使用的技术
技术 | 用途 |
---|---|
spigot | 游戏服务端及插件宿主 |
mysql | 用户绑定网站用户与游戏角色(一个网站用户有可能有多个游戏角色) |
websocket | http长链接减低延时 |
php | 网站及服务后台 |
java | 游戏插件 |
frp | 游戏服务器部署在内网高性能电脑上,需要穿透出去 |
electronjs | 前端框架 |
react | 前端渲染框架 |
http | 前端采用http网页登录方式,便于各位服主接入自家系统 |
增强您的游戏体验
大声公实时获取您的角色在游戏中与其他玩家的相对位置,将语音通话的音频进行方位和音效等后期处理,可以让你随时掌握队友或其他人的大致方位。
#:特殊的音频处理取决于游戏的服主是否开启此功能。
数据安全
大声公采用云端计算的方式计算玩家之间的相对位置,在模拟通讯距离的情况下下发至客户端,不会泄露玩家坐标。
#:模拟通讯距离由服主进行设置。
稳定高效
大声公采用业内成熟的语言通话方案,通话引擎自带人声增强、低码高清等功能,在低质量网络、嘈杂环境下也能保证清晰的通话效果,自研的数据中继服务也能保证低延时的游戏反馈体验。
#:从玩家操作人物转动到声音空间改变所需的时间在100~500ms之间。
支持自定义登录方式
大声公采用网页登录方案,登录页面由游戏服务方提供,支持多种登录渠道,灵活高效。