本文介绍如何使用声网 Unity SDK 快速实现语音通话。
声网在 GitHub 上提供开源的实时语音通话示例项目。在实现相关功能前,你可以下载并查看源代码。
本节介绍如何实现语音通话。语音通话的 API 调用时序见下图:
根据场景需要,为你的项目创建语音通话的用户界面。若已有界面,可以直接查看获取设备权限(仅 Android 平台)或初始化 IRtcEngine。
在语音通话中,声网推荐你添加如下 UI 元素:
仅 Android 平台需要设置此步骤,其他平台可以直接查看初始化 IRtcEngine。
在 UNITY_2018_3_OR_NEWER 或以上版本中,Unity 不会主动向用户获取麦克风权限,需要用户调用 CheckPermission
方法获取权限。
#if(UNITY_2018_3_OR_NEWER)
using UnityEngine.Android;
#endif
void Start ()
{
#if(UNITY_2018_3_OR_NEWER)
permissionList.Add(Permission.Microphone);
#endif
}
private void CheckPermission()
{
#if(UNITY_2018_3_OR_NEWER)
foreach(string permission in permissionList)
{
if (Permission.HasUserAuthorizedPermission(permission))
{
}
else
{
Permission.RequestUserPermission(permission);
}
}
#endif
}
void Update ()
{
#if(UNITY_2018_3_OR_NEWER)
// 获取设备权限。
CheckPermission();
#endif
}
在调用其他声网 API 前,需要初始化 IRtcEngine
对象。
调用 GetEngine
方法,传入获取到的 App ID,即可初始化 IRtcEngine
。
你还可以根据场景需要,在初始化时注册想要监听的回调事件,如本地用户加入频道,及解码远端用户音频首帧等。
// 填入 App ID 并初始化 IRtcEngine。
mRtcEngine = IRtcEngine.GetEngine (appId);
// 注册 OnJoinChannelSuccessHandler 回调。
// 本地用户成功加入频道时,会触发该回调。
mRtcEngine.OnJoinChannelSuccessHandler = OnJoinChannelSuccessHandler;
// 注册 OnUserJoinedHandler 回调。
// SDK 接收到第一帧远端音频并成功解码时,会触发该回调。
mRtcEngine.OnUserJoinedHandler = OnUserJoinedHandler;
// 注册 OnUserOfflineHandler 回调。
// 远端用户离开频道或掉线时,会触发该回调。
mRtcEngine.OnUserOfflineHandler = OnUserOfflineHandler;
初始化 IRtcEngine
后,你就可以调用 JoinChannelByKey
方法加入频道。你需要在该方法中传入如下参数:
channelKey
:传入能标识用户角色和权限的 Token。可设为如下一个值:
channelKey
设为 ""。channelName
: 传入能标识频道的频道 ID。输入频道 ID 相同的用户会进入同一个频道。
uid
: 本地用户的 ID。数据类型为整型,且频道内每个用户的 uid
必须是唯一的。若将 uid
设为 0,则 SDK 会自动分配一个 uid
,并在 OnJoinChannelSuccessHandler
回调中报告。
// 加入频道。
mRtcEngine.JoinChannelByKey(null, channel, null, 0);
根据场景需要,如结束通话或关闭 App 时,调用 LeaveChannel
离开当前通话频道。
public void leave()
{
Debug.Log ("calling leave");
if (mRtcEngine == null)
return;
// 离开频道。
mRtcEngine.LeaveChannel();
}
离开频道后,如果你想退出应用或者释放 IRtcEngine
内存,需调用 Destroy
方法销毁 IRtcEngine
。
void OnApplicationQuit()
{
if (mRtcEngine != null)
{
// 销毁 IRtcEngine。
IRtcEngine.Destroy();
mRtcEngine = null;
}
}
你可以在声网提供的示例项目中查看完整的源码和代码逻辑。
你可以在 Unity 中运行此项目。当成功开始语音通话时,你可以听到自己和远端用户的声音。
使用声网 Unity SDK 开发过程中,你还可以参考如下文档: