# 云端录制

功能简介:
在服务器上对房间内的音视频、白板、屏幕共享等通讯内容进行录制,支持自定义录制内容和布局,录制文件在服务器保存,可以通过API下载和删除。其中,下载需要先使用Web API获取录像文件,以及Web API实现删除录像文件

  1. 开始云端录制
  2. 云端录制文件信息变化通知
  3. 更新云端录制内容
  4. 获取云端录制状态
  5. 停止云端录制

1.开始云端录制

  • 调用接口:
// 云端录制推荐分辨率
var record_size_arr = [ 
	[640, 360, 400],
	[964, 480, 600],
	[1280, 720, 1200]
];

var mixerID = "1";  //生成一个混图器id
var size = 0;   //使用第1个分辨率

var rw = record_size_arr[size][0];  //640
var rh = record_size_arr[size][1];  //360
var bitRate = record_size_arr[size][2] * 1000;  //400 * 1000

var mw = rw / 2;    //每个视频的录制宽度
var mh = mw * 9 / 16; //每个视频的录制高度
var mtop = (rh - mh) / 2;   //放在录制画布的相对高度,这里是计算出视频垂直居中的位置


//配置混图器编码参数
var mutiMixerCfgs = [
    {
        "id": mixerID,
        "streamTypes": 3,   //录制音视频
        "cfg": {
            "width": rw,
            "height": rh,
            "frameRate": 8,
            "bitRate": bitRate,
            "defaultQP": 26
        };
    }
];


//左视频图像的内容配置
var leftCon = {
    "type": 0; //0: 录制类型为视频
    "left": 0 ;
    "top": mtop;   //视频图像垂直居中
    "width": mw;
    "height":  mh;
    //camid参数为: user1.1 ,表示该内容需要录制userID是user1的1号摄像头。后方可传入-1,表示为录制默认摄像头
    "param": {"camid": "user1.1"};  
    "keepAspectRatio": 1;
};
//右视频图像的内容配置
var rightCon = {
    "type": 0; //0: 录制类型为视频
    "left": mw;
    "top": mtop;   //视频图像垂直居中
    "width": mw;
    "height":  mh;
    "param": {"camid": "user2.1"};
    "keepAspectRatio": 1;
};  

//配置混图器内容
var mutiMixerContents = [
    {
        "id": mixerID,
        "content": [ leftCon ,rightCon ]
    }
];

//配置混图器输出
var mutiMixerOutputs = [ 
    {
        "id": mixerID,
        "output": [
            {
                "type":0,
                "filename":"/2019-03-19/" + "2019-03-19-10-30-30_Web.mp4" //配置录制的文件名
            }
        ]
    }
];

//开始录制,云端录制开启后会回调CRVideo_SvrMixerStateChanged接口
CRVideo_StartSvrMixer(mutiMixerCfgs, mutiMixerContents, mutiMixerOutputs);
  • 左右布局示例图:

左右布局示例图

  • 回调通知:
//云端录制状态变化通知 
CRVideo_SvrMixerStateChanged.callback = function(state, err, operatorID){
	console.log("CRVideo_SvrMixerStateChanged, state:" + state + ",err:" + err + ",operatorID:" + operatorID);
}

相关API请参考:

相关结构定义请参考:

2.云端录制文件信息变化通知

录制过程中都会触发此事件。在此可以实时获得录制状态、录制文件当前的时长、大小,以及录制异常等信息。

  • 回调通知:
//云端录制文件信息变化通知
CRVideo_SvrMixerOutputInfo.callback = function(outputInfo){
	console.info("CRVideo_SvrMixerOutputInfo",outputInfo);
}	

相关API请参考:

相关结构定义请参考:

3.更新云端录制内容

  • 接口调用:
// 云端录制推荐分辨率
var record_size_arr = [ 
	[640, 360, 400],
	[964, 480, 600],
	[1280, 720, 1200]
];

var mixerID = "1";  //取之前的混图器id
var size = 0;   //使用第1个分辨率

//更新录制布局为:画中画
//混图器内容:画中画布局(示例图如下, 底层640*360, 上层213*120),底层为user1的1号摄像头, 上层为user2的1号摄像头

var bigW = record_size_arr[size][0];  //640,底层视频的宽度
var bigH = record_size_arr[size][1];  //360,底层视频的高度

var smallH = bigH / 3;  //缩放3倍作为顶层视频的高度
var smallW = smallH * 16 / 9;   //视频宽高比为16:9,计算出顶层视频宽度

//底层视频图像的内容配置
var underCon = {
    "type": 0; //0: 录制类型为视频
    "left": 0 ;
    "top": 0;
    "width": bigW;
    "height":  bigH;
    //camid参数为: user1.1 ,表示该内容需要录制userID是user1的1号摄像头。后方可传入-1,表示为录制默认摄像头
    "param": {"camid": "user1.1"};  
    "keepAspectRatio": 1;
};
//顶层视频图像的内容配置
var topCon = {
    "type": 0; //0: 录制类型为视频
    "left": bigW - smallW;
    "top": bigH - smallH;
    "width": smallW;
    "height":  smallH;
    "param": {"camid": "user2.1"};
    "keepAspectRatio": 1;
};  

//配置混图器内容
var mutiMixerContents = [
    {
        "id": mixerID,
        "content": [ underCon ,topCon ] //数组后面的画面将会覆盖前面的画面
    }
];

//更新录制内容,录制更新后会通知CRVideo_SvrMixerCfgChanged接口
CRVideo_UpdateSvrMixerContent(mutiMixerContents);

  • 画中画布局示例图:

画中画布局示例图

相关API请参考:

4.获取云端录制状态

  • 接口调用:
//获取云端录制状态
var state = CRVideo_GetSvrMixerState()

相关API请参考:

相关结构定义请参考:

5.停止云端录制

停止云端录制后,也会触发事件CRVideo_SvrMixerStateChanged

  • 接口调用:
CRVideo_StopSvrMixer();

相关API请参考: