直播合流
直播 合流是指将房间内多路音视频流进行按需混合,控制输出的合流视频参数。
利用直播合流服务端 API,您可以进行以下配置:
- 选择主播视频流进行合流,即控制观众可以在合流后视频中看到或者听到的哪些主播
- 配置直播的布局,即观众端多视频画面的排版方案
- 管理直播合流输出的分辨率
- 管理(文字、图片)水印的效果和位置
请求方法
POST:http(s)://api.rong-api.com/rtc/mcu/config.json
签名规则: 所有请求融云服务端 API 接口的请求均需要进行规则校验,详见 API 请求签名。
正文参数
HTTP 请求正文中包含具有以下结构的 JSON 对象:
请求参数 | 类型 | 说明 |
---|---|---|
sessionId | String | (必传)需要配置合流的会话 ID,可通过服务端回调获取。详见房间状态同步。 |
config | Object | JSON 格式数据,包含所有布局相关参数。 |
config.mode | Number | 合流布局模式,用于控制即多视频画面的排版方式。可选模式如下:
|
config.version | Number | 配置版本号,默认为 1。 |
config.host_user_id | String | 主视频流发布者的用户 ID。使用自定义布局时(config.mode 为 1 )应留空,填 “”。
|
config.host_stream_id | String | 主视频流 ID。使用自定义布局时(config.mode 为 1 )应留空,填 “”。
|
config.output | Object | 指定合流之后的媒体输出参数,内部包含 JSON 格式的视频合流输出配置(video )和音频合流输出配置(audio )。详见下方 config.output 对象说明 |
config.customMode | Bool | (已废弃)请使用 inputFilterMode 字段。 |
config.inputFilterMode | Number | 控制 MCU 合流服务所使用的资源。
|
config.input | Object | 指定需要进行合流的子用户流输入配置,内部包含子视频流的数组(video )和子音频流数组(audio )。详见下方 config.input 对象说明 |
config.waterMark | Object | 指定视频水印配置,支持在合流后整个画布上添加水印;以及各个子视频流上添加水印。可添加图片、文字、时间戳水印。详见下方 config.waterMark 对象说明。 |
-
config.output 对象说明:该对象描述了合流的视频、音频输出参数。
参数 类型 说明 video Object 指定合流输出视频的配置,内部包含常规视频流(大流)配置对象( normal
)、小流配置对象(tiny
)、裁剪方式配置、背景颜色配置和背景图配置。video.normal Object 指定合流之后媒体服务输出的常规视频流(大流)的配置。 video.normal.width Number 合流之后媒体服务输出的常规尺寸视频的宽度。 video.normal.height Number 合流之后媒体服务输出的常规尺寸视频的高度。 video.normal.fps Number 合流之后媒体服务输出的常规尺寸视频的帧率。 video.normal.bitrate Number 合流之后媒体服务输出的常规尺寸视频的码率。如果您无法确定合适的码率,可参考以下分辨率/码率对应关系进行配置: - 640X360:800
- 480X480:800
- 640X480:900
- 1280X720:2500
- 1920X1080:4000
video.tiny Object (可选)指定合流之后媒体服务输出的小流视频的配置。如不配置,小流使用默认分辨率("width": 180, "height": 320) video.tiny.width Number 合流之后媒体服务输出的小流视频的宽度。 video.tiny.height Number 合流之后媒体服务输出的小流视频的高度。 video.tiny.fps Number 合流之后媒体服务输出的小流视频的帧率。 video.tiny.bitrate Number 合流之后媒体服务输出的小流视频的码率(kbps)。 video.exparams Object 指定合流服务输出视频的其他配置,内部包含视频裁剪方式配置( renderMode
)。video.exparams.renderMode Number 1
:裁剪;2
:不裁剪。video.backgroundColor String 指定背景颜色,无此项则保持上次设置。例如 "0xf1a2c3"。 video.backgroundPicture Object 指定合流背景图的配置。详见下方 video.backgroundPicture 对象说明。 audio Object 指定合流输出音频的配置,内部包含音频比特率配置( bitrate
)。audio.bitrate Number 音频比特率配置,单位为 kbps。 -
video.backgroundPicture 对象说明:该对象描述了合流的视频的背景图配置。
参数 类型 说明 enable String 是否需要设置背景图。 off
表示关闭。on
或者不传表示开启。fillMode String 背景图片填充模式。 1
:按比例裁剪。2
:不裁剪,按比例压缩。picture Array of Objects 背景图配置数组。 picture[i].uri String 图片下载地址。要求图片是png格式的,不能是 jpg 格式的,也不能是 jpg 格式的图片的后缀名改成 png 的图片。 picture[i].x Number 图片显示位置横坐标 (0.0-1.0) picture[i].y Number 图片显示位置纵坐标 (0.0-1.0) picture[i].w Number 图片显示区域宽度 (0.0-1.0), 对应整体画布宽度为 1 picture[i].h Number 图片显示区域高度 (0.0-1.0), 对应整体画布高度为 1。其中图片宽高的显示会根据原始比例做缩放。例如从网络地址获取的 png 图片原始宽高为500x500,picture[i].w=0.5,picture[i].h=0.2,画布尺寸为 640*480,则设置的图片显示区域为(320x96),最终显示的图片水印大小为(96x96)。
-
config.input 对象说明:该对象描述了进行合流的子视频流、子音频流输入参数,以及自定义布局下子视图的具体坐标和宽高。
参数 类型 说明 video Array of objects 指定需要进行合流的用户视频流数组,内部包含各个视频流的基础信息。在合流布局方式为自定义布局时( config.mode
= 1),内部还需要包含各个子视频流对应视图的坐标和宽高配置。video[i].user_id String (必填)子视图视频发布者 ID。需要保证有效性。 video[i].stream_id String (必填)子视图视频发布者的流 ID,需要保证有效性。
可通过服务端回调获取。详见房间状态同步。对应字段为用户资源信息下mediaType
为 1 时的msid
。video[i].x Number 子视图左上角相对画布原点的偏移坐标,x 轴参数(像素)不能超出画布整体。
仅在合流布局方式为自定义布局时(config.mode
= 1)需要设置。video[i].y Number 子视图左上角相对画布原点的偏移坐标,y 轴参数(像素)不能超出画布整体。
仅在合流布局方式为自定义布局时(config.mode
= 1)需要设置。video[i].width Number 子视图视频的宽度(像素值), x + width 不能大于视频宽度像素值。
仅在合流布局方式为自定义布局时(config.mode
= 1)需要设置。video[i].height Number 子视图视频的高度(像素值), y + height 不能大于视频高度像素值。
仅在合流布局方式为自定义布局时(config.mode
= 1)需要设置。audio Array of objects 指定需要进行合流的用户音频流数组,内部包含各个音频流的基础信息。 audio[i].user_id String 音频流发布者的用户 ID。 audio[i].stream_id String 音频流 ID。
可通过服务端回调获取。详见房间状态同步。对应字段为用户资源信息下mediaType
为 0 时的msid
。 -
config.waterMark 对象说明:该对象描述了合流前、合流后的水印配置。
参数 类型 说明 waterMark.enable Bool 水印开关。 waterMark.mixScreen Object 配置合流后整个画布的水印。 waterMark.mixScreen.timestamp Object 配置合流后整个画布的水印。详见下方时间戳水印说明。 waterMark.mixScreen.text Array of Objects 配置合流后整个画布的水印。详见下方文字水印说明。 waterMark.mixScreen.picture Array of Objects 配置合流后整个画布的水印。详见下方图片水印说明。 waterMark.singleScreen Array of Objects 根据流 ID 配置单个视频流的水印。数组内部可指定各个子视频流的水印配置。 waterMark.singleScreen[i].steamId String 子视频流的 ID。
可通过服务端回调获取。详见房间状态同步。对应字段为用户资源信息下mediaType
为 1 时的msid
。waterMark.singleScreen[i].timestamp Object 配置单个视频流的时间戳水印。详见下方时间戳水印说明。 waterMark.singleScreen[i].text Array of Objects 配置单个视频流的文字水印。详见下方文字水印说明。 waterMark.singleScreen[i].picture Array of Objects 配置单个视频流的图片水印。详见下方图片水印说明。 -
时间戳水印说明:
timestamp
对象描述了时间戳的水印配置参数。参数 类型 说明 timestamp Object 配置时间戳水印。 timestamp.timezone Number 时间戳水印时区。 timestamp.fontSize Number 时间戳水印字体像素大小。 timestamp.color String 时间戳水印字体颜色。可选值: black
(黑)、white
(白)。timestamp.alpha Number 时间戳水印字体透明度(0.0-1.0)。 timestamp.x Number 时间戳水印起始位置横坐标, 浮点值(0.0-1.0),对应画布宽度为 1。 timestamp.y Number 时间戳水印起始位置纵坐标, 浮点值(0.0-1.0),对应画布高度为 1。 -
文字水印说明:
text
数组描述了文字水印配置参数。参数 类型 说明 text Array of Objects 配置文字水印。 text[i].content String 文字水印的文字内容。 text[i].fontSize Number 文字水印的字体大小(像素)。 text[i].color String 文字水印字 体颜色。可选值: black
(黑)、white
(白)。text[i].alpha Number 文字水印的文字透明度 (0.0-1.0) text[i].x Number 文字水印的文字起始位置横坐标 (0.0-1.0)。 text[i].y Number 文字水印的文字起始位置纵坐标 (0.0-1.0)。 -
图片水印说明:
picture
数组描述了图片水印配置参数。参数 类型 说明 picture Array of Objects 配置图片水印。 picture[i].uri String 图片下载地址。要求图片是png格式的,不能是 jpg 格式的,也不能是 jpg 格式的图片的后缀名改成 png 的图片。 picture[i].x Number 图片显示位置横坐标 (0.0-1.0) picture[i].y Number 图片显示位置纵坐标 (0.0-1.0) picture[i].w Number 图片显示区域宽度 (0.0-1.0), 对应整体画布宽度为 1 picture[i].h Number 图片显示区域高度 (0.0-1.0), 对应整体画布高度为 1。其中图片 宽高的显示会根据原始比例做缩放。例如从网络地址获取的 png 图片原始宽高为500x500,picture[i].w=0.5,picture[i].h=0.2,画布尺寸为 640*480,则设置的图片显示区域为(320x96),最终显示的图片水印大小为(96x96)。
-
JSON 示例
{
"sessionId":"aaa",
"config":{
"version": 2,
"mode": 1/2/3, // 1 自定义,需要用户设置input 2 悬浮(默认) 3 自适应
"host_user_id": "001", //
"host_stream_id":"111_RongCloudRTC",//此流会渲染到布局的主位置上
"output": {
"video": {
"normal": {
"width": 360,
"height": 640,
"fps": 25,
"bitrate": 800, //kbps
},
"exparams": {
"renderMode":1 //1 裁剪 2 不裁剪,根据该用户分辨率进行渲染
},
"backgroundColor":"0xf1a2c3", //背景颜色, 无此项则保持上次设置
"backgroundPicture" : { //背景图片, 无此项则保持上次设置
"enable":"on", //enable off-关闭, on或者没有, 开启
"fillMode" : 1, //背景图片填充模式, 1-按比例裁剪, 2-不裁剪, 按比例压缩
"picture" : [
{
"uri" : "http://aaa.png", //png图片下载地址
"x" : 0.0, //相对于整体画布的起始位置x坐标
"y" : 0.0, //相对于整体画布的起始位置x坐标
"w" : 1.0, //相对于整体画布的宽
"h" : 1.0 //相对于整体画布的高
},
{
"uri" : "http://bbb.png",
"x" : 0.5,
"y" : 0.5,
"w" : 0.5,
"h" : 0.5
}
]
}
},
"audio": {
"bitrate": 200, //kbps
}
},
"inputFilterMode":4,
"input": {
"video": [
{
"user_id": "111",
"stream_id":"111_RongCloudRTC", //用来区分普通视频和第三方视频,无此项或者值为RongCloudRTC时为普通摄像头视频
//"tiny": false,
"x":0,
"y":0,
"width":180,
"height":320
},
{
"user_id": "2222",
"stream_id":"2222_screenshare",
//"tiny": false,
"x":180,
"y":320,
"width":180,
"height":320
}
],
"audio":[
{
"user_id":"111",
"stream_id":"111_RongCloudRTC"
},
{
"user_id":"2222",
"stream_id":"2222_RongCloudRTC"
}
]
},
"waterMark": {
"enable":"on", // off 关闭, on或者没有enable, 开启
"mixScreen": {
"timestamp": {
"fontSize": 30,
"timezone": 8,
"x": 0.1,
"y": 0.1,
"alpha": 0.8,
"color": "black"
},
"text": [{
"alpha": 1,
"color": "white",
"x": 0.1,
"y": 0.2,
"content": "abcde",
"fontSize": 30
},
{
"alpha": 0.2,
"color": "black",
"x": 0.3,
"y": 0.5,
"content": "hello, world",
"fontSize": 20
}
],
"picture": [{
"uri": "https://aaa",
"w": 0.1,
"h": 0.1,
"x": 0.1,
"y": 0.2
},
{
"uri": "https://ccc",
"w": 0.6,
"h": 0.6,
"x": 0.2,
"y": 0.2
}
]
},
"singleScreen": [{
"streamId": "stream1_RongCloudRTC",
"timestamp": {
"alpha": 0.8,
"color": "black",
"fontSize": 30,
"timezone": 8,
"x": 0.1,
"y": 0.1
}
},
{
"streamId": "stream2_RongCloudRTC",
"picture": [{
"uri": "https://ccc",
"w": 0.1,
"h": 0.1,
"x": 0.2,
"y": 0.3
}]
}
]
}
}
}
返回结果
HTTP 响应正文包含具有以下结构的 JSON 对象:
code
:HTTP 响应正文中的业务码,200
为处理成功。
{
"code":404,
"errorMessage": "Not a valid API"
}