云端转码(旁路转推)
更新时间: 2023-10-23 16:45:52
# 云端转码(旁路转推)
# 服务域名
线上服务器: http://rtcapi.xueersi.com
测试环境:https://api2.xueersi.com/rtcapi2stage
# 创建旁路转推
# 接口地址
https://api2.xueersi.com/rtcapi2testapi/record/createConverter
# 请求header
字段 | 值 | 描述 |
---|---|---|
Method | POST | Http 方法 |
Content-Type | application/json | json格式 |
Authorization | 接口签名值 | Authorization签名 |
Traceid | 随机字符串 | 排查问题使用 |
# 请求json参数
字段 | 类型 | 必须 | 描述 |
---|---|---|---|
appid | String | 是 | 引擎appid |
region | String | 是 | 创建 Converter 的区域(cn:中国大陆) |
uid | String | 是 | 用户UID |
converter | Json | 是 | 转推配置 |
converter具体参数
参数 | 类型 | 必须 | 描述 |
---|---|---|---|
name | String | 是 | Converter 的名字。长度必须在 64 个字符以内,支持的字符集范围为:- 所有小写英文字母(a-z)- 所有大写英文字母(A-Z)- 数字 0-9 - "-", "_" |
transcodeOptions | JSON Object | 是 | - 当 converter.transcodeOptions 中无 audioOptions 字段且有 videoOptions 字段时,Converter 输出纯视频流。- 当 converter.transcodeOptions.audioOptions 字段中无 rtcStreamUids 字段时,将频道内所有用户的音频流进行混音并通过 Converter 输出混音后的音频流。- 当 converter.transcodeOptions.audioOptions 字段中有 rtcStreamUids 字段时,将指定用户的音频流进行混音并通过 Converter 输出混音后的音频流 |
transcodeOptions.rtcChannel | String | 是 | 频道名称。即 Converter 处理的流所属的频道。字符串长度必须在 64 字节以内 |
transcodeOptions.audioOptions | JSON Object | 是 | Converter 的音频转码配置 - 在纯视频流(无音频)场景中,无需设置 audioOptions 及其相关字段。 - 在音视频场景中,audioOptions 为必填字段,若无字段要求,可以把 audioOptions 设置为空,例如:"audioOptions":{} |
transcodeOptions.audioOptions.codecProfile | String | 否 | Converter 输出的音频编解码器。支持如下值:- LC-AAC(默认值): MPEG-4 AAC LC。- HE-AAC: High-Efficiency AAC。 |
transcodeOptions.audioOptions.sampleRate | Number | 否 | Converter 输出的音频编码采样率 (Hz),可填 32000,44100 或 48000(默认值)。 |
transcodeOptions.audioOptions.bitrate | Number | 否 | Converter 输出的音频编码码率 (Kbps)取值范围为 [32,128]。默认值为 48。如果音频编解码器为 LC-AAC,推荐音频编码码率取值范围为 [32, 112]。如果音频编解码器为 HE-AAC,推荐音频编码码率取值范围为 [40, 96]。 |
transcodeOptions.audioOptions.audioChannels | Number | 否 | Converter 输出的音频声道数,可填 1(默认值) 或 2。 |
transcodeOptions.audioOptions.rtcStreamUids | JSON Array | 否 | 参与混音的用户 UID,默认值为频道内所有用户 UID/Account,代表将频道内所有用户音频进行混音。 |
transcodeOptions.videoOptions | JSON Object | 是 | Converter 的视频转码配置。- 在纯音频流(无视频)场景中,无需设置 videoOptions 及其相关字段。- 在音视频场景中,videoOptions 为必填字段,且不能为空。 |
transcodeOptions.videoOptions.canvas | JSON Object | 是 | 视频画布。 |
transcodeOptions.videoOptions.canvas.width | Number | 是 | 画布的宽度 (pixel)。取值范围为 [66,1920]。 |
transcodeOptions.videoOptions.canvas.height | Number | 是 | 画布的高度 (pixel)。取值范围为 [66,1920]。 |
transcodeOptions.videoOptions.canvas.color | Number | 是 | 画布的背景色。RGB 颜色值,以十进制数表示。如 255 代表蓝色。取值范围为 [0,16777215]。默认值为 0,即黑色。 |
transcodeOptions.videoOptions.layout | JSON Array | 是 | 画布上视频画面的内容描述。 |
transcodeOptions.videoOptions.layout.rtcStreamUid | Number | 是 | 视频流所属用户的 UID。 |
transcodeOptions.videoOptions.layout.region | JSON Object | 是 | 用户视频画面在画布上的显示区域。超出画布的视频画面会被裁剪,无法显示。 |
transcodeOptions.videoOptions.layout.region.xPos | Number | 是 | 画面在画布上的 x 坐标 (pixel)。以画布左上角为原点,x 坐标为画面左上角相对于原点的横向位移。 |
transcodeOptions.videoOptions.layout.region.yPos | Number | 是 | 画面在画布上的 y 坐标 (pixel)。以画布左上角为原点,y 坐标为画面左上角相对于原点的纵向位移。 |
transcodeOptions.videoOptions.layout.region.zIndex | Number | 是 | 画面的图层编号。取值范围为 [0,100]。0 代表最下层的图层。100 代表最上层的图层。 |
transcodeOptions.videoOptions.layout.region.width | Number | 是 | 画面的宽度 (pixel)。 |
transcodeOptions.videoOptions.layout.region.height | Number | 是 | 画面的高度 (pixel)。 |
transcodeOptions.videoOptions.layout.fillMode | String | 否 | 画面的显示方式。- (默认)fill:在保持长宽比的前提下,缩放画面,使画面充满容器。- fit:在保持长宽比的前提下,缩放画面,使得画面在容器内完整显示出来。 |
transcodeOptions.videoOptions.layout.placeholderImageUrl | String | 是 | 用户画面的背景图 URL 地址。支持 JPG 和 PNG 格式的图片。当频道内用户停止发布视频流,如果设置了该字段,用户的视频画面将切换为该背景图,否则会显示为画布背景色 |
transcodeOptions.videoOptions.bitrate | Number | 是 | 输出视频的编码码率 (Kbps)。取值范围为 [1,10000]。 |
transcodeOptions.videoOptions.frameRate | Number | 是 | 输出视频的编码帧率 (fps)。取值范围为 [1,30]。默认值为 15 。 |
transcodeOptions.videoOptions.gop | Number | 是 | 输出视频的 GOP。默认值为 frameRate * 2。 |
transcodeOptions.videoOptions.codecProfile | String | 否 | 输出视频的编码规格。输出视频的编码规格。支持如下值:- high(默认值): High 级别的视频编码规格,一般用于广播及视频碟片存储,高清电视。- baseline: Baseline 级别的视频编码规格,一般用于低阶或需要额外容错的应用,比如视频通话、手机视频等。- main: Main 级别的视频编码规格,一般用于主流消费类电子产品,如 mp4、便携的视频播放器、PSP 和 iPad 等。 |
idleTimeout | Number | 否 | Converter 处于空闲状态的最大时长(秒)。空闲指 Converter 处理的音视频流所对应的所有用户均已离开频道。当 Converter 处于空闲状态时长大于 idleTimeout,Converter 自动销毁,推流停止。取值范围为 [5,86400]。如果设置值小于 5,则默认为 5;如果设置值大于 86400,则默认为 86400。默认值为 300。 |
rtmpUrl | String | 是 | CDN 推流地址。必须为有效的 RTMP 地址,且长度在 1024 个字符以内。 |
# demo
请求
curl --request POST "http://127.0.0.1:3888/api/record/createConverter" -H 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBpZCI6ImVlNmJhMzBjLTdjNDYtNDI2ZS04NDFlLTEzYTE2YzA1MTMxNSIsInRpbWVzdGFtcCI6MTY0NDE5OTA5Nn0.kMBFAEz-gY_rwX75rFh5JdexsxabJk5uF0IuNXvF6Rs' -H 'Content-Type: application/json --data-raw '
{
"appid": "xxxxxx",
"region": "cn",
"uid": "8900",
"converter": {
"name": "test888_vertical",
"transcodeOptions": {
"rtcChannel": "888888",
"audioOptions": {
"codecProfile": "LC-AAC",
"sampleRate": 48000,
"bitrate": 48,
"audioChannels": 1,
"rtcStreamUids": [201]
},
"videoOptions": {
"canvas": {
"width": 360,
"height": 640
},
"layout": [{
"rtcStreamUid": 201,
"region": {
"xPos": 0,
"yPos": 0,
"zIndex": 1,
"width": 360,
"height": 320
},
"fillMode": "fill",
"placeholderImageUrl": "[http://example.tal.com/user_placeholder.jpg"](http://example.tal.com/user_placeholder.jpg")
},
{
"rtcStreamUid": 202,
"region": {
"xPos": 0,
"yPos": 320,
"zIndex": 1,
"width": 360,
"height": 320
}
}
],
"codecProfile": "High",
"frameRate": 15,
"gop": 30,
"bitrate": 400,
"seiExtraInfo": "xxxyyyzzz"
}
},
"rtmpUrl": "rtmp://example.tal.com/live/888888",
"idleTimeout": 300
}
}'
返回:
{
"s": 10000,
"e": "sucess",
"d": {
"message": "Success",
"converter": {
"id": "4c014467d647bb87b60b719f6fa57686",
"createTs": 1591786766,
"updateTs": 1591786766,
"state": "connecting"
}
}
}
# 返回内容
字段 | 类型 | 必须 | 描述 | ||
---|---|---|---|---|---|
s | Number | 是 | 状态码 | ||
e | String | 是 | 说明信息 | ||
d | Json | ||||
converter | Json | 是 | |||
id | String | 是 | 转码id | ||
createTs | Number | 是 | 创建时间戳 | ||
updateTs | Number | 是 | 更新时间戳 | ||
state | String | 是 | 状态 |
# 更新旁路转推
# 接口地址
{$域名}api/record/updateConverter
# 请求header
字段 | 值 | 描述 |
---|---|---|
Method | POST | Http 方法 |
Content-Type | application/json | json格式 |
Authorization | 接口签名值 | Authorization签名 |
Traceid | 随机字符串 | 排查问题使用 |
注意:更新转推布局只支持视频布局和推流地址更新
# 请求json参数
字段 | 类型 | 必须 | 描述 |
---|---|---|---|
appid | String | 是 | 引擎appid |
region | String | 是 | 创建 Converter 的区域(cn:中国大陆) |
uid | String | 是 | 用户UID |
cid | String | 是 | 转推id |
converter | Json | 是 | 转推配置 |
# demo
请求:
curl --request POST "http://127.0.0.1:3888/api/record/updateConverter" -H 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBpZCI6ImVlNmJhMzBjLTdjNDYtNDI2ZS04NDFlLTEzYTE2YzA1MTMxNSIsInRpbWVzdGFtcCI6MTY0NDE5OTA5Nn0.kMBFAEz-gY_rwX75rFh5JdexsxabJk5uF0IuNXvF6Rs' -H 'Content-Type: application/json --data-raw
更新推流地址请求示例
'{
"appid": "xxxxxx",
"region": "cn",
"cid": "57867879HI90JPB",
"uid": "8900",
"converter": {
"rtmpUrl": "rtmp://example.tal.com/live/888888"
}
}'
更新布局请求示例:
'{
"appid": "xxxxxx",
"region": "cn",
"cid": "57867879HI90JPB",
"uid": "8900",
"converter": {
"transcodeOptions": {
"videoOptions": {
"canvas": {
"width": 360,
"height": 640
},
"layout": [{
"rtcStreamUid": 201,
"region": {
"xPos": 0,
"yPos": 0,
"zIndex": 1,
"width": 360,
"height": 320
},
"fillMode": "fill",
"placeholderImageUrl": "[http://example.tal.com/user_placeholder.jpg"](http://example.tal.com/user_placeholder.jpg")
},
{
"rtcStreamUid": 202,
"region": {
"xPos": 0,
"yPos": 320,
"zIndex": 1,
"width": 360,
"height": 320
}
}
]
}
}
}
}
返回:
{
"s": 10000,
"e": "sucess",
"d": {
"message": "Success",
"converter": {
"id": "4c014467d647bb87b60b719f6fa57686",
"createTs": 1591786766,
"updateTs": 1591786766,
"state": "running"
}
}
}
# 返回内容
字段 | 类型 | 必须 | 描述 | ||
---|---|---|---|---|---|
s | Number | 是 | 状态码 | ||
e | String | 是 | 说明信息 | ||
d | Json | ||||
converter | Json | 是 | |||
id | String | 是 | 转码id | ||
createTs | Number | 是 | 创建时间戳 | ||
updateTs | Number | 是 | 更新时间戳 | ||
state | String | 是 | 状态 |
# 删除旁路转推
# 接口地址
{$域名}api/record/deleteConverter
# 请求header
字段 | 值 | 描述 |
---|---|---|
Method | POST | Http 方法 |
Content-Type | application/json | json格式 |
Authorization | 接口签名值 | Authorization签名 |
Traceid | 随机字符串 | 排查问题使用 |
# 请求json参数
字段 | 类型 | 必须 | 描述 |
---|---|---|---|
appid | String | 是 | 引擎appid |
region | String | 是 | 创建 Converter 的区域(cn:中国大陆) |
cid | String | 是 | 转推id |
demo
请求:
curl --request POST "http://127.0.0.1:3888/api/record/deleteConverter" -H 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBpZCI6ImVlNmJhMzBjLTdjNDYtNDI2ZS04NDFlLTEzYTE2YzA1MTMxNSIsInRpbWVzdGFtcCI6MTY0NDE5OTA5Nn0.kMBFAEz-gY_rwX75rFh5JdexsxabJk5uF0IuNXvF6Rs' -H 'Content-Type: application/json --data-raw
'{
"appid": "xxxxxx",
"region": "cn",
"cid": "57867879HI90JPB"
}'
返回:
{
"s": 10000,
"e": "sucess",
"d": {}
}
# 返回内容
字段 | 类型 | 必须 | 描述 |
---|---|---|---|
s | Number | 是 | 状态码 |
e | String | 是 | 说明信息 |
d | Json |
# 查询旁路转推
# 接口地址
{$域名}api/record/queryConverter
# 请求header
字段 | 值 | 描述 |
---|---|---|
Method | POST | Http 方法 |
Content-Type | application/json | json格式 |
Authorization | 接口签名值 | Authorization签名 |
Traceid | 随机字符串 | 排查问题使用 |
# 请求json参数
字段 | 类型 | 必须 | 描述 |
---|---|---|---|
appid | String | 是 | 引擎appid |
region | String | 是 | 创建 Converter 的区域(cn:中国大陆) |
cid | String | 是 | 转推id |
demo
请求
curl --request POST "http://127.0.0.1:3888/api/record/queryConverter" -H 'Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBpZCI6ImVlNmJhMzBjLTdjNDYtNDI2ZS04NDFlLTEzYTE2YzA1MTMxNSIsInRpbWVzdGFtcCI6MTY0NDE5OTA5Nn0.kMBFAEz-gY_rwX75rFh5JdexsxabJk5uF0IuNXvF6Rs' -H 'Content-Type: application/json --data-raw
'{
"appid": "xxxxxx",
"region": "cn",
"cid": "57867879HI90JPB"
}'
返回:
{
"s": 10000,
"e": "sucess",
"d": {
"message": "Success",
"converter": {
"name": "test888_vertical",
"rtmpUrl": "rtmp://example.tal.com/live/test888",
"idleTimeout": 300,
"createTs": 1616946970,
"state": "running"
}
}
}
# 返回内容
字段 | 类型 | 必须 | 描述 | |
---|---|---|---|---|
s | Number | 是 | 状态码 | |
e | String | 是 | 说明信息 | |
d | Json | 是 | ||
converter | Json | 是 | 转推信息 |