# 云端直播推流

功能简介:
用于多个主播实时连麦互动。技术实现上,我们会把房间里多个主播的音视频在服务器合成一路流后推流到CDN流媒体服务器,直播观众可以获取RTMP或HLS流观看直播。

云端直播推流架构图:



云端直播推流使用流程如下:

  1. 创建直播间并获得推流地址
  2. 开始云端直播推流
  3. 更新云端直播推流内容
  4. 观众观看直播
  5. 停止云端直播推流
  6. 回放点播

1.创建直播间并获得推流地址

2.开始云端直播推流

  • 调用接口:
// 云端推流推荐分辨率
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,
        "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":1,"liveUrl": "rtmp://xxx"} //配置推流地址,地址来自 步骤1获取的推流地址
        ]
    }
];

//开始直播推流,云端推流开启后会回调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请参考:

相关结构定义请参考:

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);

(2)画中画布局示例图:

画中画布局示例图

相关API请参考:

4.观众观看直播

通过 播放器SDK观看直播.

5.停止云端直播推流

停止云端直播推流后,也会触发事件CRVideo_SvrMixerStateChanged

  • 接口调用:
CRVideo_StopSvrMixer();

相关API请参考:

6.回放点播

通过 云屋点播API回放点播。