音视频采集
音视频 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