文档中心 云直播 最佳实践 事件消息通知

事件消息通知

最近更新时间:2019-08-09 14:39:53

直播事件触发时,您可以通过事件消息通知被动获取到具体直播事件信息。消息通知支持如下事件:

  • 【直播推流】事件
  • 【直播断流】事件
  • 【直播录制】文件生成事件
  • 【直播截图】文件生成事件

注意:

本文不涉及鉴黄事件通知回调,详情请看 最佳实践-直播鉴黄

事件消息通知整体流程

整体流程:

  1. 主播在控制台或直接调用云 API 配置事件消息通知 URL 以及录制、截图等相关功能。
  2. 主播进行直播推断流。
  3. 当直播服务内部有事件发生时,消息将会经由事件消息通知服务统一回调给观众。

事件消息通知配置

事件消息通知配置主要有以下方式:

  • 云 API
  • 控制台

事件消息通知 URL 支持各事件配置独立 URL,包含:

  • 推流事件通知 URL(StreamBeginNotifyUrl)
  • 断流事件通知 URL(StreamEndNotifyUrl)
  • 录制事件通知 URL(RecordNotifyUrl)
  • 截图事件通知 URL(SnapshotNotifyUrl)

事件消息通知协议

网络协议

请求:HTTP POST 请求,包体内容为 JSON,每一种消息的具体包体内容参见后文。

应答:HTTP STATUS CODE = 200,服务端忽略应答包具体内容,为了协议友好,建议客户应答内容携带 JSON: {"code":0}

通知可靠性

事件通知服务具备重试能力,重试间隔为60秒,总计重试3次。为了避免重试对您的服务器以及网络带宽造成冲击,请保持正常回包。触发重试条件如下:

  • 长时间(20 秒)未回包应答。
  • 应答 HTTP STATUS 不为200。

事件消息通知参数说明

公共参数说明

字段名称 类型 说明
event_type int 事件通知信息类型:推流事件为1;断流事件为0;录制事件为100;截图事件为200。
sign string 事件通知签名
t int64 事件通知签名过期 UNIX 时间戳
  • t(过期时间):来自腾讯云的消息通知默认过期时间是10分钟,如果一条消息通知中的 t 值所指定的时间已经过期,则可以判定这条通知无效,进而可以防止网络重放攻击。t 的格式为十进制 UNIX 时间戳,即从1970年1月1日(UTC/GMT 的午夜)开始所经过的秒数。
  • sign(安全签名):sign = MD5(key + t),腾讯云把加密 key 和 t 进行字符串拼接后通过 MD5 计算得出 sign 值,并将其放在通知消息里,您的后台服务器在收到通知消息后可以根据同样的算法确认 sign 是否正确,进而确认消息是否确实来自腾讯云后台。

    说明:

    key 为回调配置中的回调密钥,如下图所示:

各类型消息体

推断流事件

  • 直播推流事件,event_type = 1
  • 直播断流事件,event_type = 0
字段名称 类型 说明
appid int 用户 APPID
app string 推流域名
appname string 推流路径
stream_id string 直播流名称
channel_id string 同直播流名称
event_time int64 事件消息产生的 UNIX 时间戳
sequence string 消息序列号,标识一次推流活动,一次推流活动会产生相同序列号的推流和断流消息
node string 直播接入点的 IP
user_ip string 用户推流 IP
stream_param string 用户推流 URL 所带参数
push_duration string 断流事件通知推流时长,单位毫秒
errcode int 推断流错误码
errmsg string 推断流错误描述
  • errcode(推断流错误码)
错误码 错误描述 错误原因
1 recv rtmp deleteStream 主播端主动断流
2 recv rtmp closeStream 主播端主动断流
3 recv() return 0 主播端主动断开 TCP 连接
4 recv() return error 主播端 TCP 连接异常
7 rtmp message large than 1M 收到流数据异常
其他 直播服务内部异常 如需处理请联系腾讯商务人员或者提交工单

示例:

{

"app":"test.domain.com",

"appid":12345678,

"appname":"live",

"channel_id":"test_stream",

"errcode":0,

"errmsg":"ok",

"event_time":1545115790,

"event_type":1,

"node":"100.121.160.92",

"sequence":"6674468118806626493",

"stream_id":" test_stream",

"stream_param":"stream_param=test",

"user_ip":"119.29.94.245",

"sign":"ca3e25e5dc17a6f9909a9ae7281e300d",

"t":1545030873

}

【直播录制】文件生成事件

  • event_type = 100
字段名称 类型 说明
appid int 用户 APPID
stream_id string 直播流名称
channel_id string 同直播流名称
file_id string 点播 file ID,在点播平台可以唯一定位一个点播视频文件
file_format string flv,hls,mp4
start_time int64 录制文件起始时间戳
end_time int64 录制文件结束时间戳
duration int 录制文件时长,单位秒
file_size int 录制文件大小,单位字节
stream_param string 用户推流 URL 所带参数
video_url string 录制文件文件下载 URL

示例:

{

"event_type":100,

"appid":12345678,

"stream_id":"stream_test",

"channel_id":"stream_test",

"file_id":"1234567890",

"file_format":"hls",

"start_time":1545047010,

"end_time":1545049971,

"duration":2962,

"file_size":277941079,

"stream_param":"stream_param=test",

"video_url":"http://12345678.vod2.myqcloud.com/xxxx/yyyy/zzzz.m3u8",

"sign":"ca3e25e5dc17a6f9909a9ae7281e300d",

"t":1545030873

}

【直播截图】文件生成事件

  • event_type = 200
字段名称 类型 说明
stream_id string 直播流名称
channel_id string 同直播流名称
create_time int64 截图生成 UNIX 时间戳
file_size int 截图文件大小,单位为字节
width int 截图宽,单位为像素
height int 截图高,单位为像素
pic_url string 截图文件路径 /path/name.jpg
pic_full_url string 截图下载 URL

示例:

{

"event_type":200,

"stream_id":"stream_name",

"channel_id":" stream_name",

"create_time":1545030273,

"file_size":7520,

"width":640,

"height":352,

"pic_url":"/2018-12-17/stream_name-screenshot-19-06-59-640x352.jpg",

"pic_full_url":"http://testbucket-1234567890.cos.region.myqcloud.com/2018-12-17/stream_name-screenshot-19-06-59-640x352.jpg",

"sign":"ca3e25e5dc17a6f9909a9ae7281e300d",

"t":1545030873

}