音视频录制
createMediaRecorder
创建音视频录制对象。
- (AgoraMediaRecorder * _Nullable)createMediaRecorder:(AgoraRecorderStreamInfo * _Nonnull)info NS_SWIFT_NAME(createMediaRecorder(withInfo:));
v4.2.0
在开始音视频流录制前,你需要调用该方法创建一个音视频录制对象。SDK 支持录制本地或远端用户的多个音视频流,你可以多次调用该方法创建录制对象,并通过 info
参数指定需要录制的频道名称和发流的用户 ID。
成功创建后,你需要调用 setMediaRecorderDelegate
注册录制对象的观测器来监听录制的相关回调,然后再调用 startRecording
开始录制。
参数
参数名 | 描述 |
---|---|
info | 需要录制的音视频流相关信息,详见 |
返回值
-
方法调用成功:返回一个
AgoraMediaRecorder
对象。 -
方法调用失败:返回空指针。
destroyMediaRecorder
销毁音视频录制对象。
- (int)destroyMediaRecorder:(AgoraMediaRecorder * _Nullable)mediaRecorder;
v4.2.0
当你不需要再录制音视频流时,可以调用该方法销毁对应的音视频录制对象。如果你正在录制,请先调用 stopRecording
停止录制,再调用该方法来销毁音视频录制对象。
参数
参数名 | 描述 |
---|---|
mediaRecorder | 待销毁的音视频录制对象。 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
enableMainQueueDispatch
setMediaRecorderDelegate
注册 AgoraMediaRecorderDelegate
观测器。
- (int)setMediaRecorderDelegate:(id<AgoraMediaRecorderDelegate> _Nullable)delegate;
该方法用于设置音视频录制的回调,以便在录制过程中向 app 通知音视频流的录制状态和信息。
调用该方法前请确保:
-
已创建并初始化
AgoraRtcEngineKit
对象。 -
已通过
createMediaRecorder
创建音视频录制对象。
参数
参数名 | 描述 |
---|---|
delegate | 音视频流录制回调,详见 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
startAudioRecording [1/2]
开始客户端录音。
- (int)startAudioRecording:(NSString * _Nonnull)filePath
quality:(AgoraAudioRecordingQuality)quality;
注意: 调用该方法时,默认的录音采样率为 32 kHz,不可修改。 SDK 支持通话过程中在客户端进行录音。该方法录制频道内所有用户的音频,并生成一个包含所有用户声音的录音文件,录音文件格式可以为:
-
.wav
: 文件大,音质保真度高; -
.aac
: 文件小,有一定的音质保真度损失。
请确保 App 里指定的目录存在且可写。该接口需在 joinChannelByToken [2/4]
之后调用。如果调用 leaveChannel [2/2]
时还在录音,录音会自动停止。
参数
参数名 | 描述 |
---|---|
filePath | 录音文件在本地保存的绝对路径,需精确到文件名及格式。例如: |
quality | 录音质量。详见 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
startAudioRecording [2/2]
开始客户端录音并进行录音配置。
- (int)startAudioRecordingWithConfig:(AgoraAudioRecordingConfiguration * _Nonnull)config;
SDK 支持通话过程中在客户端进行录音。调用该方法后,你可以录制频道内用户的音频,并得到一个录音文件。录音文件格式可以为:
-
WAV: 音质保真度较高,文件较大。例如,采样率为 32000 Hz,录音时长为 10 分钟的文件大小约为 73 M。
-
AAC: 音质保真度较低,文件较小。例如,采样率为 32000 Hz,录音音质为 AgoraAudioRecordingQualityMedium,录音时长为 10 分钟的文件大小约为 2 M。
用户离开频道后,录音会自动停止。
注意: 该方法需要在加入频道后调用。
参数
参数名 | 描述 |
---|---|
config | 录音配置。详见 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
startRecording
开启音视频流录制。
- (int)startRecording:(AgoraMediaRecorderConfiguration* _Nonnull)config;
该方法用于开启音视频流录制。声网 SDK 支持同时录制本地及远端用户的音视频流。
在开始录制前请确保:
-
已通过
createMediaRecorder
创建音视频录制对象。 -
已调用
setMediaRecorderDelegate
注册录制对象观测器来监听录制的相关回调。 -
已加入频道。
该方法支持录制如下数据:
-
麦克风采集的、AAC 编码格式的音频。
-
摄像头采集的、H.264 或 H.265 编码格式的视频。
开启音视频流录制后,当视频分辨率在录制过程中发生变化时,SDK 会停止录制;当音频采样率和声道数发生变化时,SDK 会持续录制并生成单个 MP4 录制文件。
仅当检测到可录制的音视频流时,才能成功生成录制文件;如果没有可录制的音视频流,或在录制过程中的音视频流中断超过 5 秒后,SDK 会停止录制,并触发
回调。stateDidChanged
(AgoraMediaRecorderStateError
, AgoraMediaRecorderErrorCodeNoStream
)
注意:
-
如果你需要录制的是本地的音视频流,请在开始录制前确保本地用户的角色设为主播。
-
如果你需要录制的是远端用户的音视频流,请在开始录制前确保已经订阅了该用户的音视频流。
参数
参数名 | 描述 |
---|---|
config | 音视频流录制配置。详见 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。-
-2: 参数无效。请确保:
-
指定的录制文件保存路径正确且可写。
-
指定的录制文件格式正确。
-
设置的最大录制时长正确。
-
-
-4:
AgoraRtcEngineKit
当前状态不支持该操作。可能因为录制正在进行中或录制出错停止。 -
-7:
AgoraRtcEngineKit
尚未初始化就调用方法。请确认在调用该方法前已创建AgoraMediaRecorder
对象。
-
stopAudioRecording
stopRecording
停止音视频流录制。
- (int)stopRecording;
注意: 调用 startRecording
后,如果要停止录制,请调用该方法停止录制;否则,生成的录制文件可能无法正常播放。
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败:
-
-7:
AgoraRtcEngineKit
尚未初始化就调用方法。请确认在调用该方法前已创建AgoraMediaRecorder
对象。
-
informationDidUpdated
录制信息更新回调。
- (void)mediaRecorder:(AgoraMediaRecorder* _Nonnull)recorder informationDidUpdated:(NSString * _Nonnull)channelId uid:(NSUInteger)uid info:(AgoraMediaRecorderInfo* _Nonnull)info;
成功注册该回调并开启音视频流录制后,SDK 会根据你在 AgoraMediaRecorderConfiguration
中设置的 recorderInfoUpdateInterval
的值周期性触发该回调,报告当前录制文件的文件名、时长和大小。
参数
参数名 | 描述 |
---|---|
channelId | 频道名称。 |
uid | 用户 ID。 |
info | 录制文件信息。详见 |
recorder |
stateDidChanged
录制状态发生改变回调。
- (void)mediaRecorder:(AgoraMediaRecorder* _Nonnull)recorder stateDidChanged:(NSString * _Nonnull)channelId uid:(NSUInteger)uid state:(AgoraMediaRecorderState)state error:(AgoraMediaRecorderErrorCode)error;
音视频流录制状态发生改变时,SDK 会触发该回调,报告当前的录制状态和引起录制状态改变的原因。
参数
参数名 | 描述 |
---|---|
recorder | |
channelId | 频道名称。 |
uid | 用户 ID。 |
state | 当前的录制状态。详见 |
error | 录制状态出错的原因。详见 |