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

主播端

更新时间:2024-02-26 PDF

准备发布

  1. 主播端初始化 SDK 并连接融云服务器。

    [[RCCoreClient sharedCoreClient] initWithAppKey:@"你的AppKey"];
    [[RCCoreClient sharedCoreClient] connectWithToken:@"你的token"
                                             dbOpened:nil
                                              success:^(NSString *userId) {
    
        NSLog(@"IM connect success,user ID : %@",userId);
        ...
    
    } error:^(RCConnectErrorCode errorCode) {
        NSLog(@"IM connect failed, error code : %ld",(long)errorCode);
    }];
                  
    已复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

  2. (可选)App 可以先将音频输出切换到扬声器。详见音频路由

    // 1.设置切换听筒为扬声器
    [[RCRTCEngine sharedInstance] enableSpeaker:YES];
                  
    已复制
    1
    2

  3. 主播端需要配置房间信息并加入房间。

    // 配置房间
    RCRTCRoomConfig *config = [[RCRTCRoomConfig alloc] init];
    config.roomType = RCRTCRoomTypeLive;
    config.liveType = RCRTCLiveTypeAudioVideo;
    config.roleType = RCRTCLiveRoleTypeBroadcaster;
    [[RCRTCEngine sharedInstance] joinRoom:@"你的房间号"
                                    config:config
                                completion:^(RCRTCRoom * _Nullable room, RCRTCCode code) {
        if (code != RCRTCCodeSuccess) {
        }
        // 可以通过实现 <RCRTCRoomEventDelegate> 的方法来监听房间相关事件回调
        room.delegate = self;
    }];
                  
    已复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

  4. 主播端创建本地视频渲染的 view。

    // 1.初始化本地渲染视图
    RCRTCVideoView *view = [[RCRTCVideoView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    // 2.设置视频流的渲染视图
    [[RCRTCEngine sharedInstance].defaultVideoStream setVideoView:view];
    // 3.添加渲染视图
    [self.view addSubview:view];
                  
    已复制
    1
    2
    3
    4
    5
    6

  5. 开始摄像头采集。

    [[RCRTCEngine sharedInstance].defaultVideoStream startCapture];
                  
    已复制
    1

发布资源

提示

发布资源前,请确定已经以主播身份加入房间、开启摄像头采集以及设置完视频流的渲染视图并添加在本地视图上以供显示。

  1. RCRTCRoomTypeRCRTCRoomTypeLive 时,主播在配置完房间并加入后可以发布默认音视频流。此接口仅直播模式的主播可用。

    - (void)publishDefaultLiveStreams:(RCRTCLiveOperationCallback)completion;
                  
    已复制
    1

    [[RCRTCEngine sharedInstance].room.localUser publishDefaultLiveStreams:^(BOOL isSuccess, RCRTCCode desc, RCRTCLiveInfo * _Nullable liveInfo) {
        // 可以通过拿到的liveInfo对象进行推流相关配置
    }];
                  
    已复制
    1
    2
    3

  2. 如果主播想要单独发布默认音频流,视频流或者自定义视频流时,可以使用另外一个发布接口。此接口仅直播模式的主播可用。详情可跳转视频流相关-发布自定义流中查看。

    - (void)publishLiveStream:(nonnull RCRTCOutputStream *)stream completion:(nonnull RCRTCLiveOperationCallback)completion;
                  
    已复制
    1

    参数 类型 说明
    stream RCRTCOutputStream 发布的音视频流
    completion RCRTCLiveOperationCallback 发布完成回调

    示例代码:

    // 创建本地渲染视图
    RCRTCVideoView *localFileVideoView = [[RCRTCVideoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    localFileVideoView.fillMode = RCRTCVideoFillModeAspectFit;
    localFileVideoView.frameAnimated = NO;
    [self.view addSubview:localFileVideoView];
    
    // 创建自定义视频流
    NSString *tag = @"RongRTCFileVideo";
    RCRTCVideoOutputStream *fileVideoOutputStream = [[RCRTCVideoOutputStream alloc] initVideoOutputStreamWithTag:tag];
    
    // 设置自定义视频流配置
    RCRTCVideoStreamConfig *videoConfig = fileVideoOutputStream.videoConfig;
    videoConfig.videoSizePreset = RCRTCVideoSizePreset640x480;
    [fileVideoOutputStream setVideoConfig:videoConfig];
    [fileVideoOutputStream setVideoView:localFileVideoView];
    
    // 设置自定义视频流的视频源
    NSString *path = [[NSBundle mainBundle] pathForResource:@"video_demo1_low"
                                                     ofType:@"mp4"];
    RCRTCFileSource *fileCapturer = [[RCRTCFileSource alloc] initWithFilePath:path];
    fileCapturer.delegate = self;
    fileVideoOutputStream.videoSource = fileCapturer;
    [fileCapturer setObserver:fileVideoOutputStream];
    
    // 发布自定义视频流
    [[RCRTCEngine sharedInstance].room.localUser publishLiveStream:fileVideoOutputStream
                                                        completion:^(BOOL isSuccess, RCRTCCode code, RCRTCLiveInfo * _Nullable liveInfo) {
        if (code == RCRTCCodeSuccess) {
        }
    }];
                  
    已复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30

取消发布

提示

主播发布本地资源后也可以取消发布,主播专用取消发布接口有 2 个。

  1. 取消发布本地默认音视频流,此接口仅直播模式的主播可用, 即 RCRTCRoomTypeRCRTCRoomTypeLive 可用。

    - (void)unpublishDefaultLiveStreams:(RCRTCOperationCallback)completion;
                  
    已复制
    1

    [[RCRTCEngine sharedInstance].room.localUser unpublishDefaultLiveStreams:^(BOOL isSuccess, RCRTCCode code) {
    
    }];
                  
    已复制
    1
    2
    3

  2. 取消发布本地指定音视频流,此接口仅直播模式的主播可用, 即 RCRTCRoomTypeRCRTCRoomTypeLive 可用。

    [[RCRTCEngine sharedInstance].room.localUser unpublishLiveStream:self.fileVideoOutputStream
                                                            completion:^(BOOL isSuccess, RCRTCCode code) {
    }];
                  
    已复制
    1
    2
    3

    参数 类型 说明
    stream RCRTCOutputStream 取消发布的音视频流
    completion RCRTCOperationCallback 取消发布的音视频流完成回调

获取资源

提示

对于主播身份,远端用户音视频流可以通过以下两种方式取得:

  1. 加入房间前远端用户已经发布资源,则在加入房间后取得的 RCRTCRoom 对象的 RCRTCRemoteUser 中的 remoteStreams 中取得。

    [[RCRTCEngine sharedInstance] joinRoom:_roomId
                                    config:config
                                completion:^(RCRTCRoom * _Nullable room, RCRTCCode code) {
    
        // 参与的远端用户
        if (room.remoteUsers.count) {
            NSMutableArray *streamArray = [NSMutableArray array];
            for (RCRTCRemoteUser *user in room.remoteUsers) {
    
                // 参与的远端用户的音视频流
                if (user.remoteStreams.count) {
    
                // 可以在此订阅远端音视频资源
                }
            }
        }
    }];
                  
    已复制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

  2. 加入房间后远端用户才发布资源,可以通过房间代理方法取得音视频流数组。

    - (void)didPublishStreams:(NSArray<RCRTCInputStream *> *)streams {
        // 可以在此订阅远端音视频资源
    }
                  
    已复制
    1
    2
    3

订阅资源

远端用户发布音视频流后,可以通过加入房间后返回的 RCRTCRoom 中的订阅方法订阅多路远端指定音视频流。同一个流只能填写在 avStreamstinyStreams 中的一个数组中。

NSArray *tinyStream = isTiny ? streams : @[];
NSArray *ordinaryStream = isTiny ? @[] : streams;
// 订阅房间中远端用户音视频流资源
[[RCRTCEngine sharedInstance].room.localUser subscribeStream:ordinaryStream
                                                    tinyStreams:tinyStream
                                                    completion:^(BOOL isSuccess, RCRTCCode desc) {
    if (desc != RCRTCCodeSuccess) {
        return;
    }
    // 创建并设置远端视频预览视图
    NSInteger i = 0;
    for (RCRTCInputStream *stream in streamArray) {
        if (stream.mediaType == RTCMediaTypeVideo) {
            if (i==0) {
                // 1.初始化渲染远端视频的 view
                RCRTCRemoteVideoView *view = [[RCRTCRemoteVideoView alloc]initWithFrame:CGRectMake(100, 400, 100, 100)];
                // 2.设置视频流的渲染视图
                [(RCRTCVideoInputStream *)stream setVideoView:view];
                // 3.添加渲染视图
                [self.view addSubview:view];
            }else{
                // 其他远端视图逻辑
            }
        }
    }
}];
              
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

参数 类型 说明
avStreams RCRTCInputStream 普通流
tinyStreams RCRTCInputStream 需要携带小流的流数组
completion RCRTCOperationCallback 订阅资源完成的回调

取消订阅

  1. 通过代理收到远端用户取消发布音视频流后,可以调用 RCRTCRoomRCRTCLocalUser 的取消订阅的方法,取消订阅该用户的音视频流。退出房间时不需要取消订阅,SDK 内部会处理。

    [[RCRTCEngine sharedInstance].room.localUser unsubscribeStreams:streams
                                                         completion:^(BOOL isSuccess, RCRTCCode code) {
    }];
                  
    已复制
    1
    2
    3

    参数 类型 说明
    streams NSArray 音视频流集合
    completion RCRTCOperationCallback 取消订阅完成的回调
  2. 也可以取消订阅远端指定音视频流。

    [[RCRTCEngine sharedInstance].room.localUser unsubscribeStream:stream
                                                        completion:^(BOOL isSuccess,RCRTCCode desc) {
    }];
                  
    已复制
    1
    2
    3

    参数 类型 说明
    stream RCRTCInputStream 音视频流
    completion RCRTCOperationCallback 取消订阅完成的回调
文档反馈
意见反馈

您的改进建议

意见反馈

问题类型

联系我们

提交工单

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


商务咨询

7 x 24 小时

为您解答方案与报价问题

131 6185 6839

文档反馈