音视频通话

进入/离开房间

房间创建完成后,客户端需要通过进入/离开房间接口来完成整个音视频会话的生命周期管理。本节介绍 Web SDK 中与「进入、离开、请出、掉线与房间结束」相关的典型用法。

1. 进入房间

进入房间前需满足以下条件:

  • 已调用登录接口并登录成功;
  • 已获取到有效的房间号(例如通过 CRVideo_CreateMeeting2 创建,或业务服务器下发)。

进入房间使用接口 CRVideo_EnterMeeting3

var meetID = 12345678;
CRVideo_EnterMeeting3(meetID, cookie);

房间内显示昵称在登录时通过 CRVideo_Login / CRVideo_LoginByTokennickname 参数设置。

进入结果通过 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 通知,其中 reasonkick,可用于定向提示:

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_StopMeetingCRVideo_DestroyMeeting)时,所有仍在房间中的成员都会收到 CRVideo_MeetingStopped 通知:

CRVideo_MeetingStopped.callback = function(){
    // 典型处理:
    // 1. 关闭本地音视频设备、停止屏幕共享
    // 2. 切换到「会议已结束」界面或返回上一级页面
    // 3. 清理与房间相关的 UI 状态和业务数据
}

收到房间结束通知后,无需再调用 CRVideo_ExitMeeting,因为房间已经不存在。如需继续音视频沟通,可由业务端重新创建新房间并再次调用 CRVideo_EnterMeeting3 进入。

相关 API 参考