合流配置
合流方法在 qiniu::QNRoomInterface
接口中定义;
- 创建自定义合流
用户可以根据使用场景,创建自定义的合流任务,配置合流背景,水印等参数;
// 合流画面填充方式
enum MergeStretchMode
{
ASPECT_FILL = 0, // 在保持长宽比的前提下,缩放视频,使其充满容器
ASPECT_FIT = 1, // 在保持长宽比的前提下,缩放视频,使其在容器内完整显示,边缘部分填充黑边
SCALE_TO_FIT = 2, // 缩放视频,使其填充满容器,可能导致拉伸变形
};
// 合流背景、水印配置参数
struct MergeLayer {
string layer_url; // http网络图片地址
int pos_x = 0; // 在合流画面中的x坐标
int pos_y = 0; // 在合流画面中的y坐标
int layer_width = 0; // 该图片占宽
int layer_height = 0; // 该图片占高
};
typedef list<MergeLayer> MergeLayerList;
// 自定义合流配置信息
struct MergeJob {
string job_id; // 合流任务id,保证唯一
string publish_url; // 自定义合流推流地址
int width = 0; // 合流画布宽
int height = 0; // 合流画布高
int fps = 0; // 合流帧率
int bitrate = 0; // 合流码率bps
int min_bitrate = 0; // 最小码率
int max_bitrate = 0; // 最大码率
MergeStretchMode stretch_mode = ASPECT_FILL;
};
// 创建自定义合流任务
// @param job_desc: 合流任务配置结构
// @param merge_background: 合流背景图
// @param merge_watermark: 合流水印图
// @return 0:成功;其它请参考错误码列表
virtual int CreateMergeJob(const MergeJob& job_desc, const MergeLayer& merge_background, const MergeLayerList& merge_watermark) = 0;
- 开启服务端合流
服务端合流(旁路直播)配置信息,通过 SDK 信令将参数发送到服务端,服务端按照指定的参数进行合流并推出 RTMP 流;
struct MergeOptInfo
{
string track_id; // Track Id,房间内唯一
bool is_video; // 是否为视频类型,如果为 false, 则以下参数无效
int pos_x; // 此路流(即此 Track)在 RTMP 流画布中的 X 坐标
int pos_y; // 此路流(即此 Track)在 RTMP 流画布中的 Y 坐标
int pos_z; // 此路流(即此 Track)在 RTMP 流画布中的 Z 坐标
int width; // 此路流(即此 Track)在 RTMP 流画布中的宽度,缩放、裁减方式根据后端配置决定
int height; // 此路流(即此 Track)在 RTMP 流画布中的高度,缩放、裁减方式根据后端配置决定
};
typedef list<MergeOptInfo> MergeOptInfoList;
// 配置各个 Track 的合流参数
// @param add_tracks_list_ 新增 Tracks 的合流配置
// @param remove_tracks_list 去除 Tracks 的合流配置,Tracks Id 链表
// @param job_id 合流任务id
// @return 0:操作成功,具体合流结果可通过观看旁路直播进行查看
virtual int SetMergeStreamlayouts(
const MergeOptInfoList& add_tracks_list_,
const list<string>& remove_tracks_id_list,
const string& job_id = string()
) = 0;
- 关闭服务端合流
virtual int StopMergeStream(const string& job_id = string()) = 0;
建议一个房间内同时只有一个用户可以控制服务端合流的配置,当此用户离开房间时,务必调用 StopMergeStream
取消合流操作,以免旁路推流(RTMP 流)出现黑屏现象。
有关服务端合流功能更详细的介绍,请参考链接:服务端合流