音视频录制

  • Electron

更新时间不可用

addListener

添加一个 IMediaRecorderEvent 监听器。

TypeScript
addListener?<EventType extends keyof IMediaRecorderEvent>(
      eventType: EventType,
      listener: IMediaRecorderEvent[EventType]
    ): void;

成功调用该方法后,你可以通过 IMediaRecorderEvent 监听对应 IMediaRecorder 对象的事件、获取数据。根据业务需要,你可以为同一事件添加多个监听器。

参数

参数名描述
eventType

需要监听的目标事件名。详见 IMediaRecorderEvent。

listener

eventType 对应的回调函数。以添加 onRecorderStateChanged 为例:

Text
const onRecorderStateChanged = (state: RecorderState, reason: RecorderReasonCode) => {};
engine.addListener('onRecorderStateChanged', onRecorderStateChanged);
表格内容超出当前宽度,可横向滚动查看更多列。

所属接口类

createMediaRecorder

创建音视频录制对象。

TypeScript
abstract createMediaRecorder(info: RecorderStreamInfo): IMediaRecorder;

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

参数

参数名描述
info

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

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

返回值

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

所属接口类

destroyMediaRecorder

销毁音视频录制对象。

TypeScript
abstract destroyMediaRecorder(mediaRecorder: IMediaRecorder): number;

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

参数

参数名描述
mediaRecorder

待销毁的 IMediaRecorder 对象。

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

返回值

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

所属接口类

removeAllListeners

移除指定事件的所有监听器。

TypeScript
removeAllListeners?<EventType extends keyof IMediaRecorderEvent>(
      eventType?: EventType
    ): void;

参数

参数名描述
eventType

需要监听的目标事件名。详见 IMediaRecorderEvent。

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

所属接口类

removeListener

移除指定的 IMediaRecorderEvent 监听器。

TypeScript
removeListener?<EventType extends keyof IMediaRecorderEvent>(
      eventType: EventType,
      listener: IMediaRecorderEvent[EventType]
    ): void;

参数

参数名描述
eventType

需要监听的目标事件名。详见 IMediaRecorderEvent。

listener

eventType 对应的回调函数。必须传入 addListener 中传入的同一个函数对象。以取消监听 onRecorderStateChanged 为例:

Text
const onRecorderStateChanged = (state: RecorderState, reason: RecorderReasonCode) => {};
engine.addListener('onRecorderStateChanged', onRecorderStateChanged);
engine.removeListener('onRecorderStateChanged', onRecorderStateChanged);
表格内容超出当前宽度,可横向滚动查看更多列。

所属接口类

setMediaRecorderObserver

注册 IMediaRecorderObserver 观测器。

TypeScript
abstract setMediaRecorderObserver(callback: IMediaRecorderObserver): number;

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

参数

参数名描述
callback

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

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

返回值

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

所属接口类

startAudioRecording

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

TypeScript
abstract startAudioRecording(config: AudioRecordingConfiguration): number;

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

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

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

调用时机

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

参数

参数名描述
config

录音配置。详见 AudioRecordingConfiguration。

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

返回值

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

所属接口类

startRecording

开启音视频流录制。

TypeScript
abstract startRecording(config: MediaRecorderConfiguration): number;

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

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

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

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

注:

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

参数

参数名描述
config

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

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

返回值

  • 0: 方法调用成功。

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

    • -2: 参数无效。请确保:

      • 指定的录制文件保存路径正确且可写。
      • 指定的录制文件格式正确。
      • 设置的最大录制时长正确。
    • -4: IRtcEngine 当前状态不支持该操作。可能因为录制正在进行中或录制出错停止。

    • -7: IRtcEngine 尚未初始化就调用方法。请确认在调用该方法前已创建 IMediaRecorder 对象。

所属接口类

stopAudioRecording

停止客户端录音。

TypeScript
abstract stopAudioRecording(): number;

返回值

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

所属接口类

stopRecording

停止音视频流录制。

TypeScript
abstract stopRecording(): number;

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

返回值

  • 0: 方法调用成功。

  • < 0: 方法调用失败:

所属接口类

onRecorderInfoUpdated

录制信息更新回调。

TypeScript
onRecorderInfoUpdated?(
    channelId: string,
    uid: number,
    info: RecorderInfo
  ): void;

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

参数

参数名描述
channelId

频道名称。

uid

用户 ID。

info

录制文件信息。详见 RecorderInfo。

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

所属接口类

onRecorderStateChanged

录制状态发生改变回调。

TypeScript
onRecorderStateChanged?(
    channelId: string,
    uid: number,
    state: RecorderState,
    reason: RecorderReasonCode
  ): void;

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

参数

参数名描述
channelId

频道名称。

uid

用户 ID。

state

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

reason

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

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

所属接口类