跳到主要内容

主播端

准备发布

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

    Objective C
    [[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);
    }];
  2. (可选)主播可以先将音频输出切换到扬声器。详见音频路由

    Objective C
    // 1.设置切换听筒为扬声器
    [[RCRTCEngine sharedInstance] enableSpeaker:YES];
  3. 主播端需要配置房间信息并加入房间。

    Objective C
    // 配置房间
    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;
    }];
  4. 主播端创建本地视频渲染的 view。

    Objective C
    // 1.初始化本地渲染视图
    RCRTCVideoView *view = [[RCRTCVideoView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    // 2.设置视频流的渲染视图
    [[RCRTCEngine sharedInstance].defaultVideoStream setVideoView:view];
    // 3.添加渲染视图
    [self.view addSubview:view];
  5. 开始摄像头采集。

    Objective C
    [[RCRTCEngine sharedInstance].defaultVideoStream startCapture];

发布资源

提示

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

发布默认音视频流

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

接口原型

Objective C
- (void)publishDefaultLiveStreams:(nullable RCRTCLiveOperationCallback)completion;

参数说明

参数类型是否必填说明
completionRCRTCLiveOperationCallback发布完成回调

代码示例

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

发布指定音视频流

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

接口原型

Objective C
- (void)publishLiveStream:(nonnull RCRTCOutputStream *)stream 
completion:(nullable RCRTCLiveOperationCallback)completion;

参数说明

参数类型是否必填说明
streamRCRTCOutputStream发布的音视频流
completionRCRTCLiveOperationCallback发布完成回调

代码示例

Objective C
// 发布自定义视频流
[[RCRTCEngine sharedInstance].room.localUser publishLiveStream:fileVideoOutputStream
completion:^(BOOL isSuccess, RCRTCCode code, RCRTCLiveInfo * _Nullable liveInfo) {
if (code == RCRTCCodeSuccess) {
// 发布成功
}
}];

取消发布

提示

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

取消发布默认音视频流

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

接口原型

Objective C
- (void)unpublishDefaultLiveStreams:(nullable RCRTCOperationCallback)completion;

参数说明

参数类型是否必填说明
completionRCRTCOperationCallback取消发布完成回调

代码示例

Objective C
[[RCRTCEngine sharedInstance].room.localUser unpublishDefaultLiveStreams:^(BOOL isSuccess, RCRTCCode code) {
// 处理取消发布结果
}];

取消发布指定音视频流

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

接口原型

Objective C
- (void)unpublishLiveStream:(nonnull RCRTCOutputStream *)stream 
completion:(nullable RCRTCOperationCallback)completion;

参数说明

参数类型是否必填说明
streamRCRTCOutputStream取消发布的音视频流
completionRCRTCOperationCallback取消发布的音视频流完成回调

代码示例

Objective C
[[RCRTCEngine sharedInstance].room.localUser unpublishLiveStream:fileVideoOutputStream
completion:^(BOOL isSuccess, RCRTCCode code) {
// 处理取消发布结果
}];

获取资源

提示

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

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

    Objective C
    [[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) {

    // 可以在此订阅远端音视频资源
    }
    }
    }
    }];
  2. 加入房间后远端用户才发布资源,可以通过实现 RCRTCRoomEventDelegatedidPublishStreams 取得音视频流数组。

    Objective C
    - (void)didPublishStreams:(NSArray<RCRTCInputStream *> *)streams {
    // 可以在此订阅远端音视频资源
    }

订阅资源

远端用户发布音视频流后,可以通过加入房间后返回的 RCRTCRoom 中的 subscribeStreams:tinyStreams:callback: 方法订阅多路远端指定音视频流。

接口原型

Objective C
- (void)subscribeStreams:(nullable NSArray<RCRTCInputStream *> *)avStreams
tinyStreams:(nullable NSArray<RCRTCInputStream *> *)tinyStreams
callback:(nullable RCRTCSubscribeOperationCallback)callback;

参数说明

参数类型是否必填说明
avStreamsNSArray<RCRTCInputStream *>普通流
tinyStreamsNSArray<RCRTCInputStream *>小流数组,同一个流只能填写在 avStreams 或 tinyStreams 中的一个数组中
callbackRCRTCSubscribeOperationCallback订阅资源完成的回调

代码示例

Objective C
// 订阅房间中远端用户音视频流资源
[[RCRTCEngine sharedInstance].room.localUser subscribeStreams:avStreams
tinyStreams:tinyStreams
callback:^(BOOL isSuccess, RCRTCCode desc, NSArray<RCRTCInputStream *> * _Nullable subscribeErrorList) {
if (subscribeErrorList.count) {
// 您可以根据业务决定是否对 subscribeErrorList 中的流进行重新订阅,或仅作提示
}
// 处理订阅成功
}];

取消订阅

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

批量取消订阅

您可以使用 unsubscribeStreams:completion: 方法批量取消订阅多个音视频流。

接口原型

Objective C
- (void)unsubscribeStreams:(nullable NSArray<RCRTCInputStream *> *)streams
completion:(nullable RCRTCOperationCallback)completion;

参数说明

参数类型是否必填说明
streamsNSArray<RCRTCInputStream *>音视频流集合
completionRCRTCOperationCallback取消订阅完成的回调

代码示例

Objective C
[[RCRTCEngine sharedInstance].room.localUser unsubscribeStreams:streams
completion:^(BOOL isSuccess, RCRTCCode code) {
// 处理取消订阅结果
}];

单个取消订阅

您也可以使用 unsubscribeStream:completion: 方法取消订阅远端指定音视频流。

接口原型

Objective C
- (void)unsubscribeStream:(nullable RCRTCInputStream *)stream
completion:(nullable RCRTCOperationCallback)completion;

参数说明

参数类型是否必填说明
streamRCRTCInputStream音视频流
completionRCRTCOperationCallback取消订阅完成的回调

代码示例

Objective C
[[RCRTCEngine sharedInstance].room.localUser unsubscribeStream:stream
completion:^(BOOL isSuccess, RCRTCCode desc) {
// 处理取消订阅结果
}];