实现音频通话(纯音频)
更新时间: 2023/02/27 16:29:11
网易云信音视频通话产品的基本功能包括高质量的实时音频通话。当您成功初始化 SDK 之后,您可以简单体验本产品的基本业务流程。本文档为您展示音频通话提供的基本业务流程。
NERTC Unity SDK 纯音频版本目前支持音频通话与 RTC 房间管理、音频属性设置等音频相关方法,视频通话等功能请集成音视频版本 SDK。
前提条件
请确认您已完成以下操作:
- 创建应用并获取 App Key。
- 开通音视频通话 2.0 服务。
- 集成 SDK(纯音频),其中需要添加必要的设备权限和导出工程的权限。
实现音频通话
本节主要介绍如何使用 NERTC SDK 实现音频通话。
1. 导入类
在您的工程中对应的 Activity 文件里添加以下代码,导入重要类。
using NERTC;
2. 获取 IRtcEngine 实例
在调用其他 API 前,您需要先执行 RtcEngine.GetInstance
获取 IRtcEngine
实例。
在 Android 平台,需要在调用初始化接口前,首先初始化 Java 环境。
class MyDemo {
IRtcEngine engine = RtcEngine.GetInstance();// 声明类成员
...
// 创建 SDK 的示例函数
private void InitSDK() {
#if UNITY_ANDROID && !UNITY_EDITOR
using(var playerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using(var activity = playerClass.GetStatic<AndroidJavaObject>("currentActivity"))
using(var utilityClass = new AndroidJavaClass("com.netease.nertc.unity.UnityUtility"))
{
utilityClass.CallStatic("initialize", new object[1] { activity });
}
#endif
...
}
3. 初始化事件监听器
您可以通过 NERtcCallback
类的 onJoinChannel
回调监听加入房间的结果,同时该回调会抛出当前通话房间的 channelId
与加入房间总耗时(毫秒)。
在 SDK 初始化并加入房间成功后,服务器会进行响应,并触发此回调。
请在初始化方法中传入原型 InnerRtcEngineEventCallback.JoinChannel
。
// 当加入房间成功后的回调
private void OnJoinChannel(
UInt64 cid, UInt64 uid,
UInt32 result, UInt64 elapsed) {
Debug.Log("OnJoinChannel Called");
}
// 创建 SDK 的示例函数
private void InitSDK() {
... // 接着上部分代码
RtcEngineEventHandler eventHandler = new RtcEngineEventHandler();
eventHandler.OnJoinChannel = OnJoinChannel; // 将回调函数注册到委托
...
}
4. 初始化引擎
您可以通过 InitSDK
方法创建实例函数,再调用 Initialize
方法初始化引擎。
// 创建 SDK 的实例函数
private void InitSDK() {
... // 接着上部分代码
NERtcEngineContext param = new NERtcEngineContext();
param.AppKey = "开通服获取到的 App Key";
param.LogDirPath = "日志路径";
param.LogFileMaxSizeKbytes = 2048;
param.LogLevel = 5;
param.EventHandler = eventHandler; // 将事件回调赋值给 param
int ret = engine.Initialize(param); // 初始化,返回值保存到 ret
if (ret == 0) {
// 如果初始化成功
}
...
}
5. 加入房间
调用 JoinChannel
方法加入房间。
如果执行顺利,则会触发已注册的 OnJoinChannel
方法。您也可以通过 InnerRtcEngineEventCallback.OnUserJoined
回调监听其它用户加入房间的通知。
- 加入房间前,请确保已完成初始化相关事项。若您的业务中涉及呼叫邀请等机制,建议通过信令实现。
- 在 NERTC SDK 中,本地音频的采集发布和远端音频订阅播放是默认启动的,正常情况下无需开发者主动干预。
参数说明:
参数 | 说明 |
---|---|
token | 安全认证签名(NERTC Token)。可设置为:
|
channel_name | 房间名称,长度为 1 ~ 64 字节。目前支持以下 89 个字符:a-z, A-Z, 0-9, space, !#$%&()+-:;≤.,>? @[]^_{|}~"。 设置相同房间名称的用户会进入同一个通话房间。 |
uid | 用户的唯一标识 id,房间内每个用户的 uid 必须是唯一的。 |
示例代码如下:
// 创建 SDK 的示例函数
private void InitSDK() {
... // 接着上部分代码
if (ret == 0) {
// 如果初始化成功
// 加入房间 JoinChannel 需要填写参数:
// token: String
// channel id: String
// user id: unsigned long
engine.JoinChannel("token", "channel id", 12345678);
}
...
}
6. 离开房间
调用 LeaveChannel
方法退出通话房间。
- 通过
InnerRtcEngineEventCallback.OnLeaveChannel
回调可以监听当前用户退出房间的结果。 - 通过
InnerRtcEngineEventCallback.OnUserLeft
回调可以监听其它用户离开房间的通知。
示例代码如下:
// 销毁 SDK 的示例函数
private void ReleaseSDK() {
int ret = engine.LeaveChannel(); // 离开房间
Debug.LogFormat("Leave channel with ret{0}", ret);
}
7. 销毁实例
当确定 App 短期内不再使用音频通话实例时,您可以通过 InitSDK
方法创建销毁 SDK 的实例函数,再调用 Release
方法释放对应的对象资源。
// 销毁 SDK 的示例函数
private void ReleaseSDK() {
...
engine.Release(true); // 释放引擎
}