# 服务器音视频录制
# 简介
在音视频通话过程中,您可以开启音视频录制功能,菊风会将录制后的视频上传到开发者指定的七牛云存储。按照文档步骤实现服务器音视频录制功能。 您如果要使用阿里云存储,您可以通过发送邮件与我们取得联系:marketing@juphoon.com.cn。
# 前提条件
集成服务器音视频录制功能前,请确保您已经集成了基础的多方音视频通话功能。
# 功能说明
平台 | 功能描述 |
---|---|
合流录制 | 支持将房间内所有用户的音视频合流录制 |
录制内容可选 | 房间内同时录制输出音频和视频两种文件 |
视频截图 | 支持房间内所有用户的音视频的截图 |
自定义布局 | 支持房间视频画面自定义布局 |
# 适用场景
应用行业 | 场景说明 |
---|---|
社交直播 | 直播中录制精彩瞬间;直播后回放精彩内容 |
金融双录 | 业务办理过程中同步录音录像,符合业务监管要求 |
远程医疗 | 远程问诊过程中在线录制,完成线上问诊的同时能够有效避免医患纠纷 |
在线教育 | 同步进行课程录制,课后学生可回顾,家长可回放检查课程质量 |
# 集成步骤
# 设置录制参数
音视频录制的文件将由服务器上传到七牛云上,您需要设置录制参数以指定文件存储地址。
# 七牛云存储
通过下述步骤指定七牛云存储地址:
- 获取 七牛云 (opens new window) 存储信息:
bucketName
、secretKey
、accessKey
。 - 调用 buildQiniuRecordParam (opens new window) 函数创建录制参数字符串。
- 将上述字符串赋值给 recordString (opens new window) 属性。
- 调用 join (opens new window) 加入频道。
示例:七牛云存储
// 设置七牛云存储
JCMediaChannelJoinParam *joinParam = [[JCMediaChannelJoinParam alloc] init];
joinParam.record = [[JCMediaChannelRecordParam alloc] init];
joinParam.record.recoredString = [JCMediaChannelRecordParam buildQiniuRecordParam:true bucketName:@"QiNiuBucketName" secretKey:@"QiNiuSecretKey" accessKey:@"QiNiuAccessKey" fileName:@"QiNiuFilename"];
// 加入频道
[mediaChannel join:@"channelId" joinParam:joinParam];
TIP
如果进行音频录制,需要将 buildQiniuRecordParam 中的第一个参数 video 设置为 false。
# 获取录制状态
设置完录制参数后,开发者需要根据目前的录制状态来决定是否启音视频录制。调用 recordState (opens new window) 以获取当前的录制状态。
录制状态说明:
属性 | 说明 |
---|---|
JCMediaChannelRecordStateNone (opens new window) | 无法进行视频录制。用户不在频道中或者加入频道时没有设置视频录制参数 |
JCMediaChannelRecordStateReady (opens new window) | 可以开启视频录制。用户在加入频道时设置了录制参数,并且没有在录制视频 |
JCMediaChannelRecordStateRunning (opens new window) | 视频录制中。用户在加入频道时设置了录制参数,并且正在视频录制中 |
# 开启/关闭音视频录制
调用 enableRecord (opens new window) 开启或关闭音视频录制。传入 true 表示开启音视频录制,false 表示关闭音视频录制。
示例:根据录制状态选择开启或关闭音视频录制
开启录制
-(void)onMediaChannelPropertyChange:(JCMediaChannelPropChangeParam *)changeParam {
// 根据音视频录制状态判断是否开启音视频录制
if (mediaChannel.recordState == JCMediaChannelRecordStateNone) {
// 无法进行音视频录制
} else if (mediaChannel.recordState == JCMediaChannelRecordStateReady) {
// 可以开启音视频录制,代码如下
[mediaChannel enableRecord:true recordParam:nil];
}
}
关闭录制
if (mediaChannel.recordState == JCMediaChannelRecordStateRunning) {
// 音视频录制中,可以关闭音视频录制,代码如下
[mediaChannel enableRecord:false recordParam:nil];
}
TIP
在会议录制的过程中如果关闭了录制,后再次开启的时候需要重新设置录制文件的名称,否者录制的文件会被覆盖掉,方法如下。
JCMediaChannelRecordParam *recordParam = [[JCMediaChannelRecordParam alloc]init];
//七牛云
recordParam.recordString = [JCMediaChannelRecordParam buildQiniuRecordParam:true bucketName:@"QiNiuBucketName" secretKey:@"QiNiuSecretKey" accessKey:@"AccessKey" fileName:@"新自定义文件名"];
//开启录制
[[[JCManager alloc] mediaChannel] enableRecord:true recordParam:recordParam];