工作流使用
本文将为您介绍 V2/V3版本工作流 的使用场景、设计、示例、使用方式。
V1版本工作流 的使用,详情参见对象存储kodo推出的 数据工作流。
简介
工作流旨在将大部分多媒体处理功能流程化、实例化,用户可提前编排任务处理流程,对多媒体文件按照特定工作流进行处理,避免用户重复、繁琐的调用接口,提供一站式的多媒体处理服务。同时,工作流提供了条件判断机制,可自定义下一节点处理的触发条件,便于灵活组建场景化处理流程。
适用哪些场景?
如果您有以下多媒体处理需求时,或者您期望实现一个 弹性、易用、低成本、灵活支持处理逻辑 的多媒体处理系统,那么工作流则是您期待的最佳解决方案。
-
您有大量并发处理需求,需要同时对一批多媒体文件做多种处理。
- 比如转码成不同规格的视频,适配不同终端设备播放。
-
提供丰富的计算处理原子服务,如转码、拼接、截图、水印,后期将接入内容审核、智能标签等AI能力。
-
支持串行化处理,上一步的输出作为下一步的输入,通过多个步骤的计算处理,从而将源文件转化成符合业务需求的输出。
- 比如先锐智转码、加水印,再对转码后的文件添加固定的片头/片尾。
-
您有更高级的自定义处理需求,条件判断机制的引入,可自定义下一节点处理的触发条件。
- 比如仅对>=1080p的视频做转码,需要通过执行条件来判断对哪些视频做处理,从而减少不必要的处理。
- 比如先对原视频进行内容审核,对审核结果正常的视频进行转码,对违规视频进行封禁,来规避风险和减少不必要的处理开销。
-
对上传到 kodo 空间的文件,自动触发工作流,发起任务处理请求。
-
工作流模板可固化工作流,减少重复工作,统一业务处理流程标准。
工作流示例
1. 创建多个并发处理的工作流
- 示例:普通转码 + 锐智转码 + 视频拼接 + 截图处理
- 此流程表示:同时对源文件进行普通转码、锐智转码、视频拼接、截图处理。
- 输入源说明:
- 所有节点的输入源: 源文件
2. 创建多个原子服务串联处理的工作流
- 示例:锐智转码 -> 视频拼接 -> 输出
- 此流程表示:先对源文件进行锐智转码处理,然后对锐智转码后的结果进行视频拼接处理。
- 输入源说明:
- 锐智转码节点的输入源:源文件
- 视频拼接节点的输入源:锐智转码后的处理结果
3. 创建有条件判断的工作流
1)示例:视频审核 -> 执行条件(结果违规) -> 封禁 、视频审核 -> 执行条件(结果正常)-> 普通转码 -> 输出
- 此流程表示:先对源文件进行内容审核,根据执行条件对【违规视频】进行封禁,对【正常视频】进行普通转码处理。
- 输入源说明:
- 视频审核节点的输入源是: 源文件
- 执行条件节点的输入源是 : 视频审核后的处理结果
- 普通转码节点的输入源是 :源文件
2)示例:音视频元信息 -> 执行条件 -> 普通转码 -> 输出
- 此流程表示:先对源文件获取音视频元信息,判断原视频分辨率范围,在范围内的视频,进行普通转码处理;不在范围内的视频,不再流转到下一步处理。
- 输入源说明:
- 音视频元信息节点的输入源: 源文件
- 执行条件节点的输入源 : 音视频元信息处理后的处理结果
- 普通转码节点的输入源 :源文件
4.串行工作流子节点输入源说明
父节点类型 | 输入源 | 下一节点可选处理类型 |
---|---|---|
普通转码 | 默认处理结果,作为下一节点输入源 注意:当转码格式为 m3u8 时,不支持继续添加处理节点 |
- 普通转码 - 锐智转码 - 截图 - 视频拼接 |
锐智转码 | 默认处理结果,作为下一节点输入源 注意:当转码格式为 m3u8 时,不支持继续添加处理节点 |
- 普通转码 - 锐智转码 - 截图视频 - 视频拼接 - 截图 |
视频拼接 | 默认处理结果,作为下一节点输入源 | - 普通转码 - 锐智转码 - 截图视频 - 视频拼接 - 截图 |
音视频信息 | 默认处理结果,作为下一节点输入源 | - 条件判断 - 输出 |
视频审核 | 默认处理结果,作为下一节点输入源 | - 条件判断 - 输出 - 封禁 |
执行条件 | 作为下一节点处理的前置判断条件,当前支持的有: 1、音视频元信息 2、视频审核 |
- 普通转码 - 锐智转码 - 截图视频 - 视频拼接 - 截图 - 输出 |
截图 | 当前版本,处理结果不支持作为下一节点的输入源 | - 输出 |
封禁 | 当前只适用于视频审核场景,为结束节点 | |
输出 | 为结束节点 |
父节点为【音视频元信息】,执行条件介绍如下:
条件 | 条件描述 |
---|---|
分辨率 | 判断视频分辨率范围,对范围内的视频做下一步处理。 |
父节点为【视频审核】,执行条件介绍如下:
执行条件 | 条件描述 |
---|---|
视频审核结果为【正常】 | 父节点审核结果为正常时,执行下一节点处理 |
视频审核结果为【违规】 | 父节点审核结果为违规时,执行下一节点处理 |
视频审核结果为【疑似】 | 父节点审核结果为疑似时,执行下一节点处理 |
视频审核结果不是【正常】 | 父节点审核结果为【违规】或【疑似】,执行下一节点处理 |
视频审核结果不是【违规】 | 父节点审核结果为【正常】或【疑似】,执行下一节点处理 |
任务创建
您可以通过以下几种方式来创建任务:
方式一:登录 智能多媒体服务控制台,使用任务触发器
-
对符合规则策略的上传文件自动触发
:从导航栏进入任务触发器页面,点击新建 任务触发器;创建完成后,需要将状态设置为已启用,然后通过对象存储kodo控制台或 API/SDK 上传文件到触发器指定的输入路径;将对符合规则策略的上传文件自动触发多媒体处理,并将结果文件保存到目标路径。
方式二:登录 智能多媒体服务控制台,指定文件手动触发
-
指定文件手动触发
:指定单个文件创建任务,从导航栏进入任务页面,点击【新建任务】。
任务查询
使用【智能多媒体服务控制台->工作流模板】创建的任务,您可以使用以下2种方式进行查询:
1、通过 状态查询接口 发起查询请求,目前仅支持查询10天内创建的任务记录。
2、登录 智能多媒体控制台 ,进入【导航栏->任务】页面,在任务列表中进行查询。
任务通知
在创建工作流模板时,支持设置回调地址URL,支持对任务处理后的结果,及时进行消息通知。任务通知是异步进行的,不影响正常的操作。
下面介绍的是使用 工作流模板(V3版本)
产生任务的回调内容,包括字段名称、类型、描述。
注意:使用V2和V3工作流模板创建的任务,任务内容是不同的,如何升级回调版本,详情查看 回调升级 。
-
基本属性
是一个JSON对象。定义:{
当前任务的基本属性
},字段如下。字段名称 说明 version 版本号,新版本统一都为“v3” id 任务ID reqid 云处理请求的请求id,主要用于七牛技术人员的问题排查。 pipeline 默认使用队列为:default.sys created_at 任务创建的时间戳,单位为毫秒 -
任务处理对象
是一个JSON对象。定义:{
input
},字段如下。字段名称 说明 bucket 输入文件,当前仅支持kodo文件,待处理文件所在存储空间 key 待处理文件名 hash 云处理结果保存在服务端的唯一 hash
标识 -
任务结果
是一个JSON对象。定义:{
任务处理结果
},字段如下。字段名称 说明 code 返回码, 0成功、1等待处理、2处理中、3失败、5已取消(删除pipeline时,并且有任务还在等待中) desc 返回信息描述,例如: success -
工作流节点处理详情。
是一个JSON对象组,所有工作流节点处理的详情。定义:{
ops
},字段如下。
"ops": [
{
"id": "<opid>", // 具体执行的操作,fop与cond只会有一个非空,fop为计算节点、cond为条件判断节点
"fop": { // 表示具体的音视频计算节点信息
"cmd": "xxx", // 计算的命令
"input_from": "<opid>", // 计算的输入文件,"__origin__"表示来源于触发的主输入文件,其它表示来源于某个节点的处理结果
"result": { // 处理结果
"code": 0, // 0成功、3处理失败、6跳过、7无效
"desc": "...", // 处理结果描述
"has_output": true, // 表示是否存在输出文件,如果是中间临时节点为false
"kodo_file": { // 具体输出文件信息
"bucket": "aaa",
"key": "abc.mp4",
"hash": "..."
}
}
},
"depends": ["<opid>",...] // 依赖的前置处理节点
},
{
"id": "<opid>",
"cond": { // 条件节点信息
"expression": "xxx", // 条件表达式,当前为“go template expression”
"result": { // 条件表达式的执行结果
"code": 0, // 0成功、1等待处理、2处理中、3处理失败、5任务被取消、6跳过、7无效
"desc": "...", // 处理结果描述
"output": "<opid>,<opid>,..." // 输出信息,为允许执行的后置节点名称列表
}
},
"depends": ["<opid>",...] // 依赖的前置处理节点
},
...
],
}
示例
如果请求成功,返回包含如下内容的JSON字符串(已格式化,便于阅读):
{
"version": "v3",
"id": "z0.01z001c7n9d3q0nylt000001jm0001d4",
"reqid": "zVcAAFE4Z742sE4W",
"pipeline": "2002.default.sys",
"input": {
"kodo_file": {
"bucket": "dora-async-test",
"key": "upload.mp4"
}
},
"code": 0,
"desc": "successfully completed",
"ops": [
{
"id": "A",
"fop": {
"cmd": "avinfo",
"input_from": "__origin__",
"result": {
"code": 0,
"desc": "successfully completed",
"has_output": false
}
}
},
{
"id": "B",
"cond": {
"expression": "C",
"result": {
"code": 0,
"desc": "successfully completed",
"output": "C"
}
},
"depends": [
"A"
]
},
{
"id": "C",
"fop": {
"cmd": "avthumb/mp4",
"input_from": "__origin__",
"result": {
"code": 3,
"desc": "failed to parse result",
"has_output": false
}
},
"depends": [
"B"
]
},
{
"id": "D",
"fop": {
"cmd": "saveas/ZG9yYS1hc3luYy10ZXN0OnVwbG9hZF9vdXRwdXQubXA0/jsonQuery/eyJidWNrZXQiOiJ7ey5idWNrZXR9fSIsImtleV90ZW1wbGF0ZSI6Int7LmZuYW1lfX1fb3V0cHV0e3suZXh0fX0ifQ==",
"input_from": "C",
"result": {
"code": 0,
"desc": "successfully completed",
"has_output": true,
"kodo_file": {
"bucket": "dora-async-test",
"key": "upload_output.mp4",
"hash": "FuBWVXNCdqNQxgrtSkERZqLDz5Yp"
}
}
},
"depends": [
"C"
]
},
{
"id": "E",
"fop": {
"cmd": "avthumb/mp4",
"input_from": "__origin__",
"result": {
"code": 6,
"desc": "skipped",
"has_output": false
}
},
"depends": [
"B"
]
},
{
"id": "F",
"fop": {
"cmd": "saveas/YWJjZDp1cGxvYWRfb3V0XzIubXA0/jsonQuery/eyJidWNrZXQiOiJhYmNkIiwia2V5X3RlbXBsYXRlIjoie3suZm5hbWV9fV9vdXRfMnt7LmV4dH19In0=",
"input_from": "E",
"result": {
"code": 6,
"desc": "skipped",
"has_output": false
}
},
"depends": [
"E"
]
}
],
"created_at": 1607415851017
}
常见问题
Q1:回调超时,重试几次?重试间隔多久?
A:重试次数:13;重试间隔依次为:1s 2s 4s 8s 16s 32s …. 最大不超过3600s;重试条件: 回调超时或者客户回调服务器返回 5xx。
Q2:没有收到回调该如何排查?
A:首先需要在 【控制台 -> 工作流】,进入工作流详情页面,查看是否填写了回调地址。
如果填写了回调地址,还是没有收到回调,则排查回调地址接收服务是否有问题。或者 提交工单 给我们。
计费说明
多媒体处理能力由智能多媒体服务进行计费,费用详情请参见 计费项。