多人音频通话

本章节介绍多人实时音频通话的相关功能。多人实时音频通话顾名思义是支持多个人同时进行实时音频通话,可以选择纯音频模式,或音视频模式。在这里需要明确几个概念: 房间:房间就是用户进行多人实时音视频通话的地方,房间以房间名称为唯一标识,多人房间需要先创建成功后才能加入,当所有用户都离开房间后,可以复用该房间名重新创建。 互动者:互动者是指在多人通话时可以参与互动,可以发言的人,这些用户可以发送上行的音频或视频数据,也可以接收其他互动者下行的音频或视频数据。 观众:观众是指在多人通话时只可以观看的人,没有发言的权限,这些用户只可以接收互动者下行的音频或视频数据,不可以发送上行音频或视频数据。 其中互动者和观众身份可以随时切换。

Unity SDK 目前仅支持音频通话

多人音频通话流程

sequenceDiagram participant Meeting participant 成员 participant ... Meeting->>Meeting:创建多人房间(nim_vchat_create_room) 成员->>Meeting:加入多人房间(nim_vchat_join_room) Meeting->>成员: 通话建立(nim_vchat_cb_func kNIMVideoChatSessionTypeConnect code = 200) Meeting->>成员:其他成员进出房间通知(nim_vchat_cb_func kNIMVideoChatSessionTypePeopleStatus) 成员->>Meeting:离开多人房间(nim_vchat_end) Meeting->>成员: 通话断开(nim_vchat_cb_func kNIMVideoChatSessionTypeConnect code != 200)

预定会议

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有效
枚举定义 说明
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_);