基本操作
创建/加入房间
调用 RCRTCEngine
下的 joinRoom
方法加入房间,如果该房间之前不存在,则会在调用时自动创建并加入。
提示
每个房间在创建之初,会由融云服务生成一个在用户全网唯一的 SessionId,可用于后台业务查询或与融云进行问题沟通。当房间内的所有人退出或被服务器判定掉线后,此 Session 结束。之后即便再用相同的 RoomId 创建房间,SessionId 也会更新为不同值。
会议模式下,推荐使用不带 RCRTCRoomConfig
的接口 joinRoom(String roomId, IRCRTCResultDataCallback callBack)
:
RCRTCEngine.getInstance().joinRoom(roomId, new IRCRTCResultDataCallback<RCRTCRoom>() {
@Override
public void onSuccess(RCRTCRoom data) {
// 成功后的逻辑处理 ...
}
@Override
public void onFailed(RTCErrorCode errorCode) {
// 由于 SDK 未初始化,网络异常等原因,造成的加入房间失败后的逻辑处理 ...
// 失败原因参考 code 的具体含义。
// 处理逻辑可以是过段时间重新加入,或给用户弹通知等。
}
});
直播模式下,推荐使用带 RCRTCRoomConfig
的接口 joinRoom(String roomId, RCRTCRoomConfig config, IRCRTCResultDataCallback<RCRTCRoom> callBack)
:
// 创建房间配置对象,设置房间类型为音视频直播,角色身份为主播。
RCRTCRoomConfig config = Builder.create()
.setRoomType(RCRTCRoomType.LIVE_AUDIO_VIDEO)
.setLiveRole(RCRTCLiveRole.BROADCASTER)
.build();
RCRTCEngine.getInstance().joinRoom(roomId, config, new IRCRTCResultDataCallback<RCRTCRoom>() {
@Override
public void onSuccess(RCRTCRoom data) {
// 成功后的逻辑处理 ...
}
@Override
public void onFailed(RTCErrorCode errorCode) {
// 由于 SDK 未初始化,网络异常等原因,造成的加入房间失败后的逻辑处理 ...
// 失败原因参考 code 的具体含义。
// 处理逻辑可以是过段时间重新加入,或给用户弹通知等。
}
});
参数说明如下:
参数 | 类型 | 说明 |
---|---|---|
roomId | 字符串 | 房间唯一 ID。支持大小写英文字母、数字、部分特殊符号 + = - _ 的组合方式 最长 64 个字符。 |
config | RCRTCRoomConfig | 房间配置。参见表格下方对 RCRTCRoomConfig 的说明。 |
callBack | IRCRTCResultDataCallback<RCRTCRoom> | 加入房间回调 |
RCRTCRoomConfig
为房间配置,包含以下设置:
setRoomType
: 指定房间类型setLiveRole
: 指定直播角色。仅在setRoomType
设置为LIVE_AUDIO_VIDEO
(音视频直播模式)或LIVE_AUDIO
(纯音频直播模式)时,setLiveRole
才会生效。setUserDatas
: 用户属性扩展信息。用户加入房间时可携带的扩展信息。服务端可以通过 人员管理 接口查询用户属性信息。setJoinType
: 用户进行多端登录时的加入策略。假设当前账号已在其他端加入房间,设置为RCRTCJoinType.KICK
会导致在用户其他端加入房间时 踢掉已在房间的同账号用户。设置为RCRTCJoinType.REFUSE
,则会保留已在房间的同账号用户的登录状态,当前尝试登陆的用户会返回加入失败。
退出房间
-
如果用户开启了视频采集,在调用 leaveRoom 之前必须手动关闭视频采集。
RCRTCEngine.getInstance().getDefaultVideoStream().stopCamera();
提示离开房间接口(
leaveRoom
)不会自动关闭视频采集。如不主动关闭,可能会导致耗电量增加等问题。 -
调用
RCRTCEngine
下的 leaveRoom 接口离开房间,离开时 SDK 内部会自动取消所有已发布和订阅的资源。RCRTCEngine.getInstance().leaveRoom(new IRCRTCResultCallback() {
@Override
public void onSuccess() {
}
@Override
public void onFailed(RTCErrorCode rtcErrorCode) {
}
});