跳到主要内容

视频流异步接口

1. 接口介绍

客户通过视频流异步识别接口提交识别任务,图普拉取视频流进行截图及切片,对视频截图及语音片段进行识别检测,每隔一段时间通过回调通知客户识别结果。

提示
  1. 异步文件接口对文件大小和时长没有限制,根据最佳实践,建议文件大小小于 10 GB;异步流接口对流的时长没有限制,建议客户在流关闭时主动调用任务关闭接口。

  2. 图普采用 任务并发数 对异步接口进行并发控制,即任一时刻最多允许 N 个任务同时处理。在测试期间,任务并发数为 30(允许同时处理 30 个任务),正式使用或需要增加时请联系客户经理调整。当超出任务并发数后继续提交任务时,根据接口类型略有不同:

    • 异步文件接口:可以正常提交任务,提交的任务排队等待处理;
    • 异步流接口:提交任务时返回超出并发状态码(由于流的实时性要求,无法排队等待处理,因此无法继续提交)。

截图分辨率

如果视频的短边分辨率超过 1024 像素,则截取的图片以 1024/短边 等比例截取。例如:视频分辨率为 1920x1080, 截图的分辨率为 1820x1024

2. 请求

2.1 请求地址

区域请求地址
国内https://api.video.tuputech.com/v3/recognition/video/stream/<secretId>
提示

<secretId> 需替换为您的应用 SID,请联系客户经理为您开通及配置。关于 SID 详见 常见问题(FAQ)

2.2 请求方法

POST

2.3 请求头

Content-Type: application/json

2.4 超时时间及异常处理

建议配置超时时间 1 秒,在 HTTP 响应状态码非 200 或业务状态码不为 0 时进行重试。

2.5 请求参数

参数名称类型是否必填说明
videoString视频流地址。

1. 支持的协议:RTMPHLSHTTP-FLVRTSP
2. 支持的编码格式:H.264/AVCH.263H.263+MPEG-1MPEG-2MPEG-4MJPEGVP8VP9;3. 支持的容器格式:flv, mkv, mp4, rmvb, avi, wmv, 3gp, ts, mov
timestampInt当前服务器的 Unix 时间戳
nonceInt随机数
signatureString

RSA-SHA256 算法签名。签名步骤:

  1. 将参与签名的参数(secretIdtimestampnonce)用英文半角逗号 , 拼接,得到 SignString
  2. 使用您的私钥以 RSA-SHA256 算法对 SignString 签名,然后进行 Base64 编码,得到 signature 字符串。
  • 点击 数字证书 下载私钥。私钥有 rsapkcs8 两种格式,通常 Golang,Python 使用 rsa 格式私钥,Java 使用 pkcs8 格式私钥
  • 点击 签名及验证示例 查看签名示例
callbackUrlString识别结果回调接口地址,用于接收 POST 回调
intervalNumber视频截图间隔,单位秒。取值范围 [0.5, 10],默认 1 秒
fragmentTimeNumber视频语音切片时长及回调间隔,范围 [10, 60] 秒,默认 60 秒
audioBoolean是否开启语音识别,默认 false
callbackRulesCallbackRules回调规则,默认回调违规标签的数据。详见 CallbackRules 数据结构
customInfoObject<String, String/Int>自定义信息,为识别任务添加业务信息(如房间 ID、文件 ID 等)或其他扩展参数
taskArray<String>指定的任务 ID。通常单个应用(接口)下会配置多个识别任务,可根据业务需要指定其中的部分任务进行识别

CallbackRules 数据结构

参数名称类型是否必填说明
<任务 ID>Array<CallbackRule>识别任务的回调规则,详见 CallbackRule 数据结构
备注

CallbackRules 是一个键值对/Object,key 为 taskId, value 为 CallbackRule 数组。

CallbackRule 数据结构

参数名称类型是否必填说明
labelInt仅回调指定标签的结果
reviewBoolean不为空时,仅回调指定标签的复审类型的结果

2.6 请求示例

{
"video": "<url>",
"interval": 1,
"fragmentTime": 10,
"callbackUrl": "<callback>",
"audio": false,
"customInfo": {
"roomId": "<roomId>"
},
"callbackRules": {
"54bcfc6c329af61034f7c2fc": [
{
"label": 0,
"review": false
},
{
"label": 1,
"review": false
}
]
},
"task": [
"<taskId>"
],
"timestamp": 1685000000,
"nonce": 1685000000,
"signature": "<signature>"
}

3. 同步响应

3.1 响应参数说明

参数名称类型说明
signatureString

