混流
混流主要用于多路流混成一路流,然后转推出去,可以通过VLC等播放器播放的场景。
混流转推CDN
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 混流流程
本节介绍如何使用ChuangRtcKit SDK实现混流转推RTMP功能,API调用时序图如下:
3 使用步骤
3.1、初始化、登录房间、推流
注意:
混流转推前提必须登录成功并发起推流成功,即混流发起者必须参与混流。
支持房间内混流,跨房间混流,即将其他房间的流混入。
混流接口配置中的RTMP地址必须设置且必须是RTMP协议的地址。
详情请参考 1、 初始化 --- 2、登录房间 ---3、推流
3.2、开始混流
3.2.1 设置混流转推配置
ChuangMixStreamConfig是SDK中混流转推的配置对象,包括转推CDN的RTMP地址、混流ID、混流后的输出分辨率、混流视频帧率、混流码率、混流流信息列表,配置类详情见下图:
注意:必须传入正确的混流RTMP服务地址,混流RTMP地址内容请参考以下方法参数说明;目前混流转推地址的 URL 格式必须为 RTMP 格式:rtmp://xxxxxxxx。
public class ChuangMixStreamConfig {
/**
* 混流地址
*/
public String target;
/**
* 混流宽
*/
public int width;
/**
* 混流高
*/
public int height;
/**
* 混流码率
*/
public int videoBitrateKbps;
/**
* 背景图Id
*/
public String backgroundImage;
/**
* 是否通知房间内其他用户此房间内存在一个混流
*/
public boolean noticeStream;
/**
* 混流水印
*/
public ChuangMixStreamWatermark mixStreamWatermark;
/**
* 混流布局配置
*/
public ChuangMixStreamInfo[] mixStreams;
}
其中参与混流的流信息列表的元素类是布局配置类:ChuangMixStreamInfo,它的详细原型见以下:
public class ChuangMixStreamInfo {
/**
* 视频流Id
*/
public String streamId;
/**
* 视频流宽
*/
public int width;
/**
* 视频流高
*/
public int height;
/**
* 设置流布局层级
*/
public int zlevel;
/**
* 混流源采集区域,该区域宽高比需与dstRect相同
*/
public Rect srcRect;
/**
* 视频流目标坐标
*/
public Rect dstRect;
/**
* 混流填充模式
*/
public ChuangVideoRenderMode renderMode;
/**
* 混流旋转方向
*/
public ChuangStreamRotation rotation;
}
3.2.2 构建混流配置和混流输入流列表布局配置
输入流最多可设9路流(其中必须包括发起混流者自己的流)。下面代码演示混两路流,一路是自己,一路是房间内其他人的,左右布局。
//混流配置
ChuangMixStreamConfig mixConfig = new ChuangMixStreamConfig();
mixConfig.videoBitrateKbps = mMixBitrate;
mixConfig.width = mMixCanvasWidth;
mixConfig.height = mMixCanvasHeight;
mixConfig.noticeStream = enableRtcMix;
mixConfig.target = mMixAddress;
//展示在画布上自己的流
ChuangMixStreamInfo publishStreamMixInfo = new ChuangMixStreamInfo();
publishStreamMixInfo.streamId = pushStreamId;
publishStreamMixInfo.zlevel = 0;
publishStreamMixInfo.width = mVideoWidth;
publishStreamMixInfo.height = mVideoHeight;
publishStreamMixInfo.renderMode = ChuangVideoRenderMode.ASPECT_FIT;
publishStreamMixInfo.rotation = ChuangStreamRotation.ROTATION_0;
publishStreamMixInfo.dstRect = new Rect(left,top,right,bottom);
//开启混流
mLiveEngine.startMixStream(mixConfig);
3.2.3 发起混流转推
mLiveEngine.startMixStream(ChuangMixStreamConfig mixConfig,new IChuangMixStreamCallback);
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
mixConfig | ChuangMixStreamConfig | 必传 | 混流配置,ChuangMixStreamConfig参数mixConfig详情看ChuangMixStreamConfig |
callback | IChuangMixStreamCallback | 可传null | 混流回调,IChuangMixStreamCallback参数callback详情看IChuangMixStreamCallback |
当已经开始混流,但是房间流布局有变动,此时也需要再次调用开始混流接口更新房间混流布局的。
如果需要更换混流RTMP地址,需要先调用停止混流再调用开始混流。
3.3、停止混流
mLiveEngine.stopMixStream()
3.4、混流状态变更回调
/**
* 混流状态码
* @param code 0:成功 其他失败
*/
void mixStreamCallback(int code);