跨房间连麦
跨房间连麦中需要区分主房间和副房间概念。主副房间是相对概念,定义如下:
- 主房间:本端在最开始加入的房间。
- 副房间:在连麦邀请被接受后,双方均需要加入对方房间。
跨房间连麦前需要双方都已经加入自己的主房间,未加入主房间前无法进行连麦的邀请和被邀请。
处理连麦邀请
在建立连麦前,需要由一位主播发出邀请,另一位主播作出同意或拒绝连麦的应答。
设置连麦事件回调监听
方法
JavaScript
engine.setOnJoinSubRoomRequestedListener();
回调参数
参数 | 类型 | 说明 |
---|---|---|
code | Number | 错误码,0 表示成功 |
errMsg | String | 错误信息 |
示例代码
JavaScript
// 邀请其他用户跨房间连麦的回调
engine.setOnJoinSubRoomRequestedListener(({code, errMsg}) => {
if (code == 0) {
// 邀请其他用户跨房间连麦成功, 等待对方处 理
console.log('连麦邀请发送成功');
} else {
// 邀请其他用户跨房间连麦失败
console.log('连麦邀请发送失败:', errMsg);
}
});
发起邀请
向指定用户发送跨房间连麦请求,调用 RCRTCEngine
对象的 requestJoinSubRoom
方法。请求发送成功后,被邀请人会通过 setOnJoinSubRoomRequestReceivedListener
回调收到通知。
方法
JavaScript
engine.requestJoinSubRoom();
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
roomId | String | 是 | 对方的房间 ID |
userId | String | 是 | 对方用户 ID |
autoLayout | Boolean | 是 | 是否采用悬浮布局。如为 true ,服务端会在加入邀请方房间成功后,把受邀方的 流资源合并到邀请方视图上(默认仅悬浮布局合流)。如受邀方未发布资源,则会在受邀方发布资源后进行视图合并。无论 autoLayout 为 true 或 false,双方都可以使用 setLiveMixCustomLayouts 方法主动设置合流布局。一旦主动设置过合流布局,后续音视频直播过程中设置的自动合流参数将失效。默认值:true |
extra | String | 否 | 附加信息 |
示例代码
JavaScript
// 邀请其他用户跨房间连麦
engine.requestJoinSubRoom(roomId, userId);
console.log('连麦邀请已发送');
设置收到连麦邀请监听
方法
JavaScript
engine.setOnJoinSubRoomRequestReceivedListener();
回调参数
参数 | 类型 | 说明 |
---|---|---|
roomId | String | 对方的房间 ID |
userId | String | 对方用户 ID |
extra | String | 附加信息 |
示例代码
JavaScript
// 收到其他用户发起的跨房间连麦邀请
engine.setOnJoinSubRoomRequestReceivedListener(({roomId, userId, extra}) => {
console.log('收到连麦邀请:', userId);
// 同意其他用户的跨房间连麦邀请
engine.responseJoinSubRoomRequest(roomId, userId, true);
});
应答邀请
被邀请人端收到邀请后,SDK 会触发 RCRTCEngine
对象的 setOnJoinSubRoomRequestReceivedListener
回调方法。接收到邀请通知后,需要进行应答,可以同意连麦或拒绝连麦。
- 如果同意连麦,需调用
responseJoinSubRoomRequest
方法并将agree
参数设置为true
,发送同意连麦的应答。后续需要调用joinSubRoom
加入副房间。 - 如果拒绝连麦,需调用
responseJoinSubRoomRequest
方法并将agree
参数设置为false
。
方法
JavaScript
engine.responseJoinSubRoomRequest();
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
roomId | String | 是 | 对方的房间 ID |
userId | String | 是 | 对方用户 ID |
agree | Boolean | 是 | 是否同意连麦 |
autoLayout | Boolean | 是 | 是否采用悬浮布局。如为 true ,服务端会在加入邀请方房间成功后,把受邀方的流资源合并到邀请方视图上(默认仅悬浮布局合流)。如受邀方未发布资源,则会在受邀方发布资源后进行视图合并。无论 autoLayout 为 true 或 false,双方都可以使用 setLiveMixCustomLayouts 方法主动设置合流布局。一旦主动设置 过合流布局,后续音视频直播过程中设置的自动合流参数将失效。默认值:true |
extra | String | 否 | 附加信息 |
示例代码
JavaScript
// 同意其他用户的跨房间连麦邀请
engine.responseJoinSubRoomRequest(roomId, userId, true);
console.log('连麦邀请应答已发送');
设置应答结果监听
方法
JavaScript
engine.setOnJoinSubRoomRequestRespondedListener();
回调参数
参数 | 类型 | 说明 |
---|---|---|
roomId | String | 对方的房间 ID |
userId | String | 对方用户 ID |
agree | Boolean | 是否同意连麦 |
code | Number | 错误码,0 表示成功 |
errMsg | String | 错误信息 |
示例代码
JavaScript
// 同意其他用户的跨房间连麦邀请后触发的回调
engine.setOnJoinSubRoomRequestRespondedListener(({roomId, userId, agree, code, errMsg}) => {
if (code == 0) {
// 同意响应成功
console.log('连麦邀请应答成功');
} else {
// 同意响应失败
console.log('连麦邀请应答失败:', errMsg);
}
});
对连麦邀请作出应答后,本端会通过 setOnJoinSubRoomRequestRespondedListener
回调方法收到来自融云服务端的通知,此时可认为应答成功。同时,邀请方会收到 setOnJoinSubRoomRequestResponseReceivedListener
,此时表示已接收到对方对连麦邀请作出的回复。
提示
- 如果同意连麦,两个房间内的所有非观众用户(被邀请方除外)都会收到
setOnJoinSubRoomRequestResponseReceivedListener
应答回调。 - 如果拒绝连麦,只有邀请方会收到应答拒绝的回调
setOnJoinSubRoomRequestResponseReceivedListener
,其他所有用户都不会收到该应答回调。
设置收到应答监听
方法
JavaScript
engine.setOnJoinSubRoomRequestResponseReceivedListener();
回调参数
参数 | 类型 | 说明 |
---|---|---|
roomId | String | 对方的房间 ID |
userId | String | 对方用户 ID |
agree | Boolean | 是否同意连麦 |
示例代码
JavaScript
// 收到其他用户对连麦邀请的应答
engine.setOnJoinSubRoomRequestResponseReceivedListener(({roomId, userId, agree}) => {
if (agree) {
console.log('对方同意连麦邀请');
} else {
console.log('对方拒绝连麦邀请');
}
});
取消邀请
您的 App 用户可能在发起连麦邀请后改变主意,想要取消邀请,此时可调用 RCRTCEngine
对象的 cancelJoinSubRoomRequest
方法来取消正在进行中的跨房间连麦邀请。取消邀请时,被邀请人会收到 setOnCancelJoinSubRoomRequestReceivedListener
回调。
方法
JavaScript
engine.cancelJoinSubRoomRequest();
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
roomId | String | 是 | 对方的房间 ID |
userId | String | 是 | 对方用户 ID |
示例代码
JavaScript
// 取消之间发起的跨房间连麦邀请
engine.cancelJoinSubRoomRequest(roomId, userId);
console.log('连麦邀请取消请求已发送');
设置取消邀请结果监听
方法
JavaScript
engine.setOnJoinSubRoomRequestCanceledListener();
回调参数
参数 | 类型 | 说明 |
---|---|---|
roomId | String | 对方的房间 ID |
userId | String | 对方用户 ID |
code | Number | 错误码,0 表示成功 |
errMsg | String | 错误信息 |
示例代码
JavaScript
// 取消之间发起的跨房间连麦邀请的回调
engine.setOnJoinSubRoomRequestCanceledListener(({roomId, userId, code, errMsg}) => {
if (code == 0) {
// 取消成功
console.log('连麦邀请取消成功');
} else {
// 取消失败
console.log('连麦邀请取消失败:', errMsg);
}
});
设置收到取消邀请监听
方法
JavaScript
engine.setOnCancelJoinSubRoomRequestReceivedListener();
回调参数
参数 | 类型 | 说明 |
---|---|---|
roomId | String | 对方的房间 ID |
userId | String | 对方用户 ID |
示例代码
JavaScript
// 收到其他用户取消连麦邀请的通知
engine.setOnCancelJoinSubRoomRequestReceivedListener(({roomId, userId}) => {
console.log('对方取消了连麦邀请');
});
加入副房间流程
在连麦邀请被接受后,双方均需要加入对方房间。相对在本端已加入直播房间主播用户来说,对方房间为副房间。加入副房间方法如下:
方法
JavaScript
engine.joinSubRoom();
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
roomId | String | 是 | 副房间 ID |
示例代码
JavaScript
// 加入副房间
engine.joinSubRoom(roomId);
console.log('加入副房间请求已发送');
邀请方与受邀方加入副房间的时机如下:
- 受邀方:在作出同意连麦的应答成功后,调用
RCRTCEngine
对象的joinSubRoom
方法加入副房间。 - 邀请方:在收到同意连麦的应达后(
setOnJoinSubRoomRequestResponseReceivedListener
),调用RCRTCEngine
对象的joinSubRoom
方法加入副房间。此时会触发setOnSubRoomJoinedListener
、setOnSubRoomBandedListener
、setOnUserJoinedListener
回调。
设置加入副房间结果监听
方法
JavaScript
engine.setOnSubRoomJoinedListener();