实时音视频

  • 实时音视频 > 使用指南 > iOS >跨房媒体转发

    跨房媒体转发

    最近更新时间:2022-01-21 11:00:32

    本部分介绍跨房媒体转发的使用以及使用场景

    跨房媒体转发使用

    使用前注意事项

    请注意当前跨房功能仅对使用场景为直播,且角色为主播的场景下才能使用。请确保加入房间前调用以下接口:

    [rtcClient setClientRole:QNClientRoleBroadcaster completeCallback:nil];
    

    对于以下几种情况:

    开启跨房媒体转发

    通过 QNRTCClient.startRoomMediaRelay 接口开启跨房媒体转发,在QNMediaRelayResultCallback中处理结果。

    - (void)startRoomMediaRelay:(QNRoomMediaRelayConfiguration *_Nonnull)config completeCallback:(QNMediaRelayResultCallback)callback;
    

    config,跨房媒体转发配置项

    QNRoomMediaRelayConfiguration.srcRoomInfo 目前暂不使用,可以为空 QNRoomMediaRelayConfiguration.destRoomInfoList 表示目前需要进行的跨房目标,允许同时跨到多个房间

    例:

    QNRoomMediaRelayConfiguration *config = [QNRoomMediaRelayConfiguration new];
    QNRoomMediaRelayInfo *srcRoomInfo = [QNRoomMediaRelayInfo new];
    srcRoomInfo.roomName = roomName;
    srcRoomInfo.token = token;
    
    QNRoomMediaRelayInfo *destInfo1 = [QNRoomMediaRelayInfo new];
    destInfo1.roomName = roomName1;
    destInfo1.token = token1;
    
    QNRoomMediaRelayInfo *destInfo2 = [QNRoomMediaRelayInfo new];
    destInfo2.roomName = roomName2;
    destInfo2.token = token2;
    
    config.srcRoomInfo = srcRoomInfo;
    [config setdestRoomInfo:destInfo1 forRoomName:roomName1];
    [config setdestRoomInfo:destInfo2 forRoomName:roomName2];
    
    [rtcClient startRoomMediaRelay:config completeCallback:^(NSDictionary *state, NSError *error) {
                    if (!error) {
                        NSString *str = @"开始跨房媒体转发成功";
                    }
                }];
    

    更新跨房媒体转发

    通过 QNRTCClient.updateRoomMediaRelay 接口更新跨房媒体转发,QNMediaRelayResultCallback中处理结果。 注意此接口中的 config 为全量更新,如已经开启的跨房的目标房间未被包含,则会被停止

    - (void)updateRoomMediaRelay:(QNRoomMediaRelayConfiguration *_Nonnull)config completeCallback:(QNMediaRelayResultCallback)callback;
    

    config,跨房媒体转发配置项

    QNRoomMediaRelayConfiguration.srcRoomInfo 目前暂不使用,可以为空 QNRoomMediaRelayConfiguration.destRoomInfoList 表示目前需要进行的跨房目标,允许同时跨到多个房间

    例:同开启跨房媒体转发

    停止跨房媒体转发

    通过 QNRTCClient.stopRoomMediaRelay 接口停止跨房媒体转发,所有已开启的跨房行为将被停止, 在QNMediaRelayResultCallback中处理结果。

    - (void)stopRoomMediaRelay:(QNMediaRelayResultCallback)callback;
    

    事件通知

    使用场景

    连麦 pk

    旧版方案

    当前连麦 pk 方案为主播 A 先退出当前房间,然后再加入主播 B 的房间,连麦完成后需要再切回原房间。中间过程比较复杂,涉及了重复进出房间等比较复杂的操作,客户端需要保存较多的状态,容易出错。

    跨房媒体转发方案

    使用跨房媒体转发方案,可以很方便的解决连麦 pk 这类场景的需求。 主播 A 不再需要离开自己的房间,只需通过以下步骤即可:

    1. 业务协商,主播 A 通过 QNRTC 自定义消息或者业务服务器长连接向主播 B 发送连麦请求,如果请求通过,则进行下一步
    2. 主播 A 调用 QNRTCClient.startRoomMediaRelay,主播 B 收到主播 A 加入房间和发布音视频等一系列消息后,再使用 QNRTCClient.setTranscodingLiveStreamingID 方法更新合流布局即可。
    3. 主播 B 操作同主播 A。
    4. 连麦结束后,各自调用 QNRTCClient.stopRoomMediaRelay 停止跨房,并调用 QNRTCClient.removeTranscodingLiveStreamingID 移除连麦布局。
    5. 结束
    以上内容是否对您有帮助?
  • Qvm free helper
    Close