# 服务器音视频录制

# 简介

在音视频通话过程中,您可以开启音视频录制功能,菊风会将录制后的视频上传到开发者指定的七牛云存储或阿里云存储。按照文档步骤实现服务器音视频录制功能。

# 前提条件

集成服务器音视频录制功能前,请确保您已经集成了基础的多方音视频通话功能。

# 功能说明

平台 功能描述
合流录制 支持将房间内所有用户的音视频合流录制
录制内容可选 房间内同时录制输出音频和视频两种文件
视频截图 支持房间内所有用户的音视频的截图
自定义布局 支持房间视频画面自定义布局

# 适用场景

应用行业 场景说明
社交直播 直播中录制精彩瞬间;直播后回放精彩内容
金融双录 业务办理过程中同步录音录像,符合业务监管要求
远程医疗 远程问诊过程中在线录制,完成线上问诊的同时能够有效避免医患纠纷
在线教育 同步进行课程录制,课后学生可回顾,家长可回放检查课程质量

# 集成步骤

# 设置录制参数

音视频录制的文件将由服务器上传到七牛云或阿里云上,您需要设置录制参数以指定文件存储地址。

# 七牛云存储

通过下述步骤指定七牛云存储地址:

  1. 获取 七牛云 (opens new window) 存储信息:bucketNamesecretKeyaccessKey
  2. 调用 buildQiniuRecordParam (opens new window) 函数创建录制参数字符串。
  3. 调用 join (opens new window) 加入频道。

示例:七牛云存储

// 设置七牛云存储
JCMediaChannelJoinParam* joinParam = new JCMediaChannelJoinParam();
joinParam->record.buildQiniuRecordParam(video, bucketName, secretKey, accessKey, "自定义文件名");
// 加入频道
mediaChannel.join(channelId, joinParam);

# 阿里云存储

通过下述步骤指定阿里云存储地址:

  1. 获取 阿里云 (opens new window) 存储信息:bucketNamesecretKeyaccessKeyuploadEndPoint

  2. 调用 buildAliossRecordParam (opens new window) 函数创建录制参数字符串。

  3. 调用 join (opens new window) 加入频道。

示例:阿里云存储

// 设置阿里云存储
JCMediaChannelJoinParam* joinParam = new JCMediaChannelJoinParam();
joinParam->record.buildAliossRecordParam(video, bucketName, secretKey, accessKey, uploadEndPoint, "自定义文件名");
// 加入频道
mediaChannel.join("channelId", joinParam);

TIP

如果进行音频录制,需要将 buildQiniuRecordParam/buildAliossRecordParam 中的第一个参数 video 设置为 false。

# 获取录制状态

设置完录制参数后,开发者需要根据目前的录制状态来决定是否启音视频录制。调用 getRecordState (opens new window) 以获取当前的录制状态。

录制状态说明:

属性 说明
JCMediaChannelRecordStateNone (opens new window) 无法进行视频录制。用户不在频道中或者加入频道时没有设置视频录制参数
JCMediaChannelRecordStateReady (opens new window) 可以开启视频录制。用户在加入频道时设置了录制参数,并且没有在录制视频
JCMediaChannelRecordStateRunning (opens new window) 视频录制中。用户在加入频道时设置了录制参数,并且正在视频录制中

# 开启/关闭音视频录制

调用 enableRecord (opens new window) 开启或关闭音视频录制。传入 true 表示开启音视频录制,false 表示关闭音视频录制。

示例:根据录制状态选择开启或关闭音视频录制

// 根据音视频录制状态判断是否开启音视频录制
if (mediaChannel->getRecordState() == JCMediaChannelRecordStateNone) {
  // 无法进行音视频录制
}
else if (mediaChannel->getRecordState() == JCMediaChannelRecordStateReady) {
  // 可以开启音视频录制
  mediaChannel->enableRecord(true, recordParam);
}
else if (mediaChannel->getRecordState() == JCMediaChannelRecordStateRunning)
{
  // 音视频录制中,可以关闭音视频录制
  mediaChannel->enableRecord(false, recordParam);
}