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