云直播 回调事件消息通知

一条直播流的状态变化、一个新录制文件的生成、一张新截图文件的生成,这类事件都在腾讯云内部管理,但你的后台服务器可能也同样有获知的需求,这时可以以使用腾讯云的事件通知服务获知这些事件。

相关产品
云直播 产品页,含版本规格、价格与购买入口。

一、功能介绍

你可以在控制台注册一个来自你后台服务器的回调 URL 给腾讯云,当有事件发生时,腾讯云会通过 HTTP POST 的方式将新的事件投递给你的服务器,事件内容以 JSON 格式组织。

二、配置 URL

在 直播控制台 > 直播码接入 > 接入配置开启直播码模式时,可以指定一个接收腾讯云通知的 URL:

三、消息组织格式

通知信息是以 JSON 格式进行组织的,然后放在 HTTP POST 协议体中,注意这里的 POST 格式的 ContentType 是 application/json,而不是 multipart/form-data,所以不要使用 PHP 或者 Java 里读取表单字段的函数来读取信息。

四、公共的头信息

如下的字段是每种类型的通知消息都一定会携带的:

字段名称 类型 含义 备注
t string 有效时间 UNIX 时间戳
sign string 安全签名 MD5(KEY+t)
event_type int 事件类型 目前可能值为: 0、1、100、200
stream_id string 直播码 标示事件源于哪一条直播流
channel_id string 直播码 同 stream_id

·stream_id | channel_id(直播码)
在直播码模式下,stream_id 和 channel_id 两个字段都是同一个值,有两个不同的名字主要是历史原因所致。

·t(过期时间)
来自腾讯云的消息通知的默认过期时间是10分钟,如果一条通知消息中的 t 值所指定的时间已经过期,则可以判定这条通知无效,进而可以防止网络重放攻击。t 的格式为十进制UNIX时间戳,即从1970年01月01日(UTC/GMT 的午夜)开始所经过的秒数。

·sign(安全签名)
sign = MD5(key + t):腾讯云把加密 key 和 t 进行字符串拼接后通过 MD5 计算得出 sign 值,并将其放在通知消息里,你的后台服务器在收到通知消息后可以根据同样的算法确认 sign 是否正确,进而确认消息是否确实来自腾讯云后台。
这里的加密 key 即 CGI 调用 key,你在云直播管理控制台开通直播码服务时可以指定:


·event_type(通知类型)
目前腾讯云支持三种消息类型的通知:0:断流; 1:推流;100:新的录制文件已生成;200:新的截图文件已生成。

五、(1)推流 (0)断流

event_type = 0 代表断流,event_type = 1 代表推流,同时消息体会额外包含如下信息:

字段名称 含义 类型 备注 是否必须
appname 推流路径 string – Y
app 推流域名 string – Y
event_time 消息产生的时间 int 单位 s Y
sequence 消息序列号,标识一次推流活动,一次推流活动会产生相同序列号的推流和断流消息 string – Y
node Upload 接入点的 IP String – Y
user_ip 用户推流 IP String Client_ip Y
errcode 断流错误码 Int – N
errmsg 断流错误信息 String – N
stream_param 推流 URL 参数 String – Y
push_duration 推流时长 String 单位 ms N

示例:腾讯云通知直播流(1234_15919131751)发生断流(event_type=0)事件。

{ "app": "3954.livepush.myqcloud.com", "appname": "live", "channel_id": "16093425727656502238", "event_type": 0, "sign": "ab86d22870427e3f25bb1d9446b8f924", "stream_id": "3954_ea88f7495ba711e6a2cba4dcbef5e35a", "t": 1471256100, "event_time": 1471256200, "sequence": "5911795891871911817", "node":"123.10.1.1", "user_ip":"127.0.0.1", "errcode":0, "errmsg":"OK", "stream_param":""}

六、推流断流错误码

错误码 错误描述 错误原因
1 recv rtmp deleteStream 主播端主动断流
2 recv rtmp closeStream 主播端主动断流
3 recv() return 0 主播端主动断开 TCP 连接
4 recv() return error 主播端 TCP 连接异常
7 rtmp message large than 1M 收到流数据异常
其他错误码 直播服务内部异常 如需处理请联系腾讯商务人员或者 提交工单,联系电话:4009100100

七、(100)新录制文件

event_type = 100 代表有新的录制文件生成,同时消息体会额外包含如下信息:

