多人音频通话
本章节介绍多人实时音频通话的相关功能。多人实时音频通话顾名思义是支持多个人同时进行实时音频通话,可以选择纯音频模式,或音视频模式。在这里需要明确几个概念: 房间:房间就是用户进行多人实时音视频通话的地方,房间以房间名称为唯一标识,多人房间需要先创建成功后才能加入,当所有用户都离开房间后,可以复用该房间名重新创建。 互动者:互动者是指在多人通话时可以参与互动,可以发言的人,这些用户可以发送上行的音频或视频数据,也可以接收其他互动者下行的音频或视频数据。 观众:观众是指在多人通话时只可以观看的人,没有发言的权限,这些用户只可以接收互动者下行的音频或视频数据,不可以发送上行音频或视频数据。 其中互动者和观众身份可以随时切换。
Unity SDK 目前仅支持音频通话
多人音频通话流程
预定会议
API介绍
根据房间名,创建一个多人会议房间。创建后的房间需要有人加入后才会实际产生话单。
API原型
public static void CreateRoom(string room_name, string custom_info, NIMCreateRoomJsonEx createRoomInfo, NIMVChatOpt2Handler cb)
File:NIMVChatAPI.cs
参数说明
参数 | 类型 | 说明 |
---|---|---|
room_name | string | 房间名 |
custom_info | string | 自定义信息,所有加入房间的成员都会收到此信息 |
json_extension | NIMCreateRoomJsonEx | json封装类,见NIMCreateRoomJsonEx |
cb | NIMVChatOpt2Handler | 回调函数 |
返回值说明
无返回值。
示例
public void OnCreateRoomCallback(int code,long channel_id,string json_extension)
{
}
void TestCreateRoom(string room_name)
{
VChatAPI.CreateRoom(room_name, "", null, OnCreateRoomCallback);
}
特殊说明
返回错误码中417说明已经存在同名的房间,如果是目标房间议,则可以直接走后面流程加入此房间。如果不是希望创建的目标房间,则需要重新设定房间名后再创建。
加入会议
API介绍
加入一个房间。所有音频相关通话都是互斥,只允许存在一个,并且加入前必选预先创建房间。
API原型
public static bool JoinRoom(NIMVideoChatMode mode, string room_name, NIMJoinRoomJsonEx joinRoomInfo, NIMVChatOpt2Handler cb)
File:NIMVChatAPI.cs
参数说明
参数 | 类型 | 说明 |
---|---|---|
mode | NIMVideoChatMode | 音视频通话类型,目前仅支持音频通话,见NIMVChatDef.cs |
room_name | string | 房间名 |
joinRoomInfo | NIMJoinRoomJsonEx | Json封装,音视频通话的扩展参数设置 |
cb | NIMVChatOpt2Handler | 结果回调 |
示例
public void OnJoinRoomCallback(int code,long channel_id,string json_extension)
{
}
void TestJoinRoom(string room_name)
{
VChatAPI.JoinRoom(NIMVideoChatMode.kNIMVideoChatModeAudio, room_name, null, OnJoinRoomCallback);
}
离开会议
API介绍
需要在结束时调用,用于底层挂断和清理数据。
API原型
*public static void End(string jsonExtension="")
File:NIMVChatAPI.cs
参数说明
参数 | 类型 | 说明 |
---|---|---|
jsonExtension | string | 无效参数 |
示例
VChatAPI.End();//断开通话
用户进出会议通知
API介绍
在连接建立后,如果已有成员在通话中,或新进来的成员都会通过此回调通知。有成员离开也通过此回调,并告诉是正常离开还是超时离开,超时离开代表本地超时未收到对端数据,可能对方网络异常也可能是本地网络异常。
API原型
public delegate void onSessionPeopleStatusHandler(long channel_id,string uid, int status)
File:NIMVChatAPI.cs
参数说明
参数 | 类型 | 说明 |
---|---|---|
channel_id | long | 频道id |
uid | string | 成员uid |
status | int | 状态码,对应NIMVideoChatSessionStatus |
示例
NIMVChatSessionStatus vchat_session_;
/// 成员状态通知
vchat_session_.onSessionPeopleStatus = OnSessionPeopleStatusCallback;
public void OnSessionPeopleStatusCallback(long channel_id, string uid, int status)
{
}
VChatAPI.SetSessionStatusCb(vchat_session_);
会议发生了错误
API介绍
当房间发生异常,统一返回连接错误信息,和开始时连接成功及连接失败是同一个回调函数。
API原型
public delegate void onSessionConnectNotifyHandler(long channel_id, int code,string record_file,string video_record_file,long chat_time, ulong chat_rx, ulong chat_tx);
File:NIMVChatDef.cs
参数说明
参数 | 类型 | 说明 |
---|---|---|
channel_id | long | 频道id |
code | int | 结果状态 |
record_file | string | 录制音频文件名(服务器开启录制时有效) |
video_revord_file | 录制视频文件名(服务器开启录制时有效) | |
chat_time | long | 通话本地时长,code为1001有效 |
chat_rx | ulong | 下行数据量 code为1001有效 |
chat_tx | ulong | 上行数据量 code 为1001有效 |
- NIMVChatConnectErrorCode
枚举定义 | 值 | 说明 |
---|---|---|
kNIMVChatConnectDisconn | 0 | 断开连接 |
kNIMVChatConnectStartFail | 1 | 启动失败 |
kNIMVChatConnectTimeout | 101 | 超时 |
kNIMVChatConnectMeetingModeError | 102 | 会议模式错误 |
kNIMVChatConnectSuccess | 200 | 成功 |
kNIMVChatConnectInvalidParam | 400 | 错误参数 |
kNIMVChatConnectDesKey | 401 | 密码加密错误 |
kNIMVChatConnectInvalidRequst | 417 | 错误请求 |
kNIMVChatConnectServerUnknown | 500 | 服务器内部错误 |
kNIMVChatConnectLogout | 1001 | 退出 |
kNIMVChatChannelStartFail | 11000 | 发起失败 |
kNIMVChatChannelDisconnected | 11001 | 断开连接 |
kNIMVChatVersionSelfLow | 11002 | 本人SDK版本太低不兼容 |
kNIMVChatVersionRemoteLow | 11003 | 对方SDK版本太低不兼容 |
示例
NIMVChatSessionStatus vchat_session_;
/// 链接通知
vchat_session_.onSessionConnectNotify = OnSessionConnectNotifyCallback;
public void OnSessionControlNotifyCallback(long channel_id, string uid, int type)
{
}
VChatAPI.SetSessionStatusCb(vchat_session_);