混流
1、 功能简介
混流是指的将推到创世云服务上的多路RTC流通过混流服务器混成一路流。
转推CDN(Content Delivery Network)指的是将音视频流从创世云实时音视频云推送到CDN的过程。通过CDN进行更大规模的内容分发, 用户可以直接通过URL拉流地址从网页或者第三方播放器进行观看。
混流转推CDN就是将多路混流后的一路流转推到CDN, 观众可以通过URL拉流地址拉一路流就能观看多个互动画面。
1.1 混流转推CDN的优点
1、降低了开发实现上的复杂度; 比如当有N个主播互动连麦, 如果采用混流, 观众端可以直接通过URL拉流地址播放一路流实现观看N个主播的画面,而不用同时拉N路视频流;
2、降低对设备的性能要求,减少设备性能开销和网络宽带的负担; 如果N路连麦, 观众拉N路流, 并同时播放N路流, 需要设备硬件上能支持同时播N路流。
3、对一个画面鉴黄就可覆盖多个画面,更便捷。
1.2 混流转推实现时机
开发者在拉流 / 推流成功后开始混流; 比如 主播A 与 观众B 成功连麦后, 成功拉取到 观众B 的画面时即开始混 主播A 的流和 观众B 的流; 也可以根据需求, 在其他合适时机进行混流。
1.3 混流转推CDN地址获取
创世云支持自有的CDN分发, 如果应用需要支持大规模音视频流分发的请与创世云的技术人员进行沟通进行沟通配置即可。 配置后会默认将实时音视频流转推到创世云自有CDN。 技术人员会将CDN转推地址提供给开发人员, 开发人员在混流接口中传入即可。
如果您的应用与第三方 CDN 有业务合作, 想要使用原有的第三方 CDN 流媒体网络的分发服务的同时又想使用 SDK 进行低延迟连麦, 也是支持的, 只需要将您的第三方CDN 转推地址传入混流接口中即可, 详细请参考以下文档。
2、混流流程
本节介绍如何使用ChuangLiveEngine 实现混流转推RTMP功能,API调用时序图如下:
3、 使用步骤
3.1 初始化、登录房间、推流
注意:
混流转推前提必须登录房间成功并以互动者的身份发起推流成功, 即混流发起者必须参与混流。
支持房间内混流, 跨房间混流, 即将其他房间的流混入。
混流接口配置中的RTMP地址必须设置且必须是rtmp协议的地址。
详情请参考 1、 初始化 --- 2、登录房间 ---3、推流
3.2 设置混流转推配置
ChuangMixStreamConfig 是SDK中混流转推的配置对象, 包括转推CDN的RTMP地址、混流ID、混流后的输出分辨率、混流视频帧率、混流码率、混流流信息列表, 配置类详情见下图:
注意:必须传入正确的混流RTMP服务地址, 混流RTMP地址内容请参考以下方法参数说明;目前混流转推地址的 URL 格式必须为 RTMP 格式:rtmp://xxxxxxxx。
/**
* @description 混流配置
* @typedef {Object} ChuangMixStreamConfig
* @property {string} rtmpAddress 混流后输出的RTMP完整地址:(一般是混流后输出的 RTMP服务器地址 + 混流后输出的 RTMP 服务器端口号 + 混流后输出的 RTMP 应用名)
* @property {ChuangMixResolutions} outputVideoResolution 混流后的视频分辨率 支持的分辨率
* @property {string} outputStremId 混流后的流Id
* @property {string} outputVideoBitrate 混流后的视频比特率(单位:kbps)
* @property {Array.<ChuangMixStreamInfo>} mixStreams 参与混流的流信息列表
*/
其中参与混流的流信息列表的元素类是布局配置类:ChuangMixStreamInfo,它的详细原型见以下:
/**
* @description 参与混流的流信息列表
* @typedef {Object} ChuangMixStreamInfo
* @property {string} streamId 用户所推的原视频流的流Id
* @property {string} mixZIndex 用户所推的视频流, 混入之后期望的层叠顺序(0为最底层,一般发起混流的主播传0,之后依次向上层叠)
* @property {ChuangRect} mixSrcRect 用户所推的原视频流需要混入的部分的坐标信息
* @property {ChuangRect} mixDstRect 用户所推的视频流, 混入之后期望所在的位置和大小的坐标信息
* @property {string} videoWidth 用户所推的流的视频宽度
* @property {string} videoHeight 用户所推的流的视频高度
*/
3.3 构建混流配置和混流输入流列表布局配置
输入流最多可设 9 路流(其中必须包括发起混流者自己的流)。 下面代码演示混房间里所有的流, 按照指定大小一次排列。
function setStreamMixConfig () {
var streamMixConfig = {};
streamMixConfig.rtmpAddress = $mixrtmp.val();
streamMixConfig.outputVideoBitrate = $mixbitrateSettings.val();//$mixbitrateSettingsOpt.data('bitrate');
streamMixConfig.outputVideoResolution = $mixresolution.val();
streamMixConfig.outputStremId = $mixId.val();
var mixStreams = [];
var items = videoCube.getAllItems();
for (var i = 0 ; i< items.length ; i++) {
var mixStream = {};
mixStream.streamId = items[i].itemId;
mixStream.videoWidth = items[i].width;
mixStream.videoHeight = items[i].height;
mixStream.mixZIndex = items[i].z;
mixStream.mixDstRect = {
left:items[i].x,
top:items[i].y + items[i].h*i,
right:items[i].x+items[i].w,
bottom:items[i].h*(i+1)+items[i].y
};
mixStreams.push(mixStream);
}
console.log(mixStream);
streamMixConfig.mixStreams = mixStreams;
return streamMixConfig;
}
3.4 发起混流转推
若需要发起混流转推需要调用startMixStream (streamMixConfig, onFailure)
方法实现混流并转推到RTMP协议上。
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
streamMixConfig | ChuangMixStreamConfig | 必传 | 混流配置,详情请参考ChuangMixStreamConfig |
onFailure | failCallback | 选传 | 回调:发起混流失败 |
3.5 更新混流布局
若已经开始混流, 但是房间人信息有变动, 此时只需要更新混流布局方法updateMixStream(mixStreams, onFailure)
更新混流布局即可, 不需要再次调用上面的开始混流接口。
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
mixStreams | ChuangMixStreamInfo | 必传 | 混流输入流的信息集合,详情请参考ChuangMixStreamInfo |
onFailure | failCallback | 选传 | 回调:更新混流布局失败 |
3.6 停止混流
若需要停止混流,调用停止混流方法stopMixStream (onFailure)
即可停止混流。