同步响应或回调请求签名,由图普使用私钥签名,在需要时,您可以通过 图普公钥 进行验签以确保此响应内容来自图普(与您调用接口时使用的公私钥不同)。验签步骤:

  1. json 字段内容为 SignString
  2. signature 字段内容进行 Base64 解码,得到 RawSignature
  3. 使用图普公钥以 SHA256 算法验证 RawSignatureSignString
jsonString

同步响应或回调请求经过 JSON 转义后的字符串,需进一步解析得到业务数据。

  • 字段内容示例:{\"code\":0,\"message\":\"success\"}
  • 字段详见下述 json 参数说明;
  • 为方便展示,同步响应及回调请求的示例中,均为解析后的 JSON

json 参数说明

参数名称类型说明
codeInt状态码,详见 业务状态码
messageString状态信息
nonceNumber随机数
timestampNumber当前服务器的 Unix 时间戳
videoIdString任务 ID,长度为 20~64 的字符串(可能随着服务迭代发生变化)

3.2 响应示例

{
"code": 0,
"message": "success",
"nonce": 1685000000,
"timestamp": 1685000000,
"videoId": "<videoId>"
}

4. 回调请求

4.1 请求地址

callbackUrl 参数指定的地址。

4.2 请求方法

POST

4.3 请求头

Content-Type: application/json

4.4 超时时间及异常处理

回调超时时间 5 秒,在 HTTP 响应状态码非 200 时进行重试,最多重试 3 次。

建议客户在处理回调时进行异步处理,响应回调时可以返回字符串或 JSON,示例如下:

// JSON
{
"message": "ok"
}

// 字符串
success

4.5 请求参数说明

参数名称类型说明
signatureString

同步响应或回调请求签名,由图普使用私钥签名,在需要时,您可以通过 图普公钥 进行验签以确保此响应内容来自图普(与您调用接口时使用的公私钥不同)。验签步骤:

  1. json 字段内容为 SignString
  2. signature 字段内容进行 Base64 解码,得到 RawSignature
  3. 使用图普公钥以 SHA256 算法验证 RawSignatureSignString
jsonString

同步响应或回调请求经过 JSON 转义后的字符串,需进一步解析得到业务数据。

  • 字段内容示例:{\"code\":0,\"message\":\"success\"}
  • 字段详见下述 json 参数说明;
  • 为方便展示,同步响应及回调请求的示例中,均为解析后的 JSON

json 参数说明

参数名称类型是否必有说明
codeInt状态码,详见 业务状态码
messageString状态信息
nonceNumber随机数
timestampNumber当前服务器的 Unix 时间戳
videoInfoVideoInfo视频信息,详见 VideoInfo 数据结构
fragmentInfoObject视频片段信息。详见 FragmentInfo 数据结构
<任务 ID>Object识别任务的结果,每个识别任务会有 全局固定不变taskId 和对应数据结构,详见 具体任务识别结果回调
isAudioBoolean该回调是否语音片段识别结果,视频截图识别结果该字段可能省略。由于视频截图与语音切片的处理时机不同,因此分开回调,客户需通过该字段进行区分
suggestionNumber汇总结果,整体的通过/拒绝情况,参考 审核场景汇总结果说明
riskTypeNumber汇总结果,整体的风险类型,参考 审核场景汇总结果说明
customInfoObject提交的自定义信息,请求参数中的 customInfo

VideoInfo 数据结构

参数名称类型说明
idString任务 ID
captureStartString视频截图开始时间,UTC 时间,格式为 2023-01-01T00:00:00Z

FragmentInfo 数据结构

参数名称类型说明
idString视频片段唯一标识
offsetStartNumber视频片段截图开始时间(相对时间),单位秒
offsetEndNumber视频片段截图结束时间(相对时间),单位秒
capturedImagesNumber视频片段截图数量

4.6 请求示例

{
"code": 0,
"message": "success",
"nonce": 1685000000,
"timestamp": 1685000000,
"videoInfo": {
"id": "<videoId>",
"captureStart": "2023-01-01T00:00:00Z"
},
"fragmentInfo": {
"id": "<videoId>-1",
"offsetStart": 0,
"offsetEnd": 10,
"capturedImages": 10
},
"customInfo": {
"roomId": "<roomId>"
},
"suggestion": 1,
"riskType": 1,
"<任务 ID(图片分类任务)>": {
"label": 0,
"review": false,
"fileList": [
{
"url": "<截图链接>",
"rate": 0.9,
"label": 0,
"review": false,
"second": 0
}
],
"avgScores": [
{
"score": 0.9,
"label": 0
}
],
"maximums": [
{
"max": 0.9,
"label": 0
}
],
"statistics": [
{
"count": 0,
"label": 1
}
]
},
"<任务 ID(人物搜索类任务)>": {
"label": 2,
"review": false,
"fileList": [
{
"url": "<截图链接>",
"similarity": 0.9,
"label": 2,
"review": false,
"typeName": "<人物类型>",
"faceId": "<人物名称>",
"personId": "<personId>",
"second": 0,
"facePosition": [
[
0.191406,
0.25
],
[
0.3125,
0.25
],
[
0.3125,
0.4652
],
[
0.191406,
0.4652
]
]
}
],
"statistics": [
{
"count": 1,
"label": 2
}
],
"matchList": [
{
"typeName": "<人物类型>",
"faceId": "<人物名称>",
"personId": "<personId>",
"count": 1
}
]
},
"<任务 ID(自定义图库)>": {
"label": 2,
"fileList": [
{
"url": "<截图链接>",
"label": 2,
"similarity": 0.9,
"relatives": [
{
"path": "<自定义图片链接>",
"score": 0.9
}
],
"second": 10
}
],
"maximums": [
{
"max": 0.9,
"label": 2
}
],
"statistics": [
{
"count": 1,
"label": 2
}
]
},
"<任务 ID(OCR 文本审核)>": {
"label": 3,
"review": false,
"fileList": [
{
"url": "<截图链接>",
"text": "毛泽东",
"scores": 0.9,
"degree": 0,
"location": [
[
0.4256518406293357,
0.5753968315895163
],
[
0.5806905895660593,
0.5753968315895163
],
[
0.5806905895660593,
0.65079364460096
],
[
0.4256518406293357,
0.65079364460096
]
],
"textAnalysis": {
"label": 3,
"review": false,
"rate": 0.9,
"details": [
{
"keyword": "毛泽东",
"hint": "毛泽东",
"mainLabel": 3
}
]
},
"second": 10
}
],
"avgScores": [
{
"score": 0.9,
"label": 3
}
],
"maximums": [
{
"max": 0.9,
"label": 3
}
],
"statistics": [
{
"count": 1,
"label": 3
}
]
},
"<任务 ID(检测类任务)>": {
"fileList": [
{
"url": "<截图链接>",
"category": 0,
"scores": 0.9,
"second": 1,
"location": [
[
0.03537565228836477,
0.03303825855255127
],
[
0.2027942005938315,
0.03303825855255127
],
[
0.2027942005938315,
0.271730899810791
],
[
0.03537565228836477,
0.271730899810791
]
]
}
],
"avgScores": [
{
"score": 0.9,
"category": 0
}
],
"maximums": [
{
"max": 0.9,
"category": 0
}
],
"statistics": [
{
"count": 2,
"category": 0
}
]
}
}

4.7 具体任务识别结果回调

5. 视频流结束状态回调

说明

使用建议:

  • 收到视频流结束状态回调时, 说明任务已结束;
  • code 的值不为 0,说明流异常结束,可根据 code 的值查询对应的异常结束类型。

5.1 请求参数说明

参数名称类型是否必有说明
signatureString

同步响应或回调请求签名,由图普使用私钥签名,在需要时,您可以通过 图普公钥 进行验签以确保此响应内容来自图普(与您调用接口时使用的公私钥不同)。验签步骤:

  1. json 字段内容为 SignString
  2. signature 字段内容进行 Base64 解码,得到 RawSignature
  3. 使用图普公钥以 SHA256 算法验证 RawSignatureSignString
jsonString

同步响应或回调请求经过 JSON 转义后的字符串,需进一步解析得到业务数据。

  • 字段内容示例:{\"code\":0,\"message\":\"success\"}
  • 字段详见下述 json 参数说明;
  • 为方便展示,同步响应及回调请求的示例中,均为解析后的 JSON

json 参数说明

参数名称类型是否必有说明
codeNumber状态码,详见 业务状态码
nonceNumber随机数
timestampNumber当前服务器的 Unix 时间戳
videoInfoVideoInfo视频信息,详见 VideoInfo 数据结构
fragmentInfoObject视频片段信息。详见 FragmentInfo 数据结构
customInfoObject<String, String/Int>自定义信息,为识别任务添加业务信息(如房间 ID、文件 ID 等)或其他扩展参数

5.2 视频流结束状态回调示例

{
"code": 0,
"message": "success",
"nonce": 1685000000,
"timestamp": 1685000000,
"videoInfo": {
"id": "<videoId>",
"captureStart": "2023-01-01T00:00:00Z",
"status": "end",
"message": "TaskClosed"
},
"fragmentInfo": {
"id": "<videoId>-1",
"offsetStart": 0,
"offsetEnd": 10,
"capturedImages": 10
},
"customInfo": {
"roomId": "<roomId>"
}
}