音视频录制
createMediaRecorder
创建用于音视频录制的录制器实例。
Java
public abstract AgoraMediaRecorder createMediaRecorder(RecorderStreamInfo info);
在开始录制音视频流之前,你需要调用该方法创建一个录制器实例。你可以多次调用该方法创建多个录制器,并通过 info 参数指定要录制的频道名和用户 ID。 成功创建录制器后,你需要调用 setMediaRecorderObserver 为录制器注册观察者以监听录制相关的回调,然后调用 startRecording 开始录制。
参数
- info
- 要录制的音视频流的信息。详见 RecorderStreamInfo。
返回值
- 方法调用成功,返回 AgoraMediaRecorder 实例。
- 方法调用失败,返回
null。
destroyMediaRecorder
销毁音视频录制器实例。
Java
public abstract void destroyMediaRecorder(AgoraMediaRecorder mediaRecorder);
如果当前正在录制,请先调用 stopRecording 停止录制,再调用 destroyMediaRecorder 销毁录制器实例。
参数
- mediaRecorder
- 要销毁的录制器实例。详见 AgoraMediaRecorder。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
setMediaRecorderObserver
注册一个用于音视频录制的回调观察者。
Java
public int setMediaRecorderObserver(IMediaRecorderCallback callback)
自从
自 v4.0.0 版本新增。
信息
在调用该方法前,请确保:
- RtcEngine 对象已创建并初始化。
- 已通过 createMediaRecorder 创建音视频录制对象。
参数
- callback
- 音视频流录制的回调。详见 IMediaRecorderCallback。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
startAudioRecording [1/2]
开始客户端录音。
Java
public abstract int startAudioRecording(String filePath, int quality);
你必须在调用 joinChannel 后调用该方法。调用 leaveChannel 时,录音会自动停止。 请确保指定的目录存在且可写。
信息
调用该方法时,默认的录音采样率为 32 kHz,且无法更改。
参数
- filePath
- 本地保存录音文件的绝对路径,包括文件名和扩展名。例如:/sdcard/emulated/0/audio.aac。信息请确保指定路径存在且可写。
- quality
- 录音质量:
- 0:低质量。采样率为 32 kHz,录制 10 分钟的文件大小约为 1.2 MB。
- 1:中等质量。采样率为 32 kHz,录制 10 分钟的文件大小约为 2 MB。
- 2:高质量。采样率为 32 kHz,录制 10 分钟的文件大小约为 3.75 MB。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
startAudioRecording [2/2]
开始客户端录制并应用录制配置。
Java
public abstract int startAudioRecording(AudioRecordingConfiguration config);
调用该方法后,你可以录制频道中用户的音频并获取录音文件。录音文件仅支持以下格式:
- WAV:音频保真度高但文件较大。例如,在 32000 Hz 采样率下,10 分钟录音约为 73 MB。
- AAC:音频保真度较低但文件较小。例如,在 32000 Hz 采样率和
AUDIO_RECORDING_QUALITY_MEDIUM录音质量下,10 分钟录音约为 2 MB。
调用时机
你必须在加入频道后调用该方法。
参数
- config
- 录制配置。详见 AudioRecordingConfiguration。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
startRecording
开始录制音频和视频流。
Java
public int startRecording(MediaRecorderConfiguration config)
该方法用于开始录制音频和视频流。声网 SDK 支持同时录制本地和远端用户的音视频流。 在调用该方法前,请确保:
- 已使用 createMediaRecorder 创建媒体录制器对象。
- 已使用 setMediaRecorderObserver 注册媒体录制器观察者以监听录制相关的回调。
- 已加入频道。
- 由麦克风采集的音频,格式为 AAC。
- 由摄像头采集的视频,格式为 H.264 或 H.265。
RECORDER_STATE_ERROR, RECORDER_REASON_NO_STREAM)回调。信息
- 如果需要录制本地音视频流,请确保本地用户角色在开始录制前已设置为主播。
- 如果需要录制远端用户的音视频流,请确保在开始录制前已订阅远端用户的音视频流。
参数
- config
- 音视频流录制的配置。详见 MediaRecorderConfiguration。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
- -2:参数无效。请确保:
- 指定的录制文件保存路径正确且可写。
- 指定的录制文件格式正确。
- 最大录制时长设置正确。
- -4:当前 RtcEngine 状态不支持该操作。可能是录制已在进行中,或因错误而停止。
- -7:在 RtcEngine 初始化前调用该方法。请确保在调用该方法前已创建 AgoraMediaRecorder 对象。
- -2:参数无效。请确保:
stopAudioRecording
stopRecording
停止录制音视频流。
Java
public int stopRecording()
信息
调用 startRecording 后,如果你想停止录制,必须调用此方法;否则生成的录制文件可能无法正常播放。
返回值
- 0:方法调用成功。
- < 0:方法调用失败:
- -7:在初始化 RtcEngine 之前调用该方法。请确保在调用此方法之前已创建
Recorder实例。
- -7:在初始化 RtcEngine 之前调用该方法。请确保在调用此方法之前已创建
onRecorderInfoUpdated
录制信息更新回调。
Java
void onRecorderInfoUpdated(String channelId, int uid, RecorderInfo info)
在你成功注册该回调并开始音视频流录制后,SDK 会根据你在 MediaRecorderConfiguration 中设置的 recorderInfoUpdateInterval 的值定期触发该回调,报告当前录制文件的名称、时长和大小。
触发时机
该回调在你成功注册回调并开始音视频流录制后,根据 MediaRecorderConfiguration 中设置的 recorderInfoUpdateInterval 定期触发。
参数
- channelId
- 频道名。
- uid
- 用户 ID。
- info
- 录制文件信息,详见 RecorderInfo。
onRecorderStateChanged
录制状态发生变化时的回调。
Java
@CalledByNative void onRecorderStateChanged(String channelId, int uid, int state, int reason);
SDK 在音视频流的录制状态发生变化时会触发该回调,报告当前的录制状态及其变化原因。
参数
- channelId
- 频道名。
- uid
- 用户 ID。
- state
- 当前录制状态:
RECORDER_STATE_ERROR(-1):录制过程中发生错误。RECORDER_STATE_START(2):开始录制音视频流。RECORDER_STATE_STOP(3):停止录制音视频流。
- reason
- 录制状态变化的原因:
RECORDER_REASON_NONE(0):一切正常。RECORDER_REASON_WRITE_FAILED(1):录制文件写入失败。RECORDER_REASON_NO_STREAM(2):无可用音视频流,或音视频流中断超过 5 秒。RECORDER_REASON_OVER_MAX_DURATION(3):录制时长超过最大限制。RECORDER_REASON_CONFIG_CHANGED(4):录制配置发生变化。