音视频录制
createMediaRecorder
创建音视频录制对象。
virtual agora_refptr<IMediaRecorder> createMediaRecorder(const RecorderStreamInfo& info) = 0;
详情
在开始音视频流录制前,你需要调用该方法创建一个音视频录制对象。SDK 支持录制本地或远端用户的多个音视频流,你可以多次调用该方法创建录制对象,并通过 info 参数指定需要录制的频道名称和发流的用户 ID。
成功创建后,你需要调用 setMediaRecorderObserver 注册录制对象的观测器来监听录制的相关回调,然后再调用 startRecording 开始录制。
参数
- info
- 需要录制的音视频流相关信息,详见 RecorderStreamInfo。
返回值
- 方法调用成功:返回一个 IMediaRecorder 对象。
- 方法调用失败:返回空指针。
destroyMediaRecorder
销毁音视频录制对象。
virtual int destroyMediaRecorder(agora_refptr<IMediaRecorder> mediaRecorder) = 0;
详情
当你不需要再录制音视频流时,可以调用该方法销毁对应的音视频录制对象。如果你正在录制,请先调用 stopRecording 停止录制,再调用该方法来销毁音视频录制对象。
参数
- mediaRecorder
- 待销毁的 IMediaRecorder 对象。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
setMediaRecorderObserver
注册 IMediaRecorderObserver
观测器。
virtual int setMediaRecorderObserver(media::IMediaRecorderObserver* callback) = 0;
详情
该方法用于设置音视频录制的回调,以便在录制过程中向 App 通知音视频流的录制状态和信息。
- 已创建并初始化 IRtcEngine 对象。
- 已通过 createMediaRecorder 创建音视频录制对象。
参数
- callback
- 音视频流录制回调,详见 IMediaRecorderObserver。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
startAudioRecording [1/3]
开始客户端录音。
virtual int startAudioRecording(const char* filePath, AUDIO_RECORDING_QUALITY_TYPE quality) = 0;
详情
.wav
: 文件大,音质保真度高;.aac
: 文件小,有一定的音质保真度损失。
请确保 App 里指定的目录存在且可写。该接口需在 joinChannel [2/2] 之后调用。如果调用 leaveChannel [2/2] 时还在录音,录音会自动停止。
参数
- filePath
- 录音文件在本地保存的绝对路径,需精确到文件名及格式。例如:
C:\music\audio.aac
。注意请确保你指定的路径存在并且可写。
- quality
- 录音质量。详见 AUDIO_RECORDING_QUALITY_TYPE。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
startAudioRecording [2/3]
开始客户端录音并设置录音采样率。
virtual int startAudioRecording(const char* filePath,
int sampleRate,
AUDIO_RECORDING_QUALITY_TYPE quality) = 0;
详情
- .wav: 文件大,音质保真度较高。
- .aac: 文件小,音质保真度较低。
- 请确保你在该方法中指定的路径存在并且可写。
- 该接口需在 joinChannel [2/2] 之后调用。如果调用 leaveChannel [2/2] 时还在录音,录音会自动停止。
- 为保证录音效果,当 sampleRate 设为 44.1 kHz 或 48 kHz 时,建议将 quality 设为 AUDIO_RECORDING_QUALITY_MEDIUM 或 AUDIO_RECORDING_QUALITY_HIGH 。
参数
- filePath
- 录音文件在本地保存的绝对路径,需精确到文件名及格式。例如:
C:\music\audio.aac
。注意请确保你指定的路径存在并且可写。
- sampleRate
- 录音采样率(Hz),可以设为以下值:
- 16000
- 32000(默认)
- 44100
- 48000
- quality
- 录音音质。详见 AUDIO_RECORDING_QUALITY_TYPE 。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
startAudioRecording [3/3]
开始客户端录音并进行录音配置。
virtual int startAudioRecording(const AudioFileRecordingConfig& config) = 0;
- WAV: 音质保真度较高,文件较大。例如,采样率为 32000 Hz,录音时长为 10 分钟的文件大小约为 73 M。
- AAC: 音质保真度较低,文件较小。例如,采样率为 32000 Hz,录音音质为 AUDIO_RECORDING_QUALITY_MEDIUM,录音时长为 10 分钟的文件大小约为 2 M。
用户离开频道后,录音会自动停止。
调用时机
该方法需要在加入频道后调用。
调用限制
无。
参数
- config
- 录音配置。详见 AudioRecordingConfiguration。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
startRecording
开启音视频流录制。
virtual int startRecording(const media::MediaRecorderConfiguration& config) = 0;
详情
该方法用于开启音视频流录制。声网 SDK 支持同时录制本地及远端用户的音视频流。
- 已通过 createMediaRecorder 创建音视频录制对象。
- 已调用 setMediaRecorderObserver 注册录制对象观测器来监听录制的相关回调。
- 已加入频道。
- 麦克风采集的、AAC 编码格式的音频。
- 摄像头采集的、H.264 或 H.265 编码格式的视频。
开启音视频流录制后,当视频分辨率在录制过程中发生变化时,SDK 会停止录制;当音频采样率和声道数发生变化时,SDK 会持续录制并生成单个 MP4 录制文件。
仅当检测到可录制的音视频流时,才能成功生成录制文件;如果没有可录制的音视频流,或在录制过程中的音视频流中断超过 5 秒后,SDK 会停止录制,并触发 onRecorderStateChanged(RECORDER_STATE_ERROR, RECORDER_ERROR_NO_STREAM
) 回调。
- 如果你需要录制的是本地的音视频流,请在开始录制前确保本地用户的角色设为主播。
- 如果你需要录制的是远端用户的音视频流,请在开始录制前确保已经订阅了该用户的音视频流。
参数
- config
- 音视频流录制配置。详见 MediaRecorderConfiguration。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
- -2: 参数无效。请确保:
- 指定的录制文件保存路径正确且可写。
- 指定的录制文件格式正确。
- 设置的最大录制时长正确。
- -4: IRtcEngine 当前状态不支持该操作。可能因为录制正在进行中或录制出错停止。
- -7: IRtcEngine 尚未初始化就调用方法。请确认在调用该方法前已创建 IMediaRecorder 对象。
- -2: 参数无效。请确保:
stopAudioRecording
stopRecording
停止音视频流录制。
virtual int stopRecording() = 0;
详情
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败:
- -7: IRtcEngine 尚未初始化就调用方法。请确认在调用该方法前已创建 IMediaRecorder 对象。
onRecorderInfoUpdated
录制信息更新回调。
virtual void onRecorderInfoUpdated(const char* channelId, rtc::uid_t uid, const RecorderInfo& info) = 0;
详情
成功注册该回调并开启音视频流录制后,SDK 会根据你在 MediaRecorderConfiguration 中设置的 recorderInfoUpdateInterval 的值周期性触发该回调,报告当前录制文件的文件名、时长和大小。
参数
- channelId
- 频道名称。
- uid
- 用户 ID。
- info
- 录制文件信息。详见 RecorderInfo。
onRecorderStateChanged
录制状态发生改变回调。
virtual void onRecorderStateChanged(const char* channelId, rtc::uid_t uid, RecorderState state, RecorderReasonCode reason) = 0;
详情
音视频流录制状态发生改变时,SDK 会触发该回调,报告当前的录制状态和引起录制状态改变的原因。
参数
- channelId
- 频道名称。
- uid
- 用户 ID。
- state
- 当前的录制状态。详见 RecorderState。
- error
- 录制状态出错的原因。详见 RecorderReasonCode。