消息通过 HTTP(含HTTPS) POST 的方式投递,当被调用服务的 HTTP 响应返回 200 时,快手会判断该消息投递成功。如果遇到非 200 的响应,则认为消息投递失败。
参数名称 | 类型 | 描述 |
RequestId | String | 请求Id |
EventType | String | 事件类型,系统规定参数 |
MediaId | String | 快手点播媒资Id |
CallbackArgs | String | 客户额外信息。回调时会透传返回,最大长度512字节 |
ErrorCode | String | 作业错误码,任务执行正常时,该字段为空,执行失败时表示具体的错误code |
ErrorMessage | String | 作业错误信息,任务执行正常时,该字段为空,执行失败时表示具体的错误信息 |
客户需要部署回调事件的接收服务,主要处理:URL拉取上传完成事件、转码完成事件、源文件分析完成事件、任务流完成事件
参数名称 | 类型 | 描述 |
EventType | String | 事件类型,系统规定参数。固定为:FetchUploadEvent |
SourceURL | String | 源片URL地址 |
拉取上传成功
{
"EventType":"FetchUploadEvent",
"RequestId":"CixgpmANmJgAAAAAAAAAAA",
"MediaId":"bfffea373bdbff1c",
"SourceURL":"http://xxx.com/423839716c7238fe-6e56abefe0f4ef25fe8e1e1b5d9d0a58.mp4",
"MediaKey": "1441787166381158400/33122341166381158112.mp4",
"CallbackArgs": "",
"ErrorMessage":"",
"ErrorCode":""
}
拉取上传失败
{
"EventType":"FetchUploadEvent",
"RequestId":"CixgpmANmJgAAAAAAAAAAA",
"MediaId":"bfffea373bdbff1c",
"SourceURL":"http://xxx.com/423839716c7238fe-6e56abefe0f4ef25fe8e1e1b5d9d0a58.mp4",
"MediaKey":"1441787166381158400/33122341166381158112.mp4",
"CallbackArgs": "",
"ErrorMessage":"Fetch upload failed, please check URL",
"ErrorCode":"InvalidArgument"
}
参数名称 | 类型 | 描述 |
EventType | String | 事件类型,系统规定参数。固定为VideoTranscodeEvent |
HdrType | String | Hdr类型。枚举值: SDR HDR10 HDR10+ Dolby Vision HLG SDR+ |
URLPath | String | 转码生成的相对路径(不包含CDN域名)格式为{PrimaryKey}/{JobId}-{Definition},客户根据{Domain}/{URLPath}拼接完整的URL |
FileSize | Long | 文件大小,单位:Byte |
Height | Integer | 视频高度,单位:px |
Width | Integer | 视频宽度,单位:px |
Bitrate | Integer | 视频流码率,单位:Kbps |
Duration | Double | 视频时长,单位:s |
Fps | Double | 视频流帧率,每秒包含帧数 |
TranscodeTemplateId | String | 转码模板Id |
Format | String | 视频流格式 mp4 m3u8 |
VideoMaxBitrate | Integer | 视频码率峰值,单位:Kbps |
VideoStreams | Array of VideoStream | 详见VideoStream |
AudioStreams | Array of AudioStream | 详见AudioStream |
VideoStream
参数名称 | 类型 | 描述 |
Duration | Double | 视频流长度,单位:s |
Width | Integer | 视频流宽度,单位:px |
Height | Integer | 视频流高度,单位:px |
Fps | Double | 视频流帧率,每秒包含帧数 |
Bitrate | Integer | 视频流码率,单位:Kbps |
AudioStream
参数名称 | 类型 | 描述 |
Duration | Double | 音频流长度,单位:s |
Bitrate | Integer | 音频流码率,单位:Kbps |
Channels | Integer | 声道数 |
SampleRate | Integer | 采样率,单位:Hz |
{
"EventType":"VideoTranscodeEvent",
"HdrType":"sdr",
"URLPath":"1441787166381158400/33122341166381158112-hd.mp4",
"FileSize":61747,
"Height":852,
"Bitrate":443,
"Fps":25.0,
"TranscodeTemplateId":"mp4_480p",
"Format":"mp4",
"Duration":1.1,
"JobId": "1441787166381158400-312312124-1234124213"
"Width":480,
"VideoMaxBitrate":900,
"VideoStreams":[
{
"Duration":1.1,
"Width":480,
"Height":852,
"Fps":25,
"Bitrate":419
}
],
"AudioStreams":[
{
"Duration":1.1,
"Bitrate":50,
"Channels":2,
"SampleRate":44100
}
]
"RequestId":"CixgpmANnTwAAAAAAAAAAA",
"CallbackArgs": "",
"MediaId":"649c40c50660f1dd",
"ErrorCode":"",
"ErrorMessage":""
}
上传完成后会对源文件进行meta解析并发送回调消息
参数名称 | 类型 | 描述 |
EventType | String | 事件类型,系统规定参数。固定为VideoMetaEvent |
FileSize | Long | 文件大小,单位:Byte |
Height | Integer | 视频高度,单位:px |
Width | Integer | 视频宽度,单位:px |
Bitrate | Integer | 视频流码率,单位:Kbps |
Fps | Double | 视频流帧率,每秒包含帧数 |
Duration | Double | 视频时长,单位:s |
Format | String | 视频流格式 mp4 m3u8 |
{
"EventType":"VideoMetaEvent",
"Duration":9.2,
"Format":"mp4",
"Width":960,
"Height":540,
"Bitrate":888,
"FileSize":1021342,
"Fps":30.0,
"RequestId":"CixgpmANmJgAAAAAAAAAAA",
"MediaId":"bfffea373bdbff1c",
"CallbackArgs": "",
"ErrorMessage":"",
"ErrorCode":""
}
参数名称 | 类型 | 描述 |
EventType | String | 事件类型,系统规定参数。固定为ProcessingFlowEvent |
WorkflowId | String | 任务流模板Id |
成功回调
{
"EventType":"ProcessingFlowEvent",
"RequestId":"CixgpmANnhsAAAAAAAAAAA",
"WorkflowId":"demo_flow_audio",
"MediaId":"a34aef9d0505843c",
"CallbackArgs": "",
"ErrorMessage":"",
"ErrorCode":""
}
失败回调
{
"EventType":"ProcessingFlowEvent",
"RequestId":"CixgpmANnhsAAAAAAAAAAA",
"WorkflowId":"xxx",
"MediaId":"a34aef9d0505843c",
"CallbackArgs": "",
"ErrorCode":"InvalidArgument",
"ErrorMessage":"Workflow: xxx not exist"
}
参数名称 | 类型 | 描述 |
EventType | String | 事件类型,系统规定参数。固定为SnapshotByTimeOffsetEvent |
FileSize | Long | 文件大小,单位:Byte |
Height | Integer | 视频封面高度,单位:px |
Width | Integer | 视频封面宽度,单位:px |
Format | String | 封面文件格式 |
SnapshotByTimeOffsetTemplateId | String | 封面模板Id |
URLPath | String | 封面文件相对路径 |
TaskId | String | 任务Id |
{
"Format":"webp",
"FileSize":6348,
"URLPath":"98c9eddde0698c7e-eb131139d2ceb5a4d0a98e66f4618a9b-cover-intelligent1.webp",
"SnapshotByTimeOffsetTemplateId":"xxx",
"CallbackArgs":"test1001",
"Height":600,
"Width":1280,
"MediaId":"98c9eddde0698c7e",
"RequestId":"ChzojWQ96RUAAAAAAYqe-g",
"PrimaryKey":"test1001",
"EventType":"SnapshotByTimeOffsetEvent",
"ErrorMessage":"",
"ErrorCode":"",
"TaskId": "xxx"
}
参数名称 | 类型 | 描述 |
EventType | String | 事件类型,系统规定参数。固定为ImageSpriteEvent |
URLPath | String | 雪碧图生成的vtt文件 |
ImageSpriteTemplateId | String | 雪碧图模板Id |
TaskId | String | 任务Id |
{
"URLPath":"98c9eddde0698c7e-41e80c5bf1792c60551be5f5d7444993-video-sprite1.vtt",
"CallbackArgs":"test1001",
"MediaId":"98c9eddde0698c7e",
"RequestId":"ChzojWQ96RUAAAAAAYqe-g",
"PrimaryKey":"test1001",
"EventType":"ImageSpriteEvent",
"ImageSpriteTemplateId":"xxx",
"ErrorMessage":"",
"ErrorCode":"",
"TaskId": "xxx"
}
参数名称 | 类型 | 描述 |
EventType | String | 事件类型,系统规定参数。固定为 SampleSnapshotEvent |
SampleSnapshotTemplateId | String | 采样截图模板Id |
SampleSnapshotInfos | Array of SampleSnapshotInfo | 采样截图详细信息 |
TaskId | String | 任务Id |
SampleSnapshotInfo
参数名称 | 类型 | 描述 |
URLPath | String | 采样截图相对位置 |
TimeStamp | Double | 截图所在时间戳 |
Width | Integer | 截图宽度 |
Height | Integer | 截图高度 |
{
"URLPath":"98c9eddde0698c7e-41e80c5bf1792c60551be5f5d7444993-video-sprite1.vtt",
"CallbackArgs":"test1001",
"MediaId":"98c9eddde0698c7e",
"RequestId":"ChzojWQ96RUAAAAAAYqe-g",
"PrimaryKey":"test1001",
"EventType":"SampleSnapshot",
"SampleSnapshotTemplateId":"xxx",
"SampleSnapshotInfos": [
{
"URLPath": "video1-sample-0001.jpeg",
"TimeStamp": 1.0,
"Width": 1920,
"Height": 1080
},
{
"URLPath": "video1-sample-0002.jpeg",
"TimeStamp": 2.0,
"Width": 1920,
"Height": 1080
},
{
"URLPath": "video1-sample-0003.jpeg",
"TimeStamp": 3.0,
"Width": 1920,
"Height": 1080
}
]
"ErrorMessage":"",
"ErrorCode":"",
"TaskId": "xxx"
}
为增强消息回调的安全性,快手点播云支持回调鉴权,用户可选择是否在其消息接收服务中做鉴权和处理。
快手在发送回调时间时,会在回调消息请求的 Header 中添加字段,接收消息的服务器需要对这些字段进行验签,来验证请求真实来自于快手,避免请求伪造。
鉴权参数
参数名称 | 示例 | 描述 |
VOD-TIMESTAMP | 1611501482 | UNIX时间戳 |
VOD-SIGNATURE | 523dsf94239fsdfew2314 | 服务端回调时产生的签名 |
VOD-RANDOM | 31238412 | 发送回调时生成的随机数 |
SDK 验签示例
headers = {
"VOD-TIMESTAMP": "1611501482", # UNIX时间戳
"VOD-RANDOM": "31238412", # 服务方在发送回调时生成一个随机数
"VOD-URL": "http://my_server/callback" #回调url路径
}
signature = Sign.sign(headers, '<分配给客户的密钥>')
在通过header获取到这几个字段以后将"VOD-TIMESTAMP"、"VOD-RANDOM"以及"VOD-URL"(CallbackURL)使用SDK中的签名方法生成signature,如果与header中的VOD-SIGNATURE相同则说明校验成功,如果不一致,则请求非法。