客户端音视频录制

更新时间: 2024/09/18 16:26:13

NERTC SDK 在实时音视频通话过程中,支持客户端录制和服务端录制两种录制方式。其中客户端录制支持对通话过程的实时音视频录制,录制文件保存在用户本地设备中,适用于通话过程录音场景及对游戏场景中对音视频问题的定位和排查。

功能介绍

客户端音视频录制指在通话过程中将房间内混流后的音频流或音视频流录制下来,并存放在用户本地设备中以供后续回放或存档。NERTC SDK 支持通过客户端进行实时音视频录制,每次录制生成一个音频或音视频文件,其中包含房间内所有用户混流后的音视频数据。开启录制时可以指定录制文件的名称、分辨率、帧率等。

示例项目

网易云信在 GitHub 上提供客户端音视频录制的开源示例项目 ClientRecord,您可以前往下载体验,也可以在线体验此功能。

注意事项

  • 仅 Chrome 内核的浏览器支持此功能。
  • 请在加入房间后使用此功能。
  • 不允许同时录制多个文件。
  • 录制文件的下载地址为浏览器默认下载地址。
  • 录制文件的格式是 webm,并非所有的播放器都支持(Chrome 浏览器上可以直接播放);若需要转换文件格式,需要您自行完成。
  • 录制模块无内存管理配置,若录制的时间过长,可能导致内存占用过大,需要您及时释放。

建议不要在录制过程中反复关闭再开启麦克风,否则录制的音频数据可能与预期不符。

实现方法

API 调用时序

sequenceDiagram
    autonumber
    participant 应用层
    participant NERtcSDK

    应用层->>NERtcSDK: startMediaRecording

    应用层 ->> NERtcSDK: stopMediaRecording
    应用层 ->> NERtcSDK: downloadMediaRecording

配置步骤

  1. 在加入房间后,调用 startMediaRecording 方法开启录制。调用此方法时,您需要设置 recorderrecordConfig 等参数指定录制文件的配置。相关参数的含义如下。

    • recorder:录制本端(local)或者录制房间里所有人(all)。

    • recordConfig:录制文件配置。

      • recordType:录制音频(audio)或者录制音视频(video)。
      • recordName:录制文件的名称。
      • recordVideoQuality:录制文件的分辨率。相关枚举值如下。
        • NERTC.RECORD_VIDEO_QUALITY_360p:设置分辨率为 640*360。
        • NERTC.RECORD_VIDEO_QUALITY_480p:设置分辨率为 640*480。
        • NERTC.RECORD_VIDEO_QUALITY_720p:设置分辨率为 1280*720。
      • recordVideoFrame:录制文件的帧率。相关枚举值如下。
        • NERTC.RECORD_VIDEO_FRAME_RATE_15:设置帧率为 15 fps。
        • NERTC.RECORD_VIDEO_FRAME_RATE_30:设置帧率为 30 fps。
  2. 需要结束录制时,调用 stopMediaRecording 方法手动停止音频录制。

    若您离开房间前未手动停止录音,离开房间后录音进程会自动结束;若您未手动停止本次音频录制又再次调用 startMediaRecording 方法,本次录音文件会自动保存至本地指定路径,并开启新的录制任务。

  3. 调用 downloadMediaRecording 方法生成录制文件。

    由于录制数据保持在内存中,请及时调用 cleanMediaRecording 方法释放内存。

示例代码

以实时音视频录制为例,示例代码如下。

// client.join()加入房间之后
const data = {
    recorder: 'all',
    recordConfig: {
        recordType: 'video',
        recordName: '录制文件名称',
        recordVideoQuality: NERTC.RECORD_VIDEO_QUALITY_360p,
        recordVideoFrame: NERTC.RECORD_VIDEO_FRAME_RATE_15
    }
}
//开始录制
client.startMediaRecording(data);

//停止录制,可跳过这一步,直接调用downloadMediaRecording()
await client.stopMediaRecording();

//生成录制文件
client.downloadMediaRecording();

//清除录制的音视频资源,释放内存空间
client.cleanMediaRecording();

API 参考

方法 功能描述
startMediaRecording 开启实时录制
stopMediaRecording 停止录制
downloadMediaRecording 生成录制文件
cleanMediaRecording 释放浏览器内存
此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 示例项目
  • 注意事项
  • 实现方法
  • API 调用时序
  • 配置步骤
  • 示例代码
  • API 参考