云端转码(旁路转推)

更新时间: 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.jpg 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 转推信息