实时音视频

  • 实时音视频 > 使用指南 > iOS >音视频本地录制

    音视频本地录制

    最近更新时间: 2024-06-28 16:41:07

    本文主要介绍连麦过程中音视频本地录制的使用场景。

    • v6.2.0 版本开始支持使用 QNMediaRecorder 进行音视频本地录制的操作
    • 在 [QNRTC deinit] 之前,请先停止录制
    • 支持录制格式:wav、aac、mp4
    • 录制保存路径可自定义,未设置则使用默认路径 App Container/Library/Caches/Pili/RecordFile
    • 音频 Track 添加混音时,混音数据不支持参与录制保存

    使用方式如下:

    创建 QNMediaRecorder

    SDK 当前支持基于 QNLocalVideoTrackQNLocalAudioTrack 的录制功能,可以通过 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);
    }
    

    错误码

    错误码通过 QNMediaRecorderDelegatestateDidChanged 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,
    };
    

    注意事项

    1. 录制实现相关配置时,应当务必保证保存地址、Track 有效可用
    2. 建议实现QNMediaRecorderDelegate回调,对应实际状态做相应处理
    3. 开始录制或停止录制时,根据返回值的结果做相应的业务处理,可避免后续非预期行为
    4. 对自定义音视频进行录制时,应当确保音视频同步传入,否则可能存在音频录制后播放非预期的情况

    示例代码

    音视频本地录制场景的示例代码可参考 API-Examples-iOS

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