进入/离开房间
房间创建完成后,客户端需要通过进入/离开房间接口来完成整个音视频会话的生命周期管理。本节介绍 Web SDK 中与「进入、离开、请出、掉线与房间结束」相关的典型用法。
1. 进入房间
进入房间前需满足以下条件:
- 已调用登录接口并登录成功;
- 已获取到有效的房间号(例如通过 CRVideo_CreateMeeting2 创建,或业务服务器下发)。
进入房间使用接口 CRVideo_EnterMeeting3:
var meetID = 12345678;
CRVideo_EnterMeeting3(meetID, cookie);
房间内显示昵称在登录时通过 CRVideo_Login / CRVideo_LoginByToken 的 nickname 参数设置。
进入结果通过 CRVideo_EnterMeetingRslt 回调返回:
CRVideo_EnterMeetingRslt.callback = function(sdkErr, cookie){
if (sdkErr == 0){
// 入会成功;此后方可调用房间内能力(音视频、设备管理、屏幕共享、录制/直播等,各专题文档均有说明)
} else {
// 入会失败,根据错误码提示用户,例如房间不存在、房间已结束等
}
}
当本端进入房间成功后,房间内其它成员会收到 CRVideo_UserEnterMeeting 通知,可用于更新房间成员列表:
CRVideo_UserEnterMeeting.callback = function(UID){
// UID 为进入房间的用户 ID
}
相关 API 参考:
2. 主动离开房间
当用户主动退出房间时,调用 CRVideo_ExitMeeting 即可:
CRVideo_ExitMeeting();
接口说明要点:
- 调用
CRVideo_ExitMeeting不需要等待服务器响应,即使网络较差或已断网,也视为本端已经离会; - 离开房间后将不再收到任何房间内的消息;
- 如果离会时网络正常,房间内其他成员会立刻收到 CRVideo_UserLeftMeeting 通知;
- 如果离会时网络异常,服务器在内部握手超时后同样会下发
UserLeftMeeting通知。
房间内其他成员侧可在回调中更新 UI:
CRVideo_UserLeftMeeting.callback = function(UID, reason){
// reason 为离开原因,如 exit(正常退出)、refresh(刷新页面)等
}
若希望彻底结束房间本身(而不仅是某个成员离开),请参考 创建/销毁房间 中的销毁或结束房间。
相关 API 参考:
3. 请出房间
房间内具备相应操作权限的用户(通常是主持人/管理员)可以将其他成员请出房间,使用接口 CRVideo_Kickout:
CRVideo_Kickout(UID).then(function(resObj){
// 请出成功,resObj 含 errCode、userID
}).catch(function(errObj){
// 请出失败,errObj 含 errCode、errDesc
});
被请出的一方及其他成员会收到 CRVideo_UserLeftMeeting 通知,其中 reason 为 kick,可用于定向提示:
CRVideo_UserLeftMeeting.callback = function(UID, reason){
if (reason == "kick"){
// 告知用户:您已被管理员请出房间
}
}
相关 API 参考:
4. 掉线离开房间
除主动退会和被请出外,用户也可能因为网络问题等原因被动与服务器断开连接。此时 SDK 会触发 CRVideo_LineOff 回调:
CRVideo_LineOff.callback = function(sdkErr){
// 可根据 sdkErr 显示不同的提示信息,例如:网络异常
}
断开后,本端已不在房间中,且处于未登录状态。如需恢复会话,需再次调用 CRVideo_Login / CRVideo_LoginByToken,登录成功后再调用 CRVideo_EnterMeeting3 进入房间。
相关 API 参考:
5. 房间被结束
当房间被结束或销毁(例如调用 CRVideo_StopMeeting、CRVideo_DestroyMeeting)时,所有仍在房间中的成员都会收到 CRVideo_MeetingStopped 通知:
CRVideo_MeetingStopped.callback = function(){
// 典型处理:
// 1. 关闭本地音视频设备、停止屏幕共享
// 2. 切换到「会议已结束」界面或返回上一级页面
// 3. 清理与房间相关的 UI 状态和业务数据
}
收到房间结束通知后,无需再调用 CRVideo_ExitMeeting,因为房间已经不存在。如需继续音视频沟通,可由业务端重新创建新房间并再次调用 CRVideo_EnterMeeting3 进入。
相关 API 参考: