实现音频通话(纯音频)
更新时间: 2024/09/18 16:26:13
网易云信音视频通话产品的基本功能包括高质量的实时音频通话。当您成功初始化 SDK 之后,您可以简单体验本产品的基本业务流程。本文档为您展示音频通话提供的基本业务流程。
NERTC Unity SDK 纯音频版本目前支持音频通话与 RTC 房间管理、音频属性设置等音频相关方法,视频通话等功能请集成音视频版本 SDK。
前提条件
请确认您已完成以下操作:
- 创建应用并获取 App Key。
- 开通音视频通话 2.0 服务。
- 集成 SDK(纯音频),其中需要添加必要的设备权限和导出工程的权限。
实现音频通话
本节主要介绍如何使用 NERTC SDK 实现音频通话。
步骤一 初始化 SDK
在调用其他 API 前,您需要先初始化 SDK,具体步骤如下。
若您开发的是 Android 端的应用,则需要将 SDK 包的 AndroidManifest.xml
文件内所含的权限合并至 Assets/Plugins/Android/AndroidManifest.xml
中。
- 调用
RtcEngine.GetInstance
方法获取IRtcEngine
实例。 - 调用
IRtcEngine.Initialize
方法初始化 SDK,并在 UI 线程初始化Dispatcher
对象。
示例代码如下:
using nertc;
class MyDemo {
// 声明类成员
IRtcEngine rtcEngine = IRtcEngine.GetInstance();
// 创建 SDK 的示例函数,
private void InitSDK() {
//初始化Dispatcher,视屏回调纹理对象时需要用到,需要在UI线程调用
_ = Dispatcher.Current;
//初始化SDK引擎
var param = new RtcEngineContext();
param.appKey = "YOUR APPKEY";
param.logPath = Application.persistentDataPath;
param.logFileMaxSize = 200;
param.logLevel = RtcLogLevel.kNERtcLogLevelInfo;
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidJavaClass playerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = playerClass.GetStatic<AndroidJavaObject>("currentActivity");
param.context = activity;
#endif
int result = rtcEngine.Initialize(param);
if(result != RtcErrorCode.kNERtcNoError) {
//sdk 初始化失败
}
}
}
步骤二 添加监听事件
您可以注册 IRtcEngine
类中声明的事件来监听 SDK 可能触发的所有异步回调。
以监听OnJoinChannel
事件和OnLeaveChannel
事件为例,示例代码如下:
// 当加入房间成功后的回调
private void onJoinChannel(ulong cid, ulong uid, RtcErrorCode result, ulong elapsed) {
//进入房间事件回调结果
}
private void onLeaveChannel(RtcErrorCode result) {
// 离开房间事件回调结果
}
//事件绑定
private void BindEvents() {
//监听事件,其他事件类同此用法。
rtcEngine.OnJoinChannel = onJoinChannel;
rtcEngine.OnLeaveChannel = onLeaveChannel;
}
//事件解绑
private void UnbindEvents() {
//取消事件监听
rtcEngine.OnJoinChannel = null;
rtcEngine.OnLeaveChannel = null;
}
步骤三 加入房间
调用 IRtcEngine.JoinChannel
方法加入房间,相关参数说明如下表所示。
加入房间前,请确保已完成初始化相关事项。若您的业务中涉及呼叫邀请等机制,建议通过信令实现。
参数 | 说明 |
---|---|
token | 安全认证签名(NERTC Token)。
|
channel_name | 房间名称,长度为 1 ~ 64 字节。目前支持以下 89 个字符:a-z, A-Z, 0-9, space, !#$%&()+-:;≤.,>? @[]^_{|}~"。 设置相同房间名称的用户会进入同一个通话房间。 |
uid | 用户的唯一标识 id,房间内每个用户的 uid 必须是唯一的。 |
channelOptions | (可选)设置加入房间时的一些特定参数,包括权限密钥(permissionKey)、小队ID(teamID)、范围语音的模式(mode)和范围语音的接收范围(audibleDistance),具体使用方法请参见范围语音(纯音频版本)。 |
示例代码如下:
//加入房间
private void JoinChannel() {
// 初始化成功之后,加入房间 JoinChannel 需要填写参数:
int result = rtcEngine.JoinChannel(
"YOUR TOKEN",
"YOUR CHANNEL NAME",
12345678 //YOUR UID
);
if(result != (int)RtcErrorCode.kNERtcNoError) {
//加入房间失败
}
}
SDK 发起加入房间请求后,服务器会进行响应,您可以通过初始化时设置的 OnJoinChannel
回调监听本地用户加入房间的结果。
此外,您也可以调用 IRtcEngine.OnUserJoined
回调监听其它用户加入房间的通知。
步骤四 发布本地音频流(可选)
在 NERTC SDK 中,本地音频的采集发布和远端音频的订阅播放默认启动,正常情况下无需您主动干预。
此外,您也可以调用 IRtcEngine.EnableLocalAudio
方法开启或关闭音频设备,以控制本地音频流的发布。
示例代码如下:
private void EnableLocalAudio() {
int result = rtcEngine.EnableLocalAudio(true); // true启用音频设备,false则关闭音频设备
if(result != (int)RtcErrorCode.kNERtcNoError) {
//失败
}
}
步骤五 离开房间
调用 IRtcEngine.LeaveChannel
方法退出通话房间。
示例代码如下:
// 离开房间
private void LeaveChannel() {
// 离开房间
int result = rtcEngine.LeaveChannel();
if(result != (int)RtcErrorCode.kNERtcNoError) {
//失败
}
}
- 通过
IRtcEngine.OnLeaveChannel
回调可以监听本地用户退出房间的结果。 - 通过
IRtcEngine.OnUserLeft
回调可以监听远端用户离开房间的通知。
步骤六 销毁实例
当确定 App 短期内不再使用音视频通话实例时,可以调用 IRtcEngine.Release
方法释放对应的对象资源。
当此接口调用成功之后,若您想再次使用 SDK,需要重新调用初始化的相关接口。
示例代码如下:
// 销毁 SDK 的示例函数
private void OnApplicationQuit() {
// 释放引擎
int result = rtcEngine.Release(true);
if(result != RtcErrorCode.kNERtcNoError) {
//失败
}
}