本地音视频流录制
介绍采用本地音视频流录制时使用的方法和回调。
sharedMediaRecorderWithRtcEngine
创建 AgoraMediaRecorder 实例。
+ (instancetype _Nonnull)sharedMediaRecorderWithRtcEngine:(AgoraRtcEngineKit* _Nonnull)engine;
参数
- engine
- AgoraRtcEngineKit 对象。
返回值
enableMainQueueDispatch
设置是否分发回调至主队列。
- (int)enableMainQueueDispatch:(BOOL)enabled;
如果不分发回调方法到主队列,app 应将 UI 操作分发到主队列。
参数
- enabled
-
YES
:分发回调方法到主队列。NO
:不分发回调方法到主队列。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
setMediaRecorderDelegate
注册 AgoraMediaRecorderDelegate 对象。
- (int)setMediaRecorderDelegate:(AgoraRtcConnection * _Nonnull)connection delegate:(id<AgoraMediaRecorderDelegate> _Nullable)delegate;
该方法需要在初始化 AgoraRtcEngineKit 对象后调用。
参数
- connection
- Connection 信息。详见 AgoraRtcConnection。
- callback
- 本地音视频流录制回调,详见 AgoraMediaRecorderDelegate。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
startRecording
开启本地音视频流录制。
- (int)startRecording:(AgoraRtcConnection * _Nonnull)connection config:(AgoraMediaRecorderConfiguration* _Nonnull)config;
成功获取 AgoraMediaRecorder 对象后,你可以调用该方法开启本地音视频流录制。
该方法录制的是本地麦克风采集的、编码为 AAC 格式的音频或本地摄像头采集的、编码为 H.264 格式的视频。只有当检测到可录制的音视频流时,才能成功生成录制文件;当没有可录制的音视频或录制中的音视频流中断超过 5 秒后,SDK 会停止录制,并触发 stateDidChanged(AgoraMediaRecorderStateError, AgoraMediaRecorderErrorCodeNoStream)
回调。
开启本地音视频流录制后,当视频分辨率在录制过程中发生变化时,SDK 会停止录制;当音频采样率和声道数发生变化时,SDK 会持续录制并生成单个 MP4 录制文件。
参数
- connection
- Connection 信息。详见 AgoraRtcConnection。
- config
- 音视频流录制配置。详见 AgoraMediaRecorderConfiguration。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
- 2: 参数无效。请确保:
- 指定的录制文件保存路径正确且可写。
- 指定的录制文件格式正确。
- 设置的最大录制时长正确。
- 4: AgoraRtcEngineKit 当前状态不支持该操作。可能因为录制正在进行中或录制出错停止。
- 7: AgoraRtcEngineKit 尚未初始化就调用方法。请确认在调用该方法前以调用 sharedMediaRecorderWithRtcEngine。
- 2: 参数无效。请确保:
stopRecording
停止本地音视频流录制。
- (int)stopRecording:(AgoraRtcConnection * _Nonnull)connection;
参数
- connection
- Connection 信息。详见 AgoraRtcConnection。
返回值
- 0(ERR_OK): 方法调用成功
- < 0: 方法调用失败:
- -7: AgoraRtcEngineKit 尚未初始化就调用方法。请确认在调用该方法前已调用 sharedMediaRecorderWithRtcEngine。
destroy
释放 AgoraMediaRecorder 对象。
+ (void)destroy;
该方法释放 AgoraMediaRecorder 对象使用的 AgoraRtcEngineKit 对象和其他所有资源。调用该方法后,如果需要再次开启录制,需要重新调用 sharedMediaRecorderWithRtcEngine 获取 AgoraMediaRecorder 对象。
informationDidUpdated
录制信息更新回调。
- (void)mediaRecorder:(AgoraMediaRecorder* _Nonnull)recorder informationDidUpdated:(AgoraMediaRecorderInfo* _Nonnull)info;
成功注册该回调并开启本地音视频流录制后,SDK 会根据你在 AgoraMediaRecorderConfiguration 中设置的 recorderInfoUpdateInterval 的值周期性触发该回调,报告当前录制文件的文件名、时长和大小。
参数
- info
- 录制文件信息。详见 AgoraMediaRecorderInfo。
- recorder
- AgoraMediaRecorder 对象。
stateDidChanged
录制状态发生改变回调。
- (void)mediaRecorder:(AgoraMediaRecorder* _Nonnull)recorder stateDidChanged:(AgoraMediaRecorderState)state error:(AgoraMediaRecorderErrorCode)error;
本地音视频流录制状态发生改变时,SDK 会触发该回调,报告当前的录制状态和引起录制状态改变的原因。
参数
- recorder
- AgoraMediaRecorder 对象。
- state
- 当前的录制状态。详见 AgoraMediaRecorderState。
- error
- 录制状态出错的原因。详见 AgoraMediaRecorderErrorCode。