旁路推流消息通知服务

最近更新时间:2025-03-19 10:44:09

概述

anyRTC 消息通知服务可以将旁路推流业务中的发生的一些事件以 HTTP 或 HTTPS 请求的方式通知到你的服务器。

开通服务

使用 anyRTC 消息通知服务前需要申请开通并进行配置,关于如何开通服务以及消息通知回调的数据格式详见消息通知服务

事件

消息通知服务器可以通知该业务下的四种事件:

  • 创建推流事件
  • 推送配置更新事件
  • 推流状态变化事件
  • 停止推流事件

创建推流事件

当你调用 Create 成功创建一个Converter时,消息通知服务器会向你的服务器通知该事件。

eventType1(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 配置时,消息通知服务器会向你的服务器通知该事件。 eventType2(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 运行状态改变时,消息通知服务器会向你的服务器通知该事件。

eventType3(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 字段。

eventType4(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 等字段子集。