云端录制

功能简介: 在服务器上对房间内的音视频、白板、屏幕共享等通讯内容进行录制,支持自定义录制内容和布局,录制文件在服务器保存,可以通过WEB API下载和删除。


云端录制使用流程如下:

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

1. 开始云端录制

录制文件时,可以根据业务需要,选择不同的录制布局。如下代码为创建左右布局的相关示例。

左右布局示例图:

左右布局示例图

  • 混图器参数配置
//配置混图器编码参数:尺寸为640*360,帧率为15,其他采用默认设置
MixerCfg mixerCfg = new MixerCfg();
mixerCfg.frameRate = 15;
mixerCfg.dstResolution = new Size(640, 360);
  • 混图器内容配置 - 左右布局
//图像内容集合 - 创建左右布局的摄像头录制内容
ArrayList<MixerCotent> contents = new ArrayList<MixerCotent>();
//自己的摄像头(左边布局), 设置摄像头录制视频大小,由于左右布局, 宽度只有录制布局的一半
Rect leftRect = new Rect(0, 0, mixerCfg.dstResolution.width/2, mixerCfg.dstResolution.height);
MixerCotent leftVideoItem = MixerCotent.createVideoContent(myUserID, (short)-1, leftRect);
//添加到内容列表
contents.add(leftVideoItem);
//其他人的摄像头(右边布局)
Rect rightRect = new Rect(mixerCfg.dstResolution.width/2, 0, mixerCfg.dstResolution.width, mixerCfg.dstResolution.height);
MixerCotent rightVideoItem = MixerCotent.createVideoContent(otherUserID, (short)-1, rightRect);
//添加到内容列表
contents.add(rightVideoItem);
  • 混图器输出配置
//配置混图器输出
ArrayList<MixerOutPutCfg> cfgs = new ArrayList<MixerOutPutCfg>();
MixerOutPutCfg outputCfg = new MixerOutPutCfg();
//设置混图输出类型为录像文件
outputCfg.type = MIXER_OUTPUT_TYPE.MIXOT_FILE; 
//录制文件路径为:/sdcard/_Android.mp4
outputCfg.fileName = "/sdcard/_Android.mp4";
cfgs.add(outputCfg);
  • 根据配置开启云端录制
HashMap<String, MixerCfg> mixerCfgs = new HashMap<String, MixerCfg>();
mixerCfgs.put("KEY_SVR_MIXERID", mixerCfg);

HashMap<String, ArrayList<MixerOutPutCfg>> mixerOutputCfgs = new HashMap<String, ArrayList<MixerOutPutCfg>>();
ArrayList<MixerOutPutCfg> outputCfgs = new ArrayList<MixerOutPutCfg>();
outputCfgs.add(outputCfg);
mixerOutputCfgs.put("KEY_SVR_MIXERID", outputCfgs);

HashMap<String, ArrayList<MixerCotent>> mixerContents = new HashMap<String, ArrayList<MixerCotent>>();
mixerContents.put("KEY_SVR_MIXERID", contents);

//开启云端录制
CRVIDEOSDK_ERR_DEF rst =  CloudroomVideoMeeting.getInstance().startSvrMixer(mixerCfgs, mixerContents, mixerOutputCfgs);
if(rst != CRVIDEOSDK_ERR_DEF.CRVIDEOSDK_NOERR)
{
  //开启云端录制出错!
  ...
}
  • 回调通知:
//云端录制状态变化通知
void svrMixerStateChanged(String operatorID, MIXER_STATE state, CRVIDEOSDK_ERR_DEF err)
{
  ...
}

相关API请参考:

相关结构定义请参考:

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

在此可获得录像文件的时长、大小、录像文件异常等信息

void svrMixerOutputInfo(MixerOutputInfo info){
    if ( info.state==MIXER_OUTPUT_STATE.OUTPUT_ERR ){
        //录像文件出错,info.errCode中有错误原因
    }

相关API请参考:

3. 更新云端录制内容

如下为创建画中画布局作为更新后的云端录制内容

画中画布局示例图:

左右布局示例图

  • 混图器内容配置 - 画中画布局
//更新为画中画模式
// 图像内容集合 - 创建画中画布局的摄像头录制内容, 
ArrayList<MixerCotent> contents = new ArrayList<MixerCotent>();

//自己的摄像头(充满布局)
Rect bigRect = new Rect(0, 0, mixerCfg.dstResolution.width, mixerCfg.dstResolution.height);
MixerCotent bigVideoItem = MixerCotent.createVideoContent(myUserID, (short)-1, bigRect);
// 添加到内容列表
contents.add(bigVideoItem);

//其他人的摄像头(部分布局)
Rect smallRect = new Rect(0, 0, mixerCfg.dstResolution.width/5, mixerCfg.dstResolution.height/5);
MixerCotent smallVideoItem = MixerCotent.createVideoContent(otherUserID, (short)-1, smallRect);
// 添加到内容列表
contents.add(smallVideoItem);
  • 更新混图器内容
HashMap<String, ArrayList<MixerCotent>> mixerContents = new HashMap<String, ArrayList<MixerCotent>>();
mixerContents.put("KEY_SVR_MIXERID", contents);

//更新录制内容
CloudroomVideoMeeting.getInstance().updateSvrMixerContent(mixerContents);

相关API请参考:

4. 获取云端录制状态


//获取云端录制状态
MIXER_STATE state = CloudroomVideoMeeting.getInstance().getSvrMixerState()

相关API请参考:

相关结构定义请参考:

5.停止云端录制

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

  • 接口调用:
CloudroomVideoMeeting.getInstance().stopSvrMixer();

相关API请参考: