实时音视频

  • 实时音视频 > 使用指南 > iOS >音视频采集

    音视频采集

    最近更新时间: 2022-09-08 11:58:18

    音视频 Track 为音视频交互的基本单位,本部分介绍音视频 Track 的创建及采集等功能的使用。

    • 一路 Track 代表一路音频或者视频的数据
    • SDK 支持创建并发布多路视频 Track,但是仅支持同时创建一路音频 Track,重复创建将会失败

    摄像头视频 Track

    QNCameraVideoTrack 为摄像头采集的本地 Track,其创建方式如下:

    // 初始化视频编码配置
    QNVideoEncoderConfig *config = [[QNVideoEncoderConfig alloc] initWithBitrate:2500 videoEncodeSize:CGSizeMake(720, 1280)];
    QNCameraVideoTrackConfig *cameraVideoTrackConfig = [[QNCameraVideoTrackConfig alloc] initWithSourceTag:@"camera" config:config multiStreamEnable:NO]; 
    QNCameraVideoTrack *cameraVideoTrack = [QNRTC createCameraVideoTrackWithConfig:cameraVideoTrackConfig];
    

    其中,QNVideoEncoderConfig 用来配置视频的编码参数,包括分辨率、帧率和码率(kbps)等。

    注意:编码分辨率配置 videoEncodeSize 时,需要同步设置预览分辨率 videoFormat,保证预览分辨率的宽高大于编码分辨率的宽高,否则设置不生效。

    在创建好 QNCameraVideoTrack 之后,就可以通过调用 SDK 提供的相关方法进行摄像头的相关操作:

    开始/停止摄像头采集

    通过调用 QNCameraVideoTrack.startCapture 接口进行摄像头采集,通过调用 QNCameraVideoTrack.stopCapture 接口停止摄像头采集,通过添加 QNVideoGLView 设置摄像头采集的预览视图。

    // 开始摄像头采集
    [cameraVideoTrack startCapture];
    // 停止摄像头采集
    [cameraVideoTrack stopCapture];
    // 设置摄像头预览视图
    QNVideoGLView *preview = [[QNVideoGLView alloc] init];
    preview.frame = CGRectMake(0, 0, 360, 640);
    [self.view addSubview:preview];
    

    注意:App 在进退前后台的过程中,进入后台需要通过调用 stopCapture 停止采集,回到前台调用 startCapture 恢复采集。

    开启/关闭预览

    通过调用 QNCameraVideoTrack.play 接口进行预览画面的开关控制:

    // 开启预览
    [cameraVideoTrack play:preview];
    // 关闭预览
    [cameraVideoTrack play:nil];
    

    开启/关闭手电筒

    通过设置属性 QNCameraVideoTrack.torchOn 接口开启和关闭手电筒

    // 开启手电筒
    cameraVideoTrack.torchOn = YES;
    // 关闭手电筒
    cameraVideoTrack.torchOn = NO;
    

    切换摄像头

    通过调用 QNCameraVideoTrack.switchCamera 接口进行摄像头的切换。

    [cameraVideoTrack switchCamera];
    

    设置缩放

    通过设置属性 QNCameraVideoTrack.videoZoomFactor 对相机采集的画面进行缩放。

    注意:设置的数值需要小于等于 videoActiveFormat.videoMaxZoomFactor,如果大于会设置失败

    cameraVideoTrack.videoZoomFactor = 1.0;
    

    开启/关闭镜像

    SDK 内提供了前置预览镜像、后置预览镜像、前置编码镜像以及后置编码镜像共四种镜像接口,通过调用对应的属性接口即可开启或关闭镜像。

    // 开启前置预览镜像
    cameraVideoTrack.previewMirrorFrontFacing = YES;
    // 关闭后置预览镜像
    cameraVideoTrack.previewMirrorRearFacing = NO;
    // 开启前置编码镜像
    cameraVideoTrack.encodeMirrorFrontFacing = YES;
    // 关闭后置编码镜像
    cameraVideoTrack.encodeMirrorRearFacing = NO;
    

    注意:开启了预览镜像仅仅在本地预览才会镜像,远端看还是正常的画面;编码镜像则决定了远端观看您的用户,观看时是否会有镜像效果。

    美颜

    通过调用 QNCameraVideoTrack.setBeautifyModeOn 接口进行内置美颜的开关。

    // 打开内置美颜
    [cameraVideoTrack setBeautifyModeOn:YES];
    

    美颜的具体参数可以通过以下三个方法进行设置:

    // 设置磨皮程度为 0.5
    [cameraVideoTrack setSmoothLevel:0.5];
    // 设置美白程度为 0.5
    [cameraVideoTrack setWhiten:0.5];
    // 设置红润程度为 0.5
    [cameraVideoTrack setRedden:0.5];
    

    如需接入第三方美颜或者滤镜,可以通过 QNLocalVideoTrackDelegate.didGetPixelBuffer 的视频数据回调来实现。

    屏幕录制视频 Track

    QNScreenVideoTrack 为屏幕录制的本地 Track,使用方式如下:

    判断设备是否支持屏幕录制

    屏幕录制依赖 iOS 的系统版本,可通过 SDK 提供的如下接口判断是否支持:

    + (BOOL)isScreenRecorderAvailable;
    

    示例代码如下:

    BOOL isSupported = [QNScreenVideoTrack isScreenRecorderAvailable];
    

    创建 Screen Track

    在通过了屏幕录制申请后,可以通过如下方式进行录屏 Track 的创建:

    // 初始化视频编码配置
    QNVideoEncoderConfig *config = [[QNVideoEncoderConfig alloc] initWithBitrate:600 videoEncodeSize:CGSizeMake(720, 1280)];
    QNScreenVideoTrackConfig *screenVideoTrackConfig = [[QNScreenVideoTrackConfig alloc] initWithSourceTag:@"screen" config:config multiStreamEnable:NO];
    QNScreenVideoTrack *screenVideoTrack = [QNRTC createScreenVideoTrackWithConfig:screenVideoTrackConfig];
    

    外部导入视频 Track

    SDK 外部导入视频连麦支持导入的视频数据格式有 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange 以及 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange 两种格式的数据,使用方式如下:

    创建外部导入视频 Track

    QNCustomVideoTrack 为外部数据导入视频 Track,创建方式如下:

    QNVideoEncoderConfig *config = [[QNVideoEncoderConfig alloc] initWithBitrate:600];
    QNCustomVideoTrackConfig *customVideoTrackConfig = [[QNCustomVideoTrackConfig alloc] initWithTag:@"custom" config:config];
    QNCustomVideoTrack *customVideoTrack = [QNRTC createCustomVideoTrackWithConfig:customVideoTrackConfig];
    

    数据导入

    导入 CMSampleBufferRef 数据

    SDK 支持导入视频数据,使用 QNCustomVideoTrack.pushVideoSampleBuffer 推送视频数据:

    [customVideoTrack pushVideoSampleBuffer:sampleBuffer];
    

    导入 CVPixelBufferRef 数据

    SDK 支持导入纹理数据,使用 QNCustomVideoTrack.pushPixelBuffer 推送纹理数据:

    [customVideoTrack pushPixelBuffer:pixelBuffer];
    

    麦克风音频 Track

    QNMicrophoneAudioTrack 为麦克风采集的音频 ,如需以麦克风采集数据作为音频源,仅需创建一个 QNMicrophoneAudioTrack 为麦克风采集的音频 Track 并发布即可,其创建方式如下:

    QNAudioQuality *audioQuality = [[QNAudioQuality alloc] initWithBitrate:64];
    QNMicrophoneAudioTrackConfig *microphoneAudioTrackConfig = [[QNMicrophoneAudioTrackConfig alloc] initWithTag:@"microphone" audioQuality:audioQuality];
    QNMicrophoneAudioTrack *microphoneAudioTrack = [QNRTC createMicrophoneAudioTrackWithConfig:microphoneAudioTrackConfig];
    

    其中,QNAudioQuality 代表音频的质量参数,包括编码码率。

    注意:SDK 当前仅支持一路音频 Track,因此,在创建了 QNMicrophoneAudioTrack 之后,将无法再创建 QNCustomAudioTrack 实例。

    外部导入音频 Track

    SDK 外部导入音频支持的音频数据格式为:PCM 格式,48000 采样率,16 位宽,单声道。 使用方式如下:

    创建外部导入音频 Track

    QNCustomAudioTrack 为外部数据导入音频 Track,创建方式如下:

    QNAudioQuality *audioQuality = [[QNAudioQuality alloc] initWithBitrate:64];
    QNCustomAudioTrackConfig *customAudioTrackConfig = [[QNCustomAudioTrackConfig alloc] initWithTag:@"custom" audioQuality:audioQuality];
    QNCustomAudioTrack *customAudioTrack = [QNRTC createCustomAudioTrackWithConfig:customAudioTrackConfig];
    

    数据导入:

    可通过调用 QNCustomAudioTrack.pushAudioBuffer 进行外部音频数据的导入,使用方式如下:

    [customAudioTrack pushAudioBuffer:audioBuffer];
    

    注意:SDK 当前仅支持一路音频 Track,因此,在创建了 QNCustomAudioTrack 之后,将无法再创建 QNMicrophoneAudioTrack 实例。

    示例代码

    音视频采集场景的示例代码可参考 API-Examples-iOS

    以上内容是否对您有帮助?
  • Qvm free helper
    Close