音视频录制

  • Android

更新时间不可用

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 版本新增。

注: 在调用该方法前,请确保:

参数

参数名描述
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 支持同时录制本地和远端用户的音视频流。 在调用该方法前,请确保:

该方法支持录制以下数据:

  • 由麦克风采集的音频,格式为 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

停止客户端录制音频。

Java
public abstract int stopAudioRecording();

返回值

  • 0:方法调用成功。
  • < 0:方法调用失败。详见错误码了解详情和解决建议。

所属接口类

stopRecording

停止录制音视频流。

Java
public int stopRecording()

注: 调用 startRecording 后,如果你想停止录制,必须调用此方法;否则生成的录制文件可能无法正常播放。

返回值

  • 0:方法调用成功。

  • < 0:方法调用失败:

    • -7:在初始化 RtcEngine 之前调用该方法。请确保在调用此方法之前已创建 Recorder 实例。

所属接口类

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):录制配置发生变化。
表格内容超出当前宽度,可横向滚动查看更多列。

所属接口类