前言
默认情况下,只有同一房间内的用户才能进行音视频通话,不同房间的音视频流是互相独立的。但是,您可以通过调用 请求跨房通话(Android 为例)接口,将其他房间内某主播的音视频流发布到您所在的房间。同时,此接口也会将您的音视频流发布到目标主播的房间。
换句话说,您可以使用此接口让两个在不同房间的主播进行音视频流的分享,使每个房间的观众都能观看到这两位主播的音视频。这个功能可以用于实现主播间的 PK 功能。
根据以下文档,您可以实现在两个或更多房间内的主播进行跨房连麦 PK 的场景,并支持不同端的主播进行跨房连麦。
实现方式
在实现跨房连麦之前,需要确认以下实时音视频的一些基础信息:
userId:用户的唯一标识 ID。
roomId:数字类型房间 ID。
strRoomId:字符串类型房间 ID。
注意:
混流双方的房间类型需要相同,不可以混用。
跨房连麦
当房间“101”中的主播 A 通过“connectOtherRoom()”跟房间“102”中的主播 B 建立跨房通话后:
房间“101”中的用户都会收到主播 B 的
onRemoteUserEnterRoom(B)
和onUserVideoAvailable(B,true)
这两个事件回调,即房间“101”中的用户都可以订阅主播 B 的音视频。 房间“102”中的用户都会收到主播 A 的
onRemoteUserEnterRoom(A)
和onUserVideoAvailable(A,true)
这两个事件回调,即房间“102”中的用户都可以订阅主播 A 的音视频。说明:
![](https://qcloudimg.tencent-cloud.cn/image/document/a44caeda763bc91108fcfe9351602abf.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/a44caeda763bc91108fcfe9351602abf.png)
跨房通话的参数考虑到后续扩展字段的兼容性问题,暂时采用了 JSON 格式的参数:
情况一:数字房间号
如果房间“101”中的主播 A 要跟房间“102”中的主播 B 连麦,那么主播 A 调用该接口时需要传入:
{"roomId": 102, "userId": "userB"}
示例代码如下:
JSONObject jsonObj = new JSONObject();jsonObj.put("roomId", 102);jsonObj.put("userId", "userB");trtc.ConnectOtherRoom(jsonObj.toString());
情况二:字符串房间号
如果您使用的是字符串房间号,务必请将 json 中的
roomId
替换成"strRoomId": {"strRoomId": "102", "userId": "userB"}
示例代码如下:
JSONObject jsonObj = new JSONObject();jsonObj.put("strRoomId", "102");jsonObj.put("userId", "userB");trtc.ConnectOtherRoom(jsonObj.toString());
发布跨房音视频到 CDN
对于标准直播拉流(CDN 拉流)的场景来说,主播跨房间连麦之后需要将双方主播连麦的音视频混流后发布到 CDN。如果您有此类需求,参见 发布音视频流到直播 CDN 将多个房间内的主播画面混合后转推至直播 CDN,以实现更多场景的播放观看需求。