音视频本地录制
本文主要介绍连麦过程中音视频本地录制的使用场景。
- v6.2.0 版本开始支持使用 QNMediaRecorder 进行音视频本地录制的操作
- 在 [QNRTC deinit] 之前,请先停止录制
- 支持录制格式:wav、aac、mp4
- 录制保存路径可自定义,未设置则使用默认路径 App Container/Library/Caches/Pili/RecordFile
- 音频 Track 添加混音时,混音数据不支持参与录制保存
使用方式如下:
创建 QNMediaRecorder
SDK 当前支持基于 QNLocalVideoTrack 和 QNLocalAudioTrack 的录制功能,可以通过 QNRTC.createMediaRecorder 来创建 QNMediaRecorder 对象
QNMediaRecorder *mediaRecorder = [QNRTC createMediaRecorder];
mediaRecorder.delegate = self;
其中,QNMediaRecorderDelegate 为音视频本地录制回调代理,回调方法定义如下:
/*!
* @abstract 录制信息更新回调
*
* @param recorder 媒体录制实例
*
* @param info 媒体录制完成的信息
*
* @since v6.2.0
*/
- (void)mediaRecorder:(QNMediaRecorder* _Nonnull)recorder infoDidUpdated:(QNMediaRecordInfo* _Nonnull)info;
/*!
* @abstract 录制状态发生变化回调
*
* @warning 出现错误状态时,会自动停止录制并回调错误信息
*
* @param recorder 媒体录制实例
*
* @param state 录制状态
*
* @param reason 录制错误信息
*
* @since v6.2.0
*/
- (void)mediaRecorder:(QNMediaRecorder* _Nonnull)recorder stateDidChanged:(QNMediaRecorderState)state reason:(QNMediaRecorderReasonCode)reason;
音视频本地录制的错误码可参考录制相关错误码
开始录制
需要设置录制相关配置参考如下:
- 文件路径:请确保路径完整精确到文件名和类型,存在有效且可读可写,支持 wav、aac、mp4,不设置默认保存在 App Container/Library/Caches/Pili/RecordFile。
- 音频源:可以设置麦克风或自定义音频,仅支持一路音频轨的设置,重复设置会被覆盖。
- 视频源:可以设置摄像头或自定义视频,仅支持一路视频轨的设置,重复设置会被覆盖。
参考代码如下:
QNLocalAudioTrack *audioInfo = [QNRTC createMicrophoneAudioTrack];
QNLocalVideoTrack *videoInfo = [QNRTC createCameraVideoTrack];
QNMediaRecorderConfig *mediaConfig = [[QNMediaRecorderConfig alloc] initWithFilePath:@"" localAudioTrack:audioInfo localVideoTrack:videoInfo];
int result = [mediaRecorder startRecording:mediaConfig];
if (result != 0) {
NSLog(@"开始录制发生错误 %ld", result);
}
停止录制
参考代码如下:
int result = [mediaRecorder stopRecording];
if (result != 0) {
NSLog(@"结束录制发生错误 %ld", result);
}
错误码
错误码通过 QNMediaRecorderDelegate 的 stateDidChanged
QNMediaRecorderReasonCode 回调
typedef NS_ENUM(NSInteger, QNMediaRecorderReasonCode) {
/*!
* @abstract No error 一切正常
*/
QNMediaRecorderReasonCodeNoError = 0,
/*!
* @abstract Format failed 封装格式操作失败
*/
QNMediaRecorderReasonCodeFormatFailed = 40001,
/*!
* @abstract Stream failed 流信息操作失败
*/
QNMediaRecorderReasonCodeStreamFailed = 40002,
/*!
* @abstract Write failed 录制过程中写入失败
*/
QNMediaRecorderReasonCodeWriteFailed = 40003,
/*!
* @abstract Resample failed 录制过程中重采样操作失败
*/
QNMediaRecorderReasonCodeResampleFailed = 40004,
/*!
* @abstract No track 没有可录制的流(采集中断或远端取消发布中断超过 5s)
*/
QNMediaRecorderReasonCodeNoTrack = 40005,
/*!
* @abstract Config changed 录制源配置被改变
*/
QNMediaRecorderReasonCodeConfigChanged = 40006,
/*!
* @abstract Out of memory 存储空间不足
*/
QNMediaRecorderReasonCodeOutOfMemory = 40007,
/*!
* @abstract Scale failed 录制过程中缩放操作失败
*/
QNMediaRecorderReasonCodeScaleFailed = 40008,
};
注意事项
- 录制实现相关配置时,应当务必保证保存地址、Track 有效可用
- 建议实现QNMediaRecorderDelegate回调,对应实际状态做相应处理
- 开始录制或停止录制时,根据返回值的结果做相应的业务处理,可避免后续非预期行为
- 对自定义音视频进行录制时,应当确保音视频同步传入,否则可能存在音频录制后播放非预期的情况
示例代码
音视频本地录制场景的示例代码可参考 API-Examples-iOS
文档反馈
(如有产品使用问题,请 提交工单)