【技术博客】Unity多人语音聊天技术调研 | week8

Unity 多人语音聊天技术调研

Unity 端

使用 UniVoice 库通过 WebSocket 实现。重要文件如下:

GroupVoiceCallSample.cs

InitializeAgent() 函数中,首先调用 agent = new InbuiltChatroomAgentFactory("ws://167.71.17.13:11000").Create(); 这个工厂函数创建 agent,工厂函数接收 WebSocket 服务器地址作为参数。

接下来定义各种事件侦听器的函数。

之后是 Update() 函数,该函数会在刷新每帧时调用,用于显示音频频谱。

InbuiltAudioOutput.cs

Update() 函数将到来的音频段存储于缓冲区,Feed() 函数将其播放于音频源上。已播放的缓冲区也会被清除。还包含音频缓冲区的类。AudioClip 是 Unity 自带的类。传输的音频是采样得到的原始数据,无需编解码。

ChatroomAgent.cs

该类代表聊天室中的实体。

ChatroomAudioDTO.cs

该结构体即为通过网络传送的音频,除属性外,核心是个 float[] 数组。

AirPeerUniVoiceNetwork.cs

该类为客户端,负责通过网络接收/发送音频数据包。有若干事件侦听器负责响应相应事件。

服务端

服务端使用 WebSocket,理论上任意支持 WebSocket 的服务端均可实现。目前 airsignal 项目是使用 node.js 实现的。相关文件如下:

INetwork.js

工具文件,包含各种数据类型转换等。

server.js

类似于 main() 函数,主程序的入口。

WebSocketNetworkServer.js

基本就是写了一些事件侦听器,没有处理数据,按原样转发给其它客户端。

posted @ 2022-05-05 23:32  头发茂盛队  阅读(579)  评论(0编辑  收藏  举报