otherroom
跨房间连麦中需要区分主房间和副房间概念。主副房间是相对概念,定义如下:
- 主房间:本端在最开始加入的房间,即 RCRTCRoom。
- 副房间:在连麦邀请被接受后,双方均需要加入对方房间。对方房间即:RCRTCOtherRoom。
跨房间连麦前需要双方都已经加入自己的主房间,未加入主房间前无法进行连麦的邀请和被邀请。
两种房间的类都有对应的代理 IRCRTCRoomEventsListener 和 IRCRTCOtherRoomEventsListener 用来区分不同类型房间的回调。
主流程
发起邀请
向指定用户发送跨房间连麦请求,使用加入房间成功回调返回的 RCRTCRoom
类获取 RCRTCLocalUser
对象,调用 requestJoinOtherRoom
方法。
-
代码示例:
/**
* 向指定用户发送跨房间连麦请求
* <P>
* 1: inviterAutoMix为true时:
*
* 1.1:如果被邀请方在加入邀请方房间之前发布了资源,当被邀请方加入邀请者房间成功后,服务器会把被邀请方流资源合并到邀请方视图 ·(默认仅悬浮布局合流)上。
*
* 1.2:如果被邀请方在加入邀请方房间之前没有发布过资源,将会在被邀请方发布资源成功后,服务器会把被邀请方流资源合并到邀请方视图(默认仅悬浮布局合流)上。
*
* 2:无论为true或false,双方都可以使用{@link RCRTCLiveInfo#setMixConfig(RCRTCMixConfig, IRCRTCResultCallback)} 方法主动设置合流布局。一旦主动设置过合流布局,后续音视频直播过程中设置的自动合流参数将失效。
* <P/>
*/
RCRTCRoom.getLocalUser().requestJoinOtherRoom(inviteeRoomId, inviteeUserId, inviterAutoMix, "extra", new IRCRTCResultCallback() {
@Override
public void onSuccess() {
}
@Override
public void onFailed(RTCErrorCode errorCode) {
}
}); -
API 参考:
取消邀请
收到其他房间主播连麦邀请后,如果不打算加入,则调用 RCRTCLocalUser
中的 cancelRequestJoinOtherRoom
来取消正在进行中的跨房间连麦请求。
-
代码示例:
RCRTCRoom.getLocalUser().cancelRequestJoinOtherRoom(inviteeRoomId, inviteeUserId, "extra", new IRCRTCResultCallback() {
@Override
public void onSuccess() {
}
@Override
public void onFailed(RTCErrorCode errorCode) {
}
}); -
API 参考:
应答邀请
收到其他房间主播连麦邀请后,如果打算加入,则需要先调用 RCRTCLocalUser
中的 responseJoinOtherRoom
来响应跨房间麦连麦邀请,再调用 joinOtherRoom
加入副房间。
-
代码示例:
/**
* <P>
* 1:inviteeAutoMix 为true时:
*
* 1.1:如果邀请方在发送连麦请求之前发布了资源,当被邀请方加入邀请者房间成功后,服务器会把邀请方流资源合并到被邀请方视图(默认仅悬浮布局合流)上。
*
* 1.2:如果邀请方在发送连麦请求之前没有发布资源,将会在邀请方发布资源成功后,服务器才会把邀请方的资源合并到被邀请方视图(默认仅悬浮布局合流)上。
*
* 2: 无论为true或false,双方都可以使用{@link RCRTCLiveInfo#setMixConfig(RCRTCMixConfig, IRCRTCResultCallback)} 方法主动设置合流布局。一旦主动设置过合流布局,后续音视频直播过程中设置的自动合流参数将失效。
*
* <P/>
*/
RCRTCRoom.getLocalUser().responseJoinOtherRoom(inviterRoomId, inviterUserId, agree, inviteeAutoMix, "extra", new IRCRTCResultCallback() {
@Override
public void onSuccess() {
}
@Override
public void onFailed(RTCErrorCode errorCode) {
}
}); -
API 参考:
加入副房间
-
代码示例:
RCRTCEngine.getInstance().joinOtherRoom(roomId, new IRCRTCResultDataCallback<RCRTCOtherRoom>() {
@Override
public void onSuccess(RCRTCOtherRoom rcrtcOtherRoom) {
}
@Override
public void onFailed(RTCErrorCode rtcErrorCode) {
}
}); -
API 参考: