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

    # 观众上麦

    # 取消订阅

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

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

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

    参数说明

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

    示例代码

    [[RongRTCEngine sharedEngine] unsubscribeLiveAVStream:nil completion:^(BOOL isSuccess, RongRTCCode code) {}];
    
    已复制
    1
    # 加入房间

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

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

    输入参数

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

    示例代码

    - (void)joinLiveRoom {
        RongRTCRoomConfig *config = [[RongRTCRoomConfig alloc] init];
        config.roomType = RongRTCRoomTypeLive; //房间类型
        config.liveType = RongRTCLiveTypeVideo; //直播类型
    
        [[RongRTCEngine sharedEngine] joinRoom:@"房间号" config:config completion:^(RongRTCRoom * _Nullable room, RongRTCCode code) {
            self.room = room;
            self.room.delegate = self;
    
            // 创建并设置本地视频预览视图
            RongRTCLocalVideoView *localVideoView = [[RongRTCLocalVideoView alloc] initWithFrame:CGRectMake(0, 260, 180, 240)];
            [self.view addSubview:localVideoView];
            [[RongRTCAVCapturer sharedInstance] setVideoRender:localVideoView];
            
            // 开始采集音视频
            [[RongRTCAVCapturer sharedInstance] startCapture];
            
            // 发布本地音视频流资源
            [self publishLiveLocalResource];
            
            // 加入房间时已经有远端用户在房间中, 收集需要订阅的流
            if ([self.room.remoteUsers count] > 0) {
                NSMutableArray *streamArray = [NSMutableArray array];
                for (RongRTCRemoteUser *user in self.room.remoteUsers) {
                    [streamArray addObjectsFromArray:user.remoteAVStreams];
                }
                
                // 订阅远端音视频流
                [self.room subscribeAVStream:streamArray tinyStreams:nil completion:^(BOOL isSuccess, RongRTCCode 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
    # 发布资源

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

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

    - (void)publishDefaultLiveAVStream:(RongRTCLiveOperationCallback)completion;
    
    已复制
    1

    输入参数

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

    示例代码

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

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

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

    # 观众下麦

    # 离开房间

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

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

    输入参数

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

    示例代码

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

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

    - (void)subscribeLiveAVStream:(NSString *)url
                         liveType:(RongRTCLiveType)liveType
                          handler:(nullable RongRTCLiveCallback)handler;
    
    已复制
    1
    2
    3

    输入参数

    参数 类型 必填 说明
    url NSString 主播直播的 url
    liveType RongRTCLiveType 当前直播类型
    handler RongRTCLiveCallback 动作的回调,会依次回调主播的 RongRTCLiveAVInputStream ,根据 streamType 区分是音频流还是视频流,如主播发布了音视频流,此回调会回调两次,分别为音频的 RongRTCLiveAVInputStream , 和视频的 RongRTCLiveAVInputStream

    示例代码

    [[RongRTCEngine sharedEngine] subscribeLiveAVStream:@"从APPServer查询回来的liveUrl" liveType:RongRTCLiveTypeAudioVideo handler:^(RongRTCCode desc, RongRTCLiveAVInputStream * _Nullable inputStream) {
        if (inputStream.streamType == RTCMediaTypeVideo) {
            RongRTCRemoteVideoView *view = [[RongRTCRemoteVideoView alloc] initWithFrame:self.localView.bounds];
            view.fillMode = RCVideoFillModeAspect;
            [inputStream setVideoRender:view];
            [self.view addSubview:view];
        }
    }];
    
    
    已复制
    1
    2
    3
    4
    5
    6
    7
    8
    9

    文档是否解决您的问题 ?

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