音视频录制

  • Flutter

更新时间不可用

createMediaRecorder

创建音视频录制对象。

Dart
Future<MediaRecorder?> createMediaRecorder(RecorderStreamInfo info);

在开始音视频流录制前,你需要调用该方法创建一个音视频录制对象。SDK 支持录制本地或远端用户的多个音视频流,你可以多次调用该方法创建录制对象,并通过 info 参数指定需要录制的频道名称和发流的用户 ID。 成功创建后,你需要调用 setMediaRecorderObserver 注册录制对象的观测器来监听录制的相关回调,然后再调用 startRecording 开始录制。

参数

参数名描述
info

需要录制的音视频流相关信息,详见 RecorderStreamInfo。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

  • 方法调用成功:返回一个 MediaRecorder 对象。
  • 方法调用失败:返回空指针。

所属接口类

destroyMediaRecorder

销毁音视频录制对象。

Dart
Future<void> destroyMediaRecorder(MediaRecorder mediaRecorder);

当你不需要再录制音视频流时,可以调用该方法销毁对应的音视频录制对象。如果你正在录制,请先调用 stopRecording 停止录制,再调用该方法来销毁音视频录制对象。

参数

参数名描述
mediaRecorder

待销毁的 MediaRecorder 对象。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。详见错误码了解详情和解决建议。

所属接口类

setMediaRecorderObserver

注册 MediaRecorderObserver 观测器。

Dart
Future<void> setMediaRecorderObserver(
      {required RtcConnection connection,
      required MediaRecorderObserver callback});

该方法用于设置音视频录制的回调,以便在录制过程中向 App 通知音视频流的录制状态和信息。 调用该方法前请确保:

参数

参数名描述
callback

音视频流录制回调,详见 MediaRecorderObserver。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。详见错误码了解详情和解决建议。

所属接口类

startAudioRecording

开始客户端录音并进行录音配置。

Dart
Future<void> startAudioRecording(AudioRecordingConfiguration config);

SDK 支持通话过程中在客户端进行录音。调用该方法后,你可以录制频道内用户的音频,并得到一个录音文件。录音文件仅支持下列格式:

  • WAV: 音质保真度较高,文件较大。例如,采样率为 32000 Hz,录音时长为 10 分钟的文件大小约为 73 M。
  • AAC: 音质保真度较低,文件较小。例如,采样率为 32000 Hz,录音音质为 audioRecordingQualityMedium,录音时长为 10 分钟的文件大小约为 2 M。

用户离开频道后,录音会自动停止。

调用时机

该方法需要在加入频道后调用。

参数

参数名描述
config

录音配置。详见 AudioRecordingConfiguration。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。详见错误码了解详情和解决建议。

所属接口类

startRecording

开启音视频流录制。

Dart
Future<void> startRecording(MediaRecorderConfiguration config);

该方法用于开启音视频流录制。声网 SDK 支持同时录制本地及远端用户的音视频流。 在开始录制前请确保:

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

  • 麦克风采集的、AAC 编码格式的音频。
  • 摄像头采集的、H.264 或 H.265 编码格式的视频。

开启音视频流录制后,当视频分辨率在录制过程中发生变化时,SDK 会停止录制;当音频采样率和声道数发生变化时,SDK 会持续录制并生成单个 MP4 录制文件。仅当检测到可录制的音视频流时,才能成功生成录制文件;如果没有可录制的音视频流,或在录制过程中的音视频流中断超过 5 秒后,SDK 会停止录制,并触发 onRecorderStateChanged(recorderStateError, recorderReasonNoStream) 回调。

注:

  • 如果你需要录制的是本地的音视频流,请在开始录制前确保本地用户的角色设为主播。
  • 如果你需要录制的是远端用户的音视频流,请在开始录制前确保已经订阅了该用户的音视频流。

参数

参数名描述
config

音视频流录制配置。详见 MediaRecorderConfiguration。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。详见错误码了解详情和解决建议。

所属接口类

stopAudioRecording

停止客户端录音。

Dart
Future<void> stopAudioRecording();

返回值

方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。详见错误码了解详情和解决建议。

所属接口类

stopRecording

停止音视频流录制。

Dart
Future<void> stopRecording();

注: 调用 startRecording 后,如果要停止录制,请调用该方法停止录制;否则,生成的录制文件可能无法正常播放。

返回值

方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。详见错误码了解详情和解决建议。

所属接口类

onRecorderInfoUpdated

录制信息更新回调。

Dart
final void Function(String channelId, int uid, RecorderInfo info)?
      onRecorderInfoUpdated;

成功注册该回调并开启音视频流录制后,SDK 会根据你在 MediaRecorderConfiguration 中设置的 recorderInfoUpdateInterval 的值周期性触发该回调,报告当前录制文件的文件名、时长和大小。

参数

参数名描述
channelId

频道名称。

uid

用户 ID。

info

录制文件信息。详见 RecorderInfo。

表格内容超出当前宽度,可横向滚动查看更多列。

所属接口类

onRecorderStateChanged

录制状态发生改变回调。

Dart
final void Function(String channelId, int uid, RecorderState state,
    RecorderReasonCode reason)? onRecorderStateChanged;

音视频流录制状态发生改变时,SDK 会触发该回调,报告当前的录制状态和引起录制状态改变的原因。

参数

参数名描述
channelId

频道名称。

uid

用户 ID。

state

当前的录制状态。详见 RecorderState。

reason

录制状态出错的原因。详见 RecorderReasonCode。

表格内容超出当前宽度,可横向滚动查看更多列。

所属接口类