字段名称 含义 类型 备注 是否必须
video_url 下载地址 string 点播视频的下载地址 Y
file_size 文件大小 string 单位字节 Y
start_time 分片开始时间戳 int 开始时间(UNIX 时间戳,由于 I 帧干扰,暂时不能精确到秒级) Y
end_time 分片结束时间戳 int 结束时间(UNIX 时间戳,由于 I 帧干扰,暂时不能精确到秒级) Y
file_id file_id string 点播 file ID,在点播平台可以唯一定位一个点播视频文件 Y
file_format 文件格式 string flv, hls, mp4 Y
duration 推流时长 Int 单位秒 Y
stream_param 推流 url 参数 string – Y
record_file_id 录制文件 ID String 已废弃,使用 file_id N
video_id vid string 已废弃,不建议使用 Y

示例:一个 ID 为 9192487266581821586 的新的 flv 录制分片已经生成,播放地址为:HTTP://200025724.vod.myqcloud.com/200025724_ac92b781a22c4a3e937c9e61c2624af7.f0.flv。

{ "appid": 1252033264, "channel_id": "2519_2500647", "duration": 272, "end_time": 1496220894, "event_type": 100, "file_format": "flv", "file_id": "9031868222958931071", "file_size": 30045521, "record_file_id": "9031868222958931071", "sign": "c2e3bdc344ddb62ab05229d01672a79e", "start_time": 1496220622, "stream_id": "2519_2500647", "stream_param": "bizid=2519&record=hls|flv&txSecret=d5569fb19d1e858bf683b30c10dec908&txTime=592FBDD9&mix=layer:b;session_id:709036962551160107;t_id:1", "t": 1496221502, "video_id": "200011683_481565e0befe4e44903839aebe370ef6", "video_url": "HTTP://1252033264.vod2.myqcloud.com/d7a4cabbvodgzp1252033264/0257ade99031868222958931071/f0.flv"}

八、(200)新截图文件

event_type = 200 代表有新的截图图片生成,同时消息体会额外包含如下信息:

字段名称 含义 类型 备注 是否必须
pic_url 图片地址 string 不带域名的路径 Y
create_time 截图时间戳 int 截图时间戳(UNIX 时间戳,由于 I 帧干扰,暂时不能精确到秒级) Y
pic_full_url 截图全路径 String 需要带上域名 Y

示例:直播流“2016090090936”在腾讯云生成了一张新的截图图片:

{ "channel_id": "2016090090936", "create_time": 1473645788, "event_type": 200, "pic_url": "/2016-09-12/2016090090936-screenshot-10-03-08-1280×720.jpg", //文件路径名 "sign": "8704a0297ab7fdd0d8d94f8cc285cbb7", "stream_id": "2016090090936", "t": 1473646392}

注意:说明:

注意:图片下载地址:

注意:1.由于历史原因,以前开启截图功能需要你自己申请 cos 服务,我们给你返回的 pic_url 不是真正的图片下载地址只是下载路径,真正的下载地址是需要拼接的,拼接方法是:

2.当前回调新信息中增一个图片URL 字段pic_full_url以便你直接得到完整的图片 URL,为了不影响原有业务,原有回调信息字段均无变化(即 pic_url 字段依旧存在)。

3.以前你的腾讯云账号需要开通 cos 服务才能使用截图功能,当前该方式已经不适用,现在无需你自己申请 cos 服务,目前开通截图功能的方式有两种:

(a)控制台上开启截图功能;

(b)联系我们配置相关信息后再调用接口开启截图功能。

九、通知可靠性

很多客户会担心消息丢了怎么办,例如,客户的服务器宕机了一下会儿,消息会不会丢失呢?
事件通知服务具备重试能力,重试间隔为60秒,总计重试3次。为了避免重试对你的服务器以及网络带宽造成冲击,请保持正常回包。触发重试条件如下:

·长时间(20 秒)未回包应答。

·应答 HTTP STATUS 不为200。

那怎么确认消息是已经送达你的服务器了呢?这里是需要你的协助的:当你的服务器成功收到一条 HTTP 事件通知消息时,请回复:

json// 在收到消息通知的 HTTP 请求里返回错误码 0 以代表你已经成功收到了消息,从而避免腾讯云反复重复通知{ "code":0 }

代表:“嗯,我(客户服务器)已经接收到通知了,请(腾讯云)不要再不断地发消息给我”。

赞 (0)
上一篇 4天前
下一篇 4天前