跨房媒体转发
自 v4.1.0 版本,Web SDK 新增跨房媒体转发功能。
跨房媒体转发允许主播不离开自己的所在的房间,仅通过信令的操作,转发自己的音视频到其他的房间。七牛 RTC SDK 支持同时转发多路至多个房间(具体按照设备状况以及网络状况决定)。依赖此功能,可以很方便的实现直播过程中的连麦,小班课等业务。
场景角色配置
场景 QNClientMode:
QNClientMode.LIVE
: 用于互动直播场景,可以通过设置角色来控制权限。主播可以发布和订阅音视频,观众仅能订阅音视频。QNClientMode.RTC
: 用于通信场景,所有人都可以发布自己的音视频,不可设置角色。
角色 QNClientRole:
QNClientRole.BROADCASTER
: 主播角色,拥有发布和订阅音视频的权限。QNClientRole.AUDIENCE
: 观众角色,仅有订阅音视频的权限。
const client = QNRTC.createClient();
await client.setClientMode(QNClientMode.LIVE);
await client.setClientRole(QNClientRole.BROADCASTER)
await client.join("xxx");
注意,场景仅可在加入房间之前设置,角色在加入房间之前或者之后均可设置。
跨房媒体转发
针对跨房媒体转发,SDK 提供了开始(startMediaRelay)、更新(updateMediaRelay)和停止(stopMediaRelay)三个接口。
// 转发目标房间名称及房间 token
const relayConfig = { destRoomInfos: [
{ roomName: "destRoomName1"; roomToken: "destRoomToken1"; },
{ roomName: "destRoomName2"; roomToken: "destRoomToken2"; },
]}
// 开始转发
const relayResult = await client.startMediaRelay(relayConfig);
开始转发成功后,会自动将自己在原房间发布的所有媒体流发布到目标房间中。目标房间的用户会正常收到新用户加入和新用户发布新媒体流的通知。
更新转发的接口使用方法类似,只需要指定想要转发的目标房间信息即可。此方法为全量更新,正在跨房媒体转发中却未被包含在参数中的房间,将停止媒体转发。
const relayConfig = { destRoomInfos: [
{ roomName: "destRoomName2"; roomToken: "destRoomToken2"; },
{ roomName: "destRoomName3"; roomToken: "destRoomToken3"; },
]}
// 更新转发
const relayResult = await client.updateMediaRelay(relayConfig);
最后就是停止转发。
const relayResult = await client.stopMediaRelay();
转发状态通知
除了在调用媒体转发接口后的 promise 返回后,如果转发过程中发生各种情况,可以通过监听 media-relay-state-changed 事件获取转发状态通知。
client.on("media-relay-state-changed", (roomName: string, state: QNMediaRelayState) => {
// ...
});
跨房媒体转发状态QNMediaRelayState
- 成功 SUCCESS(0)
- 主动退出 STOPPED(1)
- 无效token INVALID_TOKEN(2)
- 目标房间不存在 NO_ROOM(3)
- 目标房间已关闭 ROOM_CLOSED(4)
- 目标房间存在相同用户名的用户 PLAYER_EXISTED(5)
文档反馈
(如有产品使用问题,请 提交工单)