实时音视频云

  • 媒体流采集

    最近更新时间:2018-08-31 18:44:08

    介绍如何开启、结束音视频录制;介绍如何进行录制布局;介绍预览、闪光灯、对焦、镜像、切换摄像头等常用操作。

    开启/关闭视频采集

    开启摄像头采集后,才能看到摄像头预览画面

    - (void)startCapture;
    

    关闭摄像头采集后

    - (void)stopCapture;
    

    音频采集

    音频采集由 SDK 内部自动控制,如果发布媒体流时允许发布音频流,那么在发布成功时 SDK 内部便会自动开启音频采集,同时在停止发布/离开房间时关闭音频采集。

    摄像头相关配置

    采集摄像头的位置 captureDevicePosition,默认使用 AVCaptureDevicePositionFront 前置摄像头

    @property (nonatomic, assign) AVCaptureDevicePosition   captureDevicePosition;
    

    连麦过程中,可通过调用 toggleCamera 切换摄像头

    - (void)toggleCamera;
    

    采集摄像头的旋转方向 videoOrientation,默认使用 AVCaptureVideoOrientationPortrait 竖屏采集,横屏采集时可以配置为 AVCaptureVideoOrientationLandscapeRightAVCaptureVideoOrientationLandscapeLeft

    @property (nonatomic, assign) AVCaptureVideoOrientation videoOrientation;
    

    previewView

    摄像头的预览视图

    @property (nonatomic, strong, readonly) UIView *previewView;
    

    注意:摄像头的预览视图 previewView,需要调用 startCapture 后才会有画面。

    可通过 fillMode 调整 previewView 的填充方式

    @property(readwrite, nonatomic) QNVideoFillModeType fillMode;
    

    画面缩放

    videoZoomFactor 默认为 1.0,设置的数值需要小于等于 videoActiveForat.videoMaxZoomFactor,如果大于会设置失败。

    @property (nonatomic, assign) CGFloat videoZoomFactor;
    

    分辨率

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

    @property (nonatomic, copy) NSString *sessionPreset;
    

    帧率

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

    @property (nonatomic, assign) NSUInteger videoFrameRate;
    

    预览镜像

    前置摄像头预览是否开启镜像,默认为 YES

    @property (nonatomic, assign) BOOL previewMirrorFrontFacing;
    

    后置摄像头预览是否开启镜像,默认为 NO

    @property (nonatomic, assign) BOOL previewMirrorRearFacing;
    

    编码镜像

    前置摄像头,对方观看时是否开启镜像,默认 NO

    @property (nonatomic, assign) BOOL encodeMirrorFrontFacing;
    

    后置摄像头,对方观看时是否开启镜像,默认 NO

    @property (nonatomic, assign) BOOL encodeMirrorRearFacing;
    

    注意:编码镜像决定了观看者的画面是否镜像。

    连麦码率

    设置连麦的最大、最小码率,根据网络条件在该范围值之间自动调整。

    - (void)setMinBitrateBps:(nullable NSNumber *)minBitrateBps
               maxBitrateBps:(nullable NSNumber *)maxBitrateBps;
    

    连麦编码尺寸

    设置连麦编码时的尺寸,即使用预览的尺寸

    @property (nonatomic, assign) CGSize videoEncodeSize;
    

    对焦

    连续自动对焦,默认为 YES

    @property (nonatomic, assign, getter=isContinuousAutofocusEnable) BOOL  continuousAutofocusEnable;
    

    手动点击屏幕进行对焦,默认为 YES

    @property (nonatomic, assign, getter=isTouchToFocusEnable) BOOL touchToFocusEnable;
    

    自动对焦,适用于视频拍摄过程中用来减缓因自动对焦产生的镜头伸缩,使画面不因快速的对焦而产生抖动感,默认为 YES

    @property (nonatomic, assign, getter=isSmoothAutoFocusEnabled) BOOL  smoothAutoFocusEnabled;
    

    手动对焦的位置,默认为 (0.5, 0.5), (0,0) 代表左上方, (1,1) 代表右下方

    @property (nonatomic, assign) CGPoint focusPointOfInterest;
    

    美颜

    是否开启美颜

    -(void)setBeautifyModeOn:(BOOL)beautifyModeOn;
    

    设置美颜 Beauty 的程度值,范围从 0 ~ 1,0 为不美颜

    -(void)setBeautify:(CGFloat)beautify;
    

    注意:若美颜未开启,则设置以下两个参数无效

    设置美白 whiten 的程度值,范围从 0 ~ 1,0 为不美白

    -(void)setWhiten:(CGFloat)whiten;
    

    设置红润 redden 的程度值,范围从 0 ~ 1,0 为不红润

    -(void)setWhiten:(CGFloat)whiten;
    

    扬声器

    是否使扬声器静音

    @property (nonatomic, assign, getter=isMuteSpeaker) BOOL muteSpeaker;
    

    手电筒

    设备手电筒,默认为 NO

    @property (nonatomic, assign, getter=isTorchOn) BOOL torchOn;
    

    设备授权

    通过类方法 cameraAuthorizationStatus,获取摄像头的授权状态

    + (QNAuthorizationStatus)cameraAuthorizationStatus;
    

    调用如下方法,可获取摄像头权限,且 handler 将会在主线程中回调。

    + (void)requestCameraAccessWithCompletionHandler:(void (^)(BOOL granted))handler;
    

    通过类方法 microphoneAuthorizationStatus,获取麦克风的授权状态

    + (QNAuthorizationStatus)microphoneAuthorizationStatus;
    

    调用如下方法,可获取麦克风权限,且 handler 将会在主线程中回调。

    + (void)requestMicrophoneAccessWithCompletionHandler:(void (^)(BOOL granted))handler;
    

    外部导入媒体流

    一般情况下,我们建议使用 SDK 内置的音视频采集模块。但是如果您需要实现一些特定的需求(如:录屏),可以关闭 SDK 内置的音视频采集模块,然后导入自己的音视频数据。具体步骤如下:

    创建 session 对象

    通过以下方法创建 session 对象,captureEnabled 参数传入 NO

    - (instancetype)initWithCaptureEnabled:(BOOL)captureEnabled;
    

    导入视频数据

    通过如下方法导入视频数据

    /**
     *  导入视频数据,仅在 captureEnabled 为 NO 时才支持导入视频数据
     */
    - (void)pushPixelBuffer:(CVPixelBufferRef)pixelBuffer;
    

    如果视频数据是 CMSampleBufferRef 格式,也可以通过如下方法导入

    /**
     *  导入视频数据,仅在 captureEnabled 为 NO 时才支持导入视频数据
     */
    - (void)pushVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer;
    

    导入音频数据

    通过如下方法导入视频数据

    /**
     *  导入音频数据,仅在 captureEnabled 为 NO 时才支持导入音频数据
     *  支持的音频数据格式为:PCM 格式,48000 采样率,16 位宽,单声道
     */
    - (void)pushAudioBuffer:(AudioBuffer *)audioBuffer;
    

    录屏

    从 iOS 11 开始,ReplayKit 录屏接口支持回调原始数据,我们仅需将其回调的视频数据导入到 SDK 中,即可实现屏幕分享等功能,关于如何导入视频数据,可参考上一小节内容。使用 ReplayKit 录屏并导入数据示例如下:

    if (@available(iOS 11.0, *)) {
            [[RPScreenRecorder sharedRecorder] startCaptureWithHandler:^(CMSampleBufferRef  _Nonnull sampleBuffer, RPSampleBufferType bufferType, NSError * _Nullable error) {
                if (bufferType == RPSampleBufferTypeVideo) {
                    CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
                    [self.session pushPixelBuffer:pixelBuffer];
                }
            } completionHandler:^(NSError * _Nullable error) {
                if (error) {
                    NSLog(@"startCaptureWithHandler error: %@", error);
                }
            }];
        } else {
            // Fallback on earlier versions
        }
    
    以上内容是否对您有帮助?
  • Icon free helper
    Close