文档导航
iOS
SDK 版本:  5.X

同房间连麦

更新时间:2024-02-26 PDF
提示

5.1.9 版本之前如需实现上下麦,需要让观众先退出房间,设置新的角色身份,再重新加入房间。

观众上麦

观众上麦本质上是切换身份变成当前房间的主播,然后以主播身份继续直播相关操作。App 处理步骤如下:

  1. (可选)App 可提前获取当前用户需要发布的流。如果在切换为主播时传入流数组,SDK 会在角色切换成功后自动发布。

  2. App 调用 RCRTCLocalUserswitchToBroadcaster 接口,将当前登录用户(观众角色)切换为主播角色。角色切换后,RCRTCRoom 对象中数据会自动刷新。角色切换后会保留之前注册的 RCRTCStatusReportDelegateRCRTCEngineEventDelegateRCRTCRoomEventDelegate 等 RTC SDK 全局类型的监听,其他监听需要切换角色成功后重新注册才能使用。

  3. SDK 内部会取消当前登录用户之前(作为观众)订阅的音视频流。因此,在成功切换为主播角色后,App 需要为当前用户调用 subscribeStreams 重新订阅。注意,主播角色一般仅订阅其他主播发布的流,不订阅合流。

     NSArray *streams = @[self.engine.defaultAudioStream,self.engine.defaultVideoStream];
    
     [self.room.localUser switchToBroadcaster:streams onSucceed:^(RCRTCLiveInfo * _Nonnull liveInfo) {
        //TODO:切换到主播成功,订阅房间内流资源
        NSMutableArray *streams = [NSMutableArray array];
        for (RCRTCRemoteUser *user in self.room.remoteUsers) {
            if (user.remoteStreams.count) {
                [streams addObjectsFromArray:user.remoteStreams];
            }
        }
        if (streams.count) {
            // 订阅资源
            //[self subscribeStreams:streams];
        }
     } onFailed:^(RCRTCCode code) {
        NSLog(@"OnFailed:%@",@(code));
     } onKicked:^{
        NSLog(@"OnKicked");
     }];
                  
    已复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    如果切换为主播时 publishStreams 为空(不发布资源),App 可以单独调用主播发布资源的方法。详见发布与订阅 · 主播端

    参数 类型 说明
    publishStreams NSArray<RCRTCOutputStream *> 切换成主播,需要发布的流数组(可以传空)。
    onSucceed void (^)(RCRTCLiveInfo *liveInfo) 切换成功的回调,liveInfo 会携带发布资源后的 liveUrl
    onFailed void (^)(RCRTCCode code) 切换失败的回调,不会影响当前观众身份,用户可以继续音视频相关操作
    onKicked void (^)(void) 切换失败,被 SDK 主动踢出的回调,需要用户重新加入房间才能继续音视频的相关操作
  4. 观众上麦后,RTC 房间内的其他用户(主播、观众)同房间内的其他用户会通过 RCRTCRoomEventDelegate 协议里面的 didSwitchRoleWithUser:roleType: 方法监听到远端用户切换身份为 RCRTCLiveRoleTypeBroadcaster

  5. 观众上麦后,RTC 房间内的其他用户(主播、观众)会收到回调:

  6. 观众上麦后,RTC 房间内的其他用户(主播、观众)可通过 房间事件回调 中的 didPublishStreams 回调收到发流通知。App 端需要自行处理资源订阅。

主播下麦

主播下麦本质上是切换身份变成当前房间的观众,然后以观众身份继续观看直播等相关操作。App 处理步骤如下:

  1. App 调用 RCRTCLocalUserswitchToAudienceOnSucceed 接口,将当前登录用户(观众角色)切换为主播角色。角色切换后,RCRTCRoom 对象中数据会自动刷新。角色切换后会保留之前注册的 RCRTCStatusReportDelegateRCRTCEngineEventDelegateRCRTCRoomEventDelegate 等 RTC SDK 全局类型的监听,其他监听需要切换角色成功后重新注册才能使用。

  2. SDK 内部会取消当前登录用户之前(作为主播)发布、订阅的音视频流。因此,在成功切换为观众角色后,App 需要为当前用户调用 subscribeStreams 重新订阅。注意,观众角色一般仅订阅合流。

    [self.room.localUser switchToAudienceOnSucceed:^{
        //TODO:观众订阅
        NSArrry *streams = [self.room getLiveStreams];
        //[self subscribeStreams:streams];
    } onFailed:^(RCRTCCode code) {
        NSLog(@"OnFailed:%@",@(code));
    } onKicked:^{
        NSLog(@"OnKicked");
    }];
                  
    已复制
    1
    2
    3
    4
    5
    6
    7
    8
    9

    参数 类型 说明
    onSucceed void (^)(void) 切换成功的回调
    onFailed void (^)(RCRTCCode code) 切换失败的回调,不会影响当前主播身份,用户可以继续音视频相关操作
    onKicked void (^)(void) 切换失败,被 SDK 主动踢出的回调,需要用户重新加入房间才能继续音视频的相关操作
    提示

    如果当前用户在跨房间连麦中加入了 RCRTCOtherRoom,切换为观众时,SDK 内部会帮其退出所有 RCRTCOtherRoom。不会结束本次连麦。如果需要结束连麦请在切换角色前调用 RCRTCEngineleaveOtherRoom:notifyFinished:completion: 方法,notifyFinished 参数传 YES 即可。

  3. 主播下麦后,RTC 房间内的其他用户(主播、观众)会收到回调:

监听房间用户切换角色事件

当房间内的用户使用切换角色方式上下麦时,同房间内用户均会收到回调。其中主播用户会通过 RCRTCRoomEventDelegate 协议里面的 didSwitchRoleWithUser:roleType: 方法监听到远端用户切换身份。

如果主播用户订阅的其他主播下麦,SDK 内部会主动取消订阅不存在的音视频流,但 App 需要在此回调方法中移除当前视频流视图等操作。

/*!
 远端用户切换身份通知

 @param user 切换身份的用户
 @param roleType 该用户当前的身份

 @discussion
 有切换身份时的回调,当有用户切换身份的时候,当前房间内其他主播会收到该消息。
 如果订阅了当前 user 的流,SDK 会主动取消订阅,不需要手动取消订阅。
 added from 5.1.9

 @remarks 代理
 */
- (void)didSwitchRoleWithUser:(RCRTCRemoteUser *)user roleType:(RCRTCLiveRoleType)roleType;
              
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14

参数 类型 说明
user RCRTCRemoteUser 切换身份的用户
roleType RCRTCLiveRoleType 切换成功的目标角色类型
文档反馈
意见反馈

您的改进建议

意见反馈

问题类型

联系我们

提交工单

技术支持|集成使用|产品方案


商务咨询

7 x 24 小时

为您解答方案与报价问题

131 6185 6839

文档反馈