音视频通话

云端录制

功能介绍

Web SDK 提供云端录制能力,由服务器侧完成音视频采集、混流与文件生成;不支持在浏览器端进行本地录制。

云端录制有两种模式:

模式 功能描述
单流模式 支持将房间内的部分或全部视频及音频直接转储成文件,各流独立生成音视频文件;服务器开销小
合流模式 支持将房间内视频、屏幕共享、影音共享、白板、音频等混合录制成一个文件;服务器开销较大

两种模式的一些特性对比:

对比项 单流模式 合流模式
开启方式 CRVideo_CreateCloudMixer 参数 CRVideo_CloudMixerCfgObjmode 为 1 CRVideo_CreateCloudMixer 参数 CRVideo_CloudMixerCfgObjmode 为 0
图像内容 房间内视频;如需录制桌面,可使用 桌面摄像头 方式,参见 videoFileCfg.subscribeVideos 房间内视频、屏幕共享、影音共享、白板等;在 videoFileCfg.layoutConfig 中添加 CRVideo_MixerContentObj
内容布局 不支持 支持自由布局;layoutConfig 列表中靠前的元素在图像底层;lefttopwidthheight 控制位置与大小
添加水印 不支持;只能在源端视频侧添加水印 可添加时间戳、文本、图像等;参见 CRVideo_MixerContentObjtype 的定义
添加音频 可在视频录像中添加自己或房间内所有人的声音;参见 videoFileCfg.aStreamType 可添加房间内所有人或指定人员的声音;两人通话场景可配置左右声道;参见 aChannelTypeaChannelContent
独立音频文件 可为指定人员或全部人员各生成独立音频文件;参见 audioFileCfg 可为房间生成独立音频文件;两人通话场景可生成左右声道音频文件;参见 audioFileCfg
任务数量 启一个录制任务即可为全部或指定视频列表各生成一个录像文件 可开启多个合流任务,每个合流任务生成一个录像文件
录像质量 不支持;只能通过调整源端图像质量控制 可控制分辨率、帧率、码率等;参见 vWidthvHeightvFpsvBpsvQP
更新内容 录制中可调整录制的视频列表 录制中可修改图像内容、水印及布局
服务器开销 视频不重新编解码,CPU、内存开销小 解码混图再编码,CPU 开销大;降低分辨率、帧率与内容数量可有效降低开销
第三方存储 默认存储在 SDK 服务器;可通过 storageConfig 存到第三方存储 同左

配置字段详见 CRVideo_CloudMixerCfgObj

注意:

须在成功进入房间后,方可创建云端混图器。

须联系商务为账号开通「云端录制服务」;未开通时创建可能失败。

使用说明

本文主要以 SDK 端发起云端录制为例。若由应用服务器发起,可参考以下 WEB API:

WEB API 开启云端录制
WEB API 停止云端录制
WEB API 更新云端录制
WEB API 录制任务状态回调
WEB API 录制事件回调
WEB API 录像文件查询

1. 开通云端录制服务

  • 请确保您已成功 注册 账号。
  • 请联系商务为对应账号开通「云端录制服务」。

2. 开始云端录制

合流模式、左右布局示例(1280×720,15 帧):

左右布局示例图

const cloudMixerCfg = {
  mode: 0,
  videoFileCfg: {
    svrPathName: "/2021-09-24/2021-09-24_13-47-41_Win32_73542046.mp4",
    vWidth: 1280,
    vHeight: 720,
    vFps: 15,
    layoutConfig: [{
      type: 0,
      top: 180,
      left: 0,
      width: 640,
      height: 360,
      keepAspectRatio: 1,
      param: { camid: "Usr1.-1" },
    }, {
      type: 0,
      top: 180,
      left: 640,
      width: 640,
      height: 360,
      keepAspectRatio: 1,
      param: { camid: "Usr2.-1" },
    }],
  },
};

var mixerID = CRVideo_CreateCloudMixer(cloudMixerCfg);

单流模式示例(为房间内所有人录制独立音视频文件):

const cloudMixerCfg = {
  mode: 1,
  audioFileCfg: {
    svrPathName: "/2021-09-24/会议号/$UID$_$TIME$.mp3",
    subscribeAudios: ["_cr_all_"],
  },
  videoFileCfg: {
    aStreamType: 1,
    svrPathName: "/2021-09-24/会议号/$UID$_cam$CAMID$_$TIME$.mp4",
    subscribeVideos: ["_cr_allDefCam_"],
  },
};
var mixerID = CRVideo_CreateCloudMixer(cloudMixerCfg);

可多次调用 CRVideo_CreateCloudMixer 传入不同参数,同时开启多个云端录制。

若需保存到第三方云存储,请在创建时传入 storageConfig,详见 CRVideo_CloudStorageConfig

相关 API 请参考:

3. 更新云端录制内容

录制过程中可更新布局与混流内容(不可更改混图器规格、输出目标)。画中画布局示例:

画中画布局示例图

var cloudMixerCfg = {
  videoFileCfg: {
    layoutConfig: [{
      type: 0,
      top: 0,
      left: 0,
      width: 1280,
      height: 720,
      keepAspectRatio: 1,
      param: { camid: "Usr1.-1" },
    }, {
      type: 0,
      top: 495,
      left: 880,
      width: 400,
      height: 225,
      keepAspectRatio: 1,
      param: { camid: "Usr2.-1" },
    }],
  },
};

CRVideo_UpdateCloudMixerContent(mixerID, cloudMixerCfg);

相关 API 请参考:

4. 停止云端录制

停止云端录制后,也会触发 CRVideo_CloudMixerStateChanged 通知。

CRVideo_DestroyCloudMixer(mixerID);

相关 API 请参考:

5. 云端录制回调通知

录制过程中会有录制状态变化事件、录制文件信息变化通知,可实时获得录制状态、文件当前时长与大小,以及录制异常等信息。

CRVideo_CloudMixerStateChanged.callback = function (mixerID, state, exParam, operUserID) {
  // state 参见 CRVideo_MIXER_STATE
};

CRVideo_CloudMixerOutputInfoChanged.callback = function (mixerID, outputInfo) {
  // 文件时长、大小、上传状态等,参见 CRVideo_CloudMixerOutputInfo
};

CRVideo_CreateCloudMixerFailed.callback = function (mixerID, sdkErr) {
  // 创建失败
};

相关 API 请参考:

6. 获取录像

录像停止后,录像文件会开始上传到录像文件存储服务器中(可关注 CRVideo_CloudMixerOutputInfoChanged 通知,得到上传完成事件)。

  • 通过 WEB API 进行录像文件查询、下载和删除
  • 登录 管理后台 在管理页面上回放和下载:

recordMgr

若将录像保存到第三方云存储,请使用第三方提供的接口或管理页获取。

相关文档