多人音视频通话

本章节介绍多人实时音视频通话的相关功能。多人实时音视频通话顾名思义是支持多个人同时进行实时音视频通话,可以选择纯音频模式,或音视频模式。在这里需要明确几个概念:

多人音视频通话流程

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介绍

根据房间名,创建一个多人会议房间。创建后的房间需要有人加入后才会实际产生话单。其中webrtc标记支持webrtc互通,无需要不要打开。

API原型

参数说明

参数 类型 说明
room_name string 房间名
custom_info string 自定义信息,所有加入房间的成员都会收到此信息
json_extension string Json string 扩展,kNIMVChatWebrtc有效
cb function 回调函数
参数 类型 说明
room_name string 房间名
custom_info string 自定义信息,所有加入房间的成员都会收到此信息
createRoomInfo Json Json string 扩展
cb function 回调函数
参数 类型 说明
room_name string 房间名
custom_info string 自定义信息,所有加入房间的成员都会收到此信息
json_extension string Json string 扩展,kNIMVChatWebrtc有效
cb function 回调函数
user_data void* 无效扩展

返回值说明

无返回值。

示例

特殊说明

返回错误码中417说明已经存在同名的房间,如果是目标房间议,则可以直接走后面流程加入此房间。如果不是希望创建的目标房间,则需要重新设定房间名后再创建。

加入会议

API介绍

加入一个房间。所有音视频相关通话都是互斥,只允许存在一个,并且加入前必选预先创建房间。

API原型

参数说明

参数 类型 说明
mode enum 音视频通话类型,见nim_vchat_def.h
room_name string 房间名
json_extension(C/C++) string Json string 扩展,音视频通话的扩展参数设置
joinRoomInfo(C#) object C接口中json_extension的封装类,见NIMJoinRoomJsonEx
cb function 结果回调
user_data(C) void* APP的自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理!

返回值说明

返回一个bool类型值。接口调用成功返回true,否则返回false。失败一般是由于已存在通话,无法重复发起。

示例

离开会议

API介绍

需要在结束时调用,用于底层挂断和清理数据。

API原型

参数说明

需要带上加入时填写的session_id。

参数 类型 说明
json_extension string Json string 扩展,kNIMVChatSessionId
参数 类型 说明
jsonExtension string Json string 扩展,kNIMVChatSessionId
参数 类型 说明
json_extension string Json string 扩展,kNIMVChatSessionId

返回值说明

无返回值。

示例

用户进出会议通知

API介绍

在连接建立后,如果已有成员在通话中,或新进来的成员都会通过此回调通知。有成员离开也通过此回调,并告诉是正常离开还是超时离开,超时离开代表本地超时未收到对端数据,可能对方网络异常也可能是本地网络异常。

API原型

参数说明

参数 类型 说明
channel_id long 频道id
uid string 对方id
status int 成员状态,离开、加入等
参数 类型 说明
type enum 回调类型kNIMVideoChatSessionTypePeopleStatus
channel_id int64 频道id
code int 状态码,对应NIMVideoChatSessionStatus
json_extension string Json string 扩展,返回kNIMVChatUid,如果是离开带kNIMVChatStatus对应NIMVideoChatUserLeftType
user_data void* 注册回调时的APP自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理

示例

会议发生了错误

API介绍

当房间发生异常,统一返回连接错误信息,和开始时连接成功及连接失败是同一个回调函数。

API原型

参数说明

参数 类型 说明
channel_id long 频道id
code int 状态码见NIMVChatConnectErrorCode
record_file string 服务器录制的音频文件名
video_record_file string 服务器录制的视频文件名
参数 类型 说明
type enum 回调类型kNIMVideoChatSessionTypeConnect
channel_id int64 频道id
code int 错误码NIMVChatConnectErrorCode,200代表连接成功
json_extension string Json string 扩展,如果成功返回 kNIMVChatVideoRecordFile和kNIMVChatRecordFile
user_data void* 注册回调时的APP自定义用户数据,SDK只负责传回给回调函数cb,不做任何处理
枚举定义 说明
kNIMVChatConnectDisconn 0 断开连接
kNIMVChatConnectStartFail 1 启动失败
kNIMVChatConnectTimeout 101 超时
kNIMVChatConnectMeetingModeError 102 会议模式错误
kNIMVChatConnectRtmpModeError 103 非rtmp用户加入rtmp频道
kNIMVChatConnectRtmpNodesError 104 超过频道最多rtmp人数限制
kNIMVChatConnectRtmpHostError 105 已经存在一个主播
kNIMVChatConnectRtmpCreateError 106 需要旁路直播, 但频道创建者非主播
kNIMVChatConnectSuccess 200 成功
kNIMVChatConnectLayoutError 208 主播自定义布局错误
kNIMVChatConnectInvalidParam 400 错误参数
kNIMVChatConnectDesKey 401 密码加密错误
kNIMVChatConnectInvalidRequst 417 错误请求
kNIMVChatConnectServerUnknown 500 服务器内部错误
kNRTCChatJoinChannelBusy 9104 通道繁忙
kNIMVChatConnectLogout 1001 退出
kNIMVChatChannelStartFail 11000 发起失败
kNIMVChatChannelDisconnected 11001 断开连接
kNIMVChatVersionSelfLow 11002 本人SDK版本太低不兼容
kNIMVChatVersionRemoteLow 11003 对方SDK版本太低不兼容
kNRTCChatLocalChannelClosed 11004 通道被关闭
kNRTCChatLocalChannelKicked 11005 账号被踢

示例