( 最近更新时间:2020-04-28 19:00:00 )

# 观众上麦

# 取消订阅

主播端需要与观众连麦操作时,应先通过自己的 APPServer 获取当前聊天室内所有用户的列表,获取指定上麦用户的 ID,并构建一条连麦的自定义消息,调用 RongIMClientsendMessage 接口将自定义消息发送给指定上麦的观众用户。

指定上麦的观众用户收到连麦的自定义消息后,应先调用 RCRTCEngineunsubscribeLiveStream 接口取消观看直播。

- (void)unsubscribeLiveStream:(nullable NSString *)url
                   completion:(void (^)(BOOL isSuccess , RCRTCCode code))completion;
已复制
1
2

参数说明

参数 类型 必填 说明
url NSString 主播直播的 URL,如果为空,则为最后一次 subscribeLiveAVStream 接口传入的 URL
completion (void (^)(BOOL isSuccess , RCRTCCode code)) 动作的回调

示例代码

[[RCRTCEngine sharedInstance] unsubscribeLiveStream:nil 
                                         completion:^(BOOL isSuccess, RCRTCCode code) {}];
已复制
1
2
# 加入房间

取消观看直播后,调用 RCRTCEnginejoinRoom:config:completion: 方法加入到直播房间升级为主播, 此操作与主播加入房间操作相同。

- (void)joinRoom:(NSString *)roomId
          config:(RCRTCRoomConfig *)config
      completion:(nullable void (^)( RCRTCRoom  * _Nullable room, RCRTCCode code))completion;
已复制
1
2
3

输入参数

参数 类型 必填 说明
roomId NSString 房间 Id(支持大小写英文字母、数字、部分特殊符号 + = - _ 的组合方式 最长 64 个字符)
config RCRTCRoomConfig (opens new window) 加入房间的配置,主要用于配置直播场景
completion (nullable void (^)( RCRTCRoom * _Nullable room, RCRTCCode code)) 加入房间回调,其中,room 对象中的 remoteUsers ,存储当前房间中的所有人,包括发布资源和没有发布资源的人

示例代码

- (void)joinLiveRoom {
    RCRTCRoomConfig *config = [[RCRTCRoomConfig alloc] init];
    config.roomType = RCRTCRoomTypeLive; //房间类型
    config.liveType = RCRTCLiveTypeVideo; //直播类型

    [[RCRTCEngine sharedInstance] joinRoom:@"房间号" 
                                  config:config
                              completion:^(RCRTCRoom * _Nullable room, RCRTCCode code) {
        self.room = room;
        self.room.delegate = self;

        // 创建并设置本地视频预览视图
        RCRTCLocalVideoView *localVideoView = [[RCRTCLocalVideoView alloc] initWithFrame:CGRectMake(0260180240)];
        [self.view addSubview:localVideoView];
        [[RCRTCEngine sharedInstance].defaultVideoStream setVideoView:localVideoView];
        
        // 开始采集音视频
        [[RCRTCEngine sharedInstance].defaultVideoStream startCapture];
        
        // 发布本地音视频流资源
        [self publishLiveLocalResource];
        
        // 加入房间时已经有远端用户在房间中, 收集需要订阅的流
        if ([self.room.remoteUsers count] > 0) {
            NSMutableArray *streamArray = [NSMutableArray array];
            for (RCRTCRemoteUser *user in self.room.remoteUsers) {
                [streamArray addObjectsFromArray:user.remoteAVStreams];
            }
            
            // 订阅远端音视频流
            [self.room.localUser subscribeStream:streamArray tinyStreams:nil completion:^(BOOL isSuccess, RCRTCCode desc) {}];
        }
    }];
}
已复制
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
31
32
33
34
# 发布资源

升级为主播后,调用 RCRTCRoompublishDefaultLiveStream 接口发布音视频资源,此操作与主播发布资源操作相同。

如果需要观看其他主播端音视频资源流,调用 RCRTCRoomsubscribeAVStream 接口来订阅。

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

输入参数

参数 类型 必填 说明
completion RCRTCLiveOperationCallback 发布完成回调

示例代码

[self.room.localUser publishDefaultLiveStream:^(BOOL isSuccess, RCRTCCode desc, RCRTCLiveInfo * _Nullable liveInfo) {
	// liveInfo.liveUrl 需要保存到 demo server, 观众用户加入后从 demo server 取得
}];
已复制
1
2
3

主播端如果想要执行取消连麦操作,先获取指定取消连麦用户的 ID ,并构建一条取消连麦的自定义消息,调用 RongIMClientsendMessage 接口将自定义消息发送给对应的用户。对端用户收到取消连麦的自定义消息后,应调用 RCRTCEngineleaveRoom 接口退出直播房间。

如果取消连麦后,用户还需要继续观看直播,则可以调用 RCRTCEnginesubscribeLiveStream 接口来观看直播,此操作与观众用户订阅主播音视频流相同。

# 观众下麦

# 离开房间

观众上麦后就变成了主播的角色,当需要下麦时,应该先离开房间再订阅主播的资源,离开房间的方法如下:

- (void)leaveRoom:(NSString*)roomId
       completion:(void (^) (BOOL isSuccess, RCRTCCode code))completion;
已复制
1
2

输入参数

参数 类型 必填 说明
roomId NSString 房间 Id
completion (void (^) (BOOL isSuccess, RCRTCCode code)) 完成退出房间后返回的是否成功和状态码

示例代码

[[RCRTCEngine sharedInstance] leaveRoom:@"房间号" completion:^(BOOL isSuccess, NSInteger code) {
    self.room = nil;
}];
已复制
1
2
3
# 订阅资源

观众用户通过由 APPServer 获取的直播地址和直播类型去订阅直播间资源。订阅完成后的 RCRTCLiveCallback 中返回的 inputStream 如果是视频类型,创建一个远端视频 View 添加到流的渲染中即可显示。

- (void)subscribeLiveStream:(NSString *)url
                   liveType:(RCRTCLiveType)liveType
                 completion:(nullable RCRTCLiveCallback)completion;
已复制
1
2
3

输入参数

参数 类型 必填 说明
url NSString 主播直播的 url
liveType RCRTCLiveType (opens new window) 当前直播类型
handler RCRTCLiveCallback 动作的回调,会多次回调此 block 返回主播的 RCRTCInputStream (opens new window) 的子类,根据 streamType 区分是音频流还是视频流,如主播发布了音视频流,此回调会回调两次,分别为音频的 RCRTCAudioInputStream , 和视频的 RCRTCVideoInputStream

示例代码

[[RCRTCEngine sharedInstance] subscribeLiveStream:@"从APPServer查询回来的liveUrl" 
                                         liveType:RCRTCLiveTypeAudioVideo
                                          handler:^(RCRTCCode desc, RCRTCInputStream * _Nullable inputStream) {
    if (inputStream.streamType == RTCMediaTypeVideo) {
        RCRTCRemoteVideoView *view = [[RCRTCRemoteVideoView alloc] initWithFrame:self.localView.bounds];
        view.fillMode = RCRTCVideoFillModeAspect;
        [inputStream setVideoRender:view];
        [self.view addSubview:view];
    }
}];

已复制
1
2
3
4
5
6
7
8
9
10
11

文档是否解决您的问题 ?

如果遇到产品相关问题,您可 提交工单 寻求帮助