Android&IOS

最近更新时间:2024-04-15 22:05:51

我的收藏

前言

默认情况下,只有同一房间内的用户才能进行音视频通话,不同房间的音视频流是互相独立的。但是,您可以通过调用 请求跨房通话(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 的音视频。
说明:
跨房通话的请求结果会通过 TRTCCloudListener 中的 onConnectOtherRoom 回调通知给您。



跨房通话的参数考虑到后续扩展字段的兼容性问题,暂时采用了 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,以实现更多场景的播放观看需求。