在做Unity的3D虚拟仿真这一块的时候,有机会接触到实时语音这一块,偶然的情况下发现了声网Agora Video SDK for Untiy,出于好奇,尝试在 Unity 中构建跨平台的实时视频聊天场景。

要澄清一下SDK version 3.0.1的功能与Agora Native SDK 对齐,支持与Web互通,能够支持iOS/Android/Windows/macOS多种平台,兼容性比之前部分2.0的更好,性能更强大。

准备工作

开发和测试

  • 创建新项目

1.打开 Unity -> 2.新建新项目 -> 3.命名Agora Video -> 4.Unity Asset Store搜索“Agora Video SDK” -> 5.导入Agora Video SDK for Unit,出现提示时,请确保选中列表中的所有Assets。

  • 创建场景

创建一个新场景,根据自己的需求命名,比如 SceneHome,然后双击该场景在 Editor 视图中将其打开。应用被加载后,SceneHome 将是用户看到的首个画面。我们首先从场景中删除现有的 Camera 和 Light,然后我们添加一个 Canvas,将 Editor 视图切换成 2D,添加调整 UI 界面,包括简单的功能描述,JoinButton按钮,通道名和 APPID 信息。然后添加一个相机调整相应的角度,添加一个空节点,命名为 GameController,在上面添加绑定脚本 TestHome。需要一个按钮来触发应用执行“加入频道”的动作,为此我们添加一个按钮并将其命名为 JoinChannel,并为其添加标签。我们还需要让用户能够输入其频道的名称,为此我们创建一个文本输入(InputFiled),将其命名为 ChannelName。再创建一个场景,命名为 SceneHelloVideo,即加入后调整的视频通信场景,简单添加一个 Cube3D 模型和一个 Quad 屏幕模型,用于实时显示视频画面,然后和上一个场景一样,搭建简单的 UI 界面,LeaveButton 离开返回按钮。VersionText 当前的版本说明。然后调整场景相机和灯光到合适的效果。

  • 处理按钮事件

在设置场景的过程中,我们创建了两个按钮(JoinButton 和 LeaveButton),绑定到指定的按钮事件上面进行响应调用。ButtonHandler 脚本功能用来专门处理按钮事件,通过当前的按钮名称,查找 GameController对象,然后调用下面的响应功能。

  • 集成 Agora SDk

需要注意的是创建的第一个变量是 appId,用来保存我们的 Agora AppID。复制你的 AppID 并将其粘贴到 appID 的值中。我们还需要创建一个变量来保存远端视屏流的 uid。

官网注册的 ID 信息,项目功能必须有相应的 AppID 才能调用 SDK 的接口功能。

  • 构建和测试

现在我们可以开始测试我们的应用了,打开 Unity 的“Build Settings”,把 SceneHome 和 ChatScene 拖到“Build Settings”对话框的 Scene 列表中。在构建和部署我们的应用之前,我们需要对每个平台的播放器设置进行一些调整。我们需要更新 Bundle ID,并提供一些有关摄像头和麦克风使用情况的描述文本(启用权限提示)。

同样的,我们这个版本也支持 Windows 和 macOS,如图所示。

测试体会

体验测试了 Agora 的视频通话功能后,对 Agora 的产品产生了更大的兴趣,了解该产品主要应用在语音和视频通信方面,同时看到还有关于图像识别和实时直播等相关功能,后续可以更深入地了解学习相关的 SDK,同时这块和 unity 也紧密结合,在以后虚拟仿真的项目工作中,也可以尝试把一些相匹配的功能整合成相应的功能模块,或者基于 unity 和 Agora SDK 开发一些有趣的互动小游戏。

说一下测试完 Agora SDK 我觉得的几个优势:

  • 易用性高,稳定性强。Agora SDK 提供了很方便的实时语音解决方案,不仅为相关开发者节约了很多时间,而写从测试的结果来看,语音和视频的质量都很好,实时性不错,相对可靠。
  • 跨平台兼容性好,可以满足多平台的开发 Windows/Android/iOS/MacOS 等,兼容性也意味着应用更为广泛,我们在做虚拟仿真项目的时候会考虑到这个一块,近期正好有相关的需求,会进一步测评 SDK 的兼容性。
  • SDK 资源包比较轻量化,轻量化的数据包在大型的开发项目中很受欢迎,特别是像我们做虚拟仿真的时候,3D 模型的数据本来就比较大,如果再加上语音和视频的处理也非常大的话,一方面,开发时系统卡顿,很吃力,会浪费很多的时间资源,另一方面,在客户的平台上应用时,也会造成一些额外的硬件开销。轻量化的数据接口能够帮助我们很好的解决这个问题。
  • 数据接口简便清晰,便于开发应用。在测试的整个过程,我们觉得数据接口很清晰,逻辑结构很明了。

也自己提一些改善性建议:

  • 功能模块不够齐全。把 SDK 导入 Unity 发现只支持语音和视频,相对功能比较少,在大型开发过程中会有局限性,建议后面会集成更多的交互组件。
  • 程序结构功能可以更完善。AI 人工智能 VR,AR 是未来的趋势,顺应潮流,可以增加相关结构功能,比如智能语音识别,智能图像识别。特别是像 Unity 很适合游戏的开发,如果能在游戏的开发过程中加入某些人性化,智能化的语音和图像交互功能,会更能吸引相关的开发应用者。
  • 提供更开放的开发资源。我们在声网可以找到我们想要的资源,但是在开发过程中需要绑定 ID 才能继续开发,但是有免费时限,有些测试项目的开发时间比较漫长,周期需要比较长。也许,免费体验周期延长可以给开发者,特别是个人开发者提供更好的开发感受,这样也会有越来越多的开发者能够参与进来,从而声网的 SDK 也能得到更广泛的应用。

备注

  • 升级 SDK

a) 从 2.9.1 之前的版本:

根据以下 SDK 目录树删除文件:bit.ly/3eO16Jy

清理 Unity 资产缓存(稍后说明)

b) 从 2.9.x 版本到 3.0.x 版本:

在 AgoraEngine 下删除整个文件树导入新的 SDK

  • 如何清理旧的 Unity 资产缓存

请参考此文档链接以找到缓存文件夹的位置:

docs.unity3d.com/Manual

  • 安卓打包过程的配置

a) 安卓需要配置 manfiest 文件

b) 获取摄像机权限 <uses-permission android:name="android.permission.CAMERA" />

c) 获取声音配置修改权限 <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

其他参考资源