实时音视频云

  • 媒体流配置

    最近更新时间:2018-06-29 15:51:28

    本部分介绍实时音视频中的本地媒体流、远端媒体流。

    本地媒体流

    创建本地媒体流

    本地媒体流 QNRTCSession 包含了本地设备所采集的音视频信息,是音视频通话所需要的基本数据。

    使用初始化方法创建连麦 session 对象

    self.session = [[QNRTCSession alloc] init];
    self.session.delegate = self;
    

    配置音视频静默开关

    在发布音/视频后,如果想临时关闭自己的音/视频,可以打开音/视频的静默开关,即置为 YES。

    /**
     *  是否使自己发布到服务器上的声音静音,注意:在离开房间后 SDK 并不会重置该值,即会保持您上次设置的值
     */
    @property (nonatomic, assign, getter=isMuteAudio) BOOL muteAudio;
    
    /**
     *  是否使自己发布到服务器上的视频黑屏,注意:在离开房间后 SDK 并不会重置该值,即会保持您上次设置的值
     */
    @property (nonatomic, assign, getter=isMuteVideo) BOOL muteVideo;
    

    两个属性控制是否允许音频、视频,默认都为关闭,即允许远端用户看到/听到自己的视频/声音。

    设置仅音频流开启

    self.session.muteAudio = NO;
    self.session.muteVideo = YES;
    

    设置仅视频流开启

    self.session.muteAudio = YES;
    self.session.muteVideo = NO;
    

    配置预览视图

    配置本地预览视图的大小及位置。

    /*!
     * @abstract 摄像头的预览视图,调用 startCapture 后才会有画面
     *
     */
    @property (nonatomic, strong, readonly) UIView *previewView;
    
    self.session.previewView.frame = self.view.frame;
    [self.view insertSubview:self.session.previewView atIndex:0];
    

    配置预览视图 previewView 中视频的填充方式,默认使用 PLVideoFillModePreserveAspectRatioAndFill。

    @property(readwrite, nonatomic) QNVideoFillModeType fillMode;
    

    配置采集分辨率

    配置视频采集的分辨率 sessionPreset,默认为 AVCaptureSessionPreset640x480。

    @property (nonatomic, copy) NSString *sessionPreset;
    

    配置采集帧率

    配置采集的视频数据的帧率 videoFrameRate,默认为 24

    @property (nonatomic, assign) NSUInteger videoFrameRate;
    

    配置连麦码率范围

    配置最大、最小码率,根据网络条件在该范围值之间自动调

    - (void)setMinBitrateBps:(NSUInteger)minBitrateBps
               maxBitrateBps:(NSUInteger)maxBitrateBps;
    

    远端媒体流

    获取远端媒体流

    获取到该用户(userId)远端媒体流,并渲染到本地用户界面
    通过 RTCSession:firstVideoDidDecodeOfRemoteUserId: 回调方法获取该用户(userId)的远端媒体流。

    - (QNVideoRender *)RTCSession:(QNRTCSession *)session firstVideoDidDecodeOfRemoteUserId:(NSString *)userId;
    

    在该回调中实现 QNVideoRender 的初始化以及设置返回

    - (QNVideoRender *)RTCSession:(QNRTCSession *)session firstVideoDidDecodeOfRemoteUserId:(NSString *)userId {
        QNVideoRender *render = [[QNVideoRender alloc] init];
        QNVideoView *videoView = [[QNVideoView alloc] initWithFrame:CGRectMake(100, 20, 180, 320)];
        [self.view addSubview:videoView];
        return render;
    }
    

    取消渲染远端媒体流

    本地用户取消渲染该远端用户(userId)的媒体流
    通过 RTCSession:didDetachRenderView:ofRemoteUserId: 回调方法取消渲染该用户(userId)的远端媒体流。

    - (void)RTCSession:(QNRTCSession *)session didDetachRenderView:(UIView *)renderView ofRemoteUserId:(NSString *)userId;
    

    在该回调中移除对远端用户媒体流 QNVideoRender 的渲染

    - (void)RTCSession:(QNRTCSession *)session didDetachRenderView:(UIView *)renderView ofRemoteUserId:(NSString *)userId {
        [renderView removeFromSuperview];
    }
    
    以上内容是否对您有帮助?
  • Icon free helper
    Close