概述
anyRTC 消息通知服务可以将旁路推流业务中的发生的一些事件以 HTTP 或 HTTPS 请求的方式通知到你的服务器。
开通服务
使用 anyRTC 消息通知服务前需要申请开通并进行配置,关于如何开通服务以及消息通知回调的数据格式详见消息通知服务。
事件
消息通知服务器可以通知该业务下的四种事件:
- 创建推流事件
- 推送配置更新事件
- 推流状态变化事件
- 停止推流事件
创建推流事件
当你调用 Create
成功创建一个Converter
时,消息通知服务器会向你的服务器通知该事件。
eventType
为 1(Converter Created)
,payload
示例如下:
{
"converter": {
"id": "4c014467d647bb87b60b719f6fa57686",
"name": "show68_vertical",
"transcodeOptions": {
"rtcChannel": "show68",
"audioOptions": {
"codecProfile": "HE-AAC",
"sampleRate": 48000,
"bitrate": 128,
"audioChannels": 1,
"rtcStreamUids": [
201,
202
]
},
"videoOptions": {
"canvas": {
"width": 360,
"height": 640,
"color": 0
},
"layout": [
{
"rtcStreamUid": 201,
"region": {
"xPos": 0,
"yPos": 0,
"zIndex": 1,
"width": 360,
"height": 320
},
"placeholderImageUrl": "http://example.anyrtc.io/host_placeholder.jpg"
},
{
"rtcStreamUid": 202,
"region": {
"xPos": 0,
"yPos": 320,
"zIndex": 1,
"width": 360,
"height": 320
}
},
{
"imageUrl": "http://example.anyrtc.io/watchmark.jpg",
"region": {
"xPos": 0,
"yPos": 0,
"zIndex": 2,
"width": 36,
"height": 64
}
}
],
"codecProfile": "High",
"frameRate": 15,
"bitrate": 400,
"seiOptions": ""
}
},
"rtmpUrl": "rtmp://example.anyrtc.io/live/show68",
"idleTimeout": 300,
"createTs": 1591786766,
"updateTs": 1591786835,
"state": "connecting"
},
"lts": 1603456600,
"xRequestId": "7bbcc8a4acce48c78b53c5a261a8a564"
}
Converter包含的字段:
id
:String 型字段,Converter 的 ID。它是anyRTC服务器生成的一个 UUID(通用唯一识别码),标识一个已创建的 Converter。name
:String 型可选字段,Converter 的名字。transcodeOptions
:JSON Object 型字段,Converter 的转码配置。rtcChannel
:String 型字段,频道名称。audioOptions
:JSON Object 型字段。Converter 的音频转码配置。codecProfile
:String 型字段。Converter 输出的音频编解码器。sampleRate
:Number 型字段。Converter 输出的音频编码采样率(Hz)。bitrate
:Number 型字段。Converter 输出的音频编码码率(Kbps)。audioChannels
:Number 型可选字段。Converter 输出的音频声道数。rtcStreamUids
:JSON Array 型可选字段。参与混音的用户UID。
videoOptions
:JSON Object 型字段。Converter 的视频转码配置。canvas
:JSON Object 型字段。视频画布。width
:Number 型字段。画布的宽度 (pixel)。height
:Number 型字段。画布的高度 (pixel)。color
:Number 型字段。画布的背景色。RGB 颜色值,以十进制数表示。如 255 代表蓝色。
layout
:JSON Array 型字段。画布上视频画面的内容描述。支持两种元素:RtcStreamView
元素。画布上各用户的视频画面。包含如下字段:rtcStreamUid
:Number 型字段。视频流所属用户的 UID。region
:JSON Object 型字段。用户视频画面在画布上的显示区域。xPos
:Number 型字段。画面在画布上的 x 坐标 (pixel)。以画布左上角为原点,x 坐标为画面左上角相对于原点的横向位移。yPos
:Number 型字段。画面在画布上的 y 坐标 (pixel)。以画布左上角为原点,y 坐标为画面左上角相对于原点的纵向位移。zIndex
:Number 型字段。画面的图层编号。取值范围为 [0,100]。0 代表最下层的图层。100 代表最上层的图层。width
:Number 型字段。画面的宽度 (pixel)。height
:Number 型字段。画面的高度 (pixel)。
ImageView
元素。画布上的视频图片,可用于当水印。包含如下字段:imageUrl
:String 型字段。图片的 HTTP(S) URL。region
:JSON Object 型字段。图片在画布上的显示区域。 -xPos
:Number 型字段。画面在画布上的 x 坐标 (pixel)。以画布左上角为原点,x 坐标为画面左上角相对于原点的横向位移。 -yPos
:Number 型字段。画面在画布上的 y 坐标 (pixel)。以画布左上角为原点,y 坐标为画面左上角相对于原点的纵向位移。 -zIndex
:Number 型字段。画面的图层编号。取值范围为 [0,100]。0 代表最下层的图层。100 代表最上层的图层。 -width
:Number 型字段。画面的宽度 (pixel)。 -height
:Number 型字段。画面的高度 (pixel)。
codecProfile
: String 型字段。输出视频的编码规格。frameRate
:Number 型字段。输出视频的编码帧率 (fps)。bitrate
:Number 型字段。Converter 输出的音频编码码率 (Kbps)。seiOptions
:String 型字段。输出视频中携带的用户 SEI 信息。用于向 CDN 发送用户自定义的 SEI 信息。
rtmpUrl
:String 型必填字段。CDN 推流地址。idleTimeOut
:Number 型字段。Converter 处于空闲状态的最大时长(秒)。空闲指 Converter 处理的音视频流所对应的所有用户均已离开频道。当空闲状态超过设置的 idleTimeout 后,该 Converter 会自动销毁。createTs
:Number 型字段。创建 Converter 时的 Unix 时间戳(秒)。updateTs
:Number 型字段。最近一次更新 Converter 配置时的 Unix 时间戳(秒)。state
:status:String 字段,Converter 的状态。该事件中会报告 "connecting",表示 Converter 正在连接anyRTC业务服务器。
lts
: Number 型字段,该事件在业务服务器上发生的的 Unix 时间戳 (秒)。xRequestId
: String 型字段,标识本次请求的 UUID(通用唯一识别码)。该值为本次请求 header 中 X-Request-ID。
推流配置更新事件
当你调用 Update
成功更新一个 Converter
配置时,消息通知服务器会向你的服务器通知该事件。
eventType
为 2(ConverterUpdatedEvent)
。
- 更新converter.transcodeOptions.videoOptions.layout配置,payload 示例如下:
{
"converter": {
"id": "4c014467d647bb87b60b719f6fa57686",
"createTs": 1591786766,
"updateTs": 1591786835,
"state": "running",
"transcodeOptions": {
"rtcChannel": "show68",
"videoOptions": {
"layout": [
{
"rtcStreamUid": 201,
"region": {
"xPos": 0,
"yPos": 0,
"zIndex": 1,
"width": 360,
"height": 320
},
"placeholderImageUrl": "http://example.anyrtc.io/host_placeholder.jpg"
},
{
"rtcStreamUid": 202,
"region": {
"xPos": 0,
"yPos": 320,
"zIndex": 1,
"width": 360,
"height": 320
}
},
{
"imageUrl": "http://example.anyrtc.io/watchmark.jpg",
"region": {
"xPos": 0,
"yPos": 0,
"zIndex": 2,
"width": 36,
"height": 64
}
}
],
"codecProfile": "High",
"frameRate": 15,
"bitrate": 400,
"seiOptions": ""
}
}
},
"lts": 1603456600,
"xRequestId": "7bbcc8a4acce48c78b53c5a261a8a564",
"fields": "id,createTs,updateTs,state,transcodeOptions.videoOptions.layout"
}
Converter
包含的字段:
id
: String 型字段,Converter 的 ID。它是anyRTC服务器生成的一个 UUID(通用唯一识别码),标识一个已创建的 Converter。createTs
: Number 型字段。创建 Converter 时的 Unix 时间戳(秒)。updateTs
:Number 型字段。最近一次更新 Converter 配置时的 Unix 时间戳(秒)。state
:String 型字段。Converter 的运行状态。该事件中会报告 "running",表示 Converter 正常运行,正在向 CDN 服务器推流。transcodeOptions
:JSON Object 型必填字段。Converter 的转码配置。rtcChannel
:String 型字段。频道名称。videoOptions
:JSON Object 型可选字段。Converter 的视频转码配置。layout
:JSON Array 型字段。画布上视频画面的内容描述。支持两种元素:RtcStreamView
元素。画布上各用户的视频画面。包含如下字段:rtcStreamUid
:Number 型字段。视频流所属用户的 UID。region
:JSON Object 型字段。用户视频画面在画布上的显示区域。xPos
:Number 型字段。画面在画布上的 x 坐标 (pixel)。以画布左上角为原点,x 坐标为画面左上角相对于原点的横向位移。yPos
:Number 型字段。画面在画布上的 y 坐标 (pixel)。以画布左上角为原点,y 坐标为画面左上角相对于原点的纵向位移。zIndex
:Number 型字段。画面的图层编号。取值范围为 [0,100]。0 代表最下层的图层。100 代表最上层的图层。width
:Number 型字段。画面的宽度 (pixel)。height
:Number 型字段。画面的高度 (pixel)。
placeholderImageUrl
: String 型字段。替代图片的 HTTP(s) URL。
ImageView
元素。画布上的视频图片,可用于当水印。包含如下字段:imageUrl
:String 型字段。图片的 HTTP(S) URL。region
:JSON Object 型字段。图片在画布上的显示区域。xPos
:Number 型字段。画面在画布上的 x 坐标 (pixel)。以画布左上角为原点,x 坐标为画面左上角相对于原点的横向位移。yPos
:Number 型字段。画面在画布上的 y 坐标 (pixel)。以画布左上角为原点,y 坐标为画面左上角相对于原点的纵向位移。zIndex
:Number 型字段。画面的图层编号。取值范围为 [0,100]。0 代表最下层的图层。100 代表最上层的图层。width
:Number 型字段。画面的宽度 (pixel)。height
:Number 型字段。画面的高度 (pixel)。
codecProfile
: String 型字段。输出视频的编码规格。frameRate
:Number 型字段。输出视频的编码帧率 (fps)。bitrate
:Number 型字段。Converter 输出的音频编码码率 (Kbps)。seiOptions
:String 型字段。输出视频中携带的用户 SEI 信息。用于向 CDN 发送用户自定义的 SEI 信息。
更新 converter.transcodeOptions.audioOptions 参与混音的用户 UID 列表配置,payload 示例如下:
{
"converter": {
"id": "4c014467d647bb87b60b719f6fa57686",
"createTs": 1591786766,
"updateTs": 1591786835,
"state": "running",
"transcodeOptions": {
"rtcChannel": "show68",
"audioOptions": {
"rtcStreamUids": [
201,
202
]
}
}
},
"lts": 1603456600,
"xRequestId": "7bbcc8a4acce48c78b53c5a261a8a564",
"fields": "id,createTs,updateTs,state,transcodeOptions.audioOptions.rtcStreamUids"
}
Converter 包含的字段:
id
: String 型字段,Converter 的 ID。它是anyRTC服务器生成的一个 UUID(通用唯一识别码),标识一个已创建的 Converter。createTs
: Number 型字段。创建 Converter 时的 Unix 时间戳(秒)。updateTs
:Number 型字段。最近一次更新 Converter 配置时的 Unix 时间戳(秒)。state
:String 型字段。Converter 的运行状态。该事件中会报告 "running",表示 Converter 正常运行,正在向 CDN 服务器推流。transcodeOptions
:JSON Object 型必填字段。Converter 的转码配置。rtcChannel
:String 型字段。频道名称。audioOptions
:JSON Object 型可选字段。Converter 的音频转码配置。rtcStreamUids
: JSON Array 型可选字段。参与混音的用户 UID。
更新 converter 的其他配置,如 converter.rtmpUrl:
{
"converter": {
"id": "4c014467d647bb87b60b719f6fa57686",
"createTs": 1591786766,
"updateTs": 1591786835,
"state": "running",
"rtmpUrl": "rtmp://example.anyrtc.io/live/show68"
},
"lts": 1603456600,
"xRequestId": "7bbcc8a4acce48c78b53c5a261a8a564",
"fields": "id,createTs,updateTs,state,rtmpUrl"
}
Converter 包含的字段:
id
: String 型字段,Converter 的 ID。它是anyRTC服务器生成的一个 UUID(通用唯一识别码),标识一个已创建的 Converter。createTs
: Number 型字段。创建 Converter 时的 Unix 时间戳(秒)。updateTs
:Number 型字段。最近一次更新 Converter 配置时的 Unix 时间戳(秒)。state
:String 型字段。Converter 的运行状态。该事件中会报告 "running",表示 Converter 正常运行,正在向 CDN 服务器推流。rtmpUrl
:String 型必填字段。CDN 推流地址。
推流状态变化事件
成功创建一个 Converter
后,当 Converter
运行状态改变时,消息通知服务器会向你的服务器通知该事件。
eventType
为 3(ConverterStateChangedEvent)
,payload
示例如下:
{
"converter": {
"id": "4c014467d647bb87b60b719f6fa57686",
"createTs": 1603456600,
"updateTs": 1603456600,
"state": "running"
},
"lts": 1603456600,
"fields": "id,createTs,updateTs,state"
}
- Converter 包含的字段:
id
: String 型字段,Converter 的 ID。它是anyRTC服务器生成的一个 UUID(通用唯一识别码),标识一个已创建的 Converter。createTs
: Number 型字段。创建 Converter 时的 Unix 时间戳(秒)。updateTs
:Number 型字段。最近一次更新 Converter 配置时的 Unix 时间戳(秒)。state
:String 型字段。Converter 的运行状态。connecting
: 正在连接anyRTC业务服务器服务器。running
: 正常运行,正在向 CDN 服务器推流。failed
: 旁路推流服务器失败。
停止推流事件
当一个 Converter
被销毁而停止推流时,消息通知服务器会向你的服务器通知该事件。
销毁的原因请参考 destroyReason 字段。
eventType
为 4(ConverterDestroyedEvent)
,payload
示例如下:
{
"converter": {
"id": "4c014467d647bb87b60b719f6fa57686",
"name": "show68_vertical",
"createTs": 1603456600,
"updateTs": 1603456600
},
"lts": 1603456600,
"destroyReason": "Delete Request",
"fields": "id,name,createTs,updateTs"
}
Converter
包含的字段:id
: String 型字段,Converter 的 ID。它是anyRTC服务器生成的一个 UUID(通用唯一识别码),标识一个已创建的 Converter。createTs
: Number 型字段。创建 Converter 时的 Unix 时间戳(秒)。updateTs
:Number 型字段。最近一次更新 Converter 配置时的 Unix 时间戳(秒)。
lts
Number 型字段,该事件在业务服务器上发生的的 Unix 时间戳 (秒)。destroyReason
String 型字段,描述 Converter 被销毁的原因。- Delete Request: 业务服务器收到你的 Delete 请求。
- Idle Timeout: 超时退出。
- Internal Error: 内部错误。例如,硬件故障。
- fields:JSON 编码方式的字段掩码,详见谷歌 protobuf FieldMask 文档。用于指定返回 player 字段的子集。在此示例中,fields 指定了anyRTC服务器返回 converter 字段中的 id,createTs,updateTs 和 state 等字段子集。