API 文档

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

回调事件消息通知

最近更新时间:2020-07-08 18:45:09

推流域名的 回调关联配置 成功后,当直播过程中域名关联模板事件被触发时,腾讯云将主动发送请求到客户服务器,客户服务器负责应答请求。验证通过后,您可被动获取到含直播事件回调信息的 JSON 数据包。
目前,直播事件触发消息通知支持如下事件:

注意:

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

前提条件

事件消息通知整体流程

整体流程:

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

事件消息通知配置

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

事件消息通知 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,aac
    start_time int64 录制文件起始时间戳
    end_time int64 录制文件结束时间戳
    duration int64 录制文件时长,单位秒
    file_size uint64 录制文件大小,单位字节
    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
}
目录