结果查询接口
更新时间:
查询普通直播或三方 RTC 任务的可用结果。读取不会消费结果;实时片段建议通过回调接收。
POSThttps://vsafe.ilivedata.com/api/v1/livevideo/check/result
请求格式
请求体使用 UTF-8 编码的 JSON。
请求头
必需
说明
Content-Type
是
application/json; charset=UTF-8
Accept
建议
application/json
鉴权相关请求头及签名规则见帮助中心请求签名。查询和停止任务时,请使用提交任务时的项目。
请求体
参数
类型
必需
说明
taskId
String
是
提交成功后响应体中的 result.taskId。
以下 ID 仅展示格式;实际请求必须替换为本项目刚提交任务返回的 ID,不要直接复用文档中的固定 ID。
{
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000"
}
普通直播与 RTC 的区别
场景
返回内容
普通 URL 直播检测中
仅 errorCode/taskId/code=2,不返回实时片段和 extra。
普通 URL 直播已结束
当前版本正常收尾后 code=0;处理失败或无可用结果时可为 code=1,结果不可用也可能为 code=3。旧版本保存快照或尚未完成收尾时可能仍为 code=2,不能仅靠该值判定仍在拉流。
RTC 检测中
返回当前累计保存的检出结果;可为 code=2/result=0/videoSpams=[]。不保证含所有正常片段。
RTC 已结束
完成结果收尾后 code=1,可同时包含违规结果。不能把此处的 1 当成审核失败。
任务不存在
统一直播入口返回 code=3;格式及过期校验错误走 HTTP 错误。
响应格式
响应体为 JSON,响应头 Content-Type: application/json。
字段
类型
说明
errorCode
Integer
0 表示请求成功。
errorMessage
String
错误信息,可能省略。
taskId
String
视频审核任务 ID。
code
Integer
0/1/2/3 按上表解释;普通直播正常收尾为 0,RTC 收尾为 1。查询和片段回调的状态上下文不同。
result
Integer
审核结论:0 通过,1 疑似,2 不通过。检测中或失败时该字段可能不存在,不能视为通过。
videoSpams
Array
当前返回的证据列表,可能省略或为空。
extra
Object
提交时的透传数据,有结果时可返回,状态响应不保证存在。
liveProvider
String
仅 RTC:zego/agora/trtc,新版响应字段。
liveRoomId
String
仅 RTC:房间/频道 ID,位于顶层。
pullStreamSuccess
Boolean
可选。true 表示已收到图片或音频并进入审核结果处理,与是否检出违规、审核是否成功无关。旧结果或缺少证据时省略,不能将省略解释为 false。普通 URL 直播检测中仍只返回状态。
videoSpams[]
以下为直播结果的片段字段,适用于普通 URL 直播和三方 RTC;RTC 专用字段另行标明。字段按媒体类型、策略和处理阶段返回,省略不等于零或审核通过。直播时间使用 Unix 毫秒时间戳。
片段数组可能按策略筛选,不应通过重算数组来替代顶层 result 审核结论。
字段
类型
说明
type
Integer
1 图片,2 音频。
result
Integer
片段审核结论:0 通过,1 疑似,2 不通过。
taskId
String
所属视频任务 ID。
checkTaskId
String
该片段下游审核任务标识;不可代替视频 taskId 查询,失败时可能缺失。
beginTime
Integer
片段开始时间,Unix 毫秒时间戳。
endTime
Integer
片段结束时间,Unix 毫秒时间戳。
url
String
对应图片/音频证据地址,可能按策略省略;不要假定音频一定没有 URL。
text
String
当前命中音频子片段的识别文本;声纹或无转写结果时可能省略。
audioText
String
可选。当前录制音频片段的完整转写,可包含正常内容;不替代 text。未提供转写时省略,空字符串原样返回。
ocr
String[]
可选。当前图片的 OCR 文本,保留识别结果的顺序。
vpr
Boolean
音频是否命中声纹检测;按下游结果返回。
speaker
String
可选。当前音频子片段的说话人标识,普通直播与三方 RTC 均按音频审核结果返回;不等于 RTC 推流用户 ID,不能替代 liveUserId。
tags
Array
审核分类,结构见下表。
labels
Array
图片识别标签,结构见下表。
code
Integer
处理状态;1 可表示片段失败,不能据此认定整条直播已结束。
duration
Integer
媒体时长,毫秒;可能为 0,不是任务总审核时长。
checkDuration
Integer
片段回调可返回:片段开始时间减审核开始时间,毫秒;不是网络投递耗时,查询时不保证存在。
segmentUrl
String
对应录制证据地址。视频分段模式可为视频,直接媒体/RTC 模式不保证存在视频段。
language
String
音频识别语种。
liveStreamId
String
仅 RTC:当前片段来源流 ID。
liveUserId
String
仅 RTC:实际推流用户 ID;混音或来源未知时省略,不使用入房账号冒充。
tags[]
字段
类型
说明
tag
Integer
一级分类编码;详见分类编码对照表。音频还可能返回音频专用分类。
tagName / tagNameEn
String
一级分类名称及英文名称,按下游结果返回。
level
Integer
0 正常,1 疑似,2 异常。
subTags
Array
二级分类数组,不是单个对象。
confidence
Double
可选。审核返回的置信度,保留原值,不统一解释为 0~1 概率;缺失时不补造值。
wordList
String[]
可选。该一级分类命中的词;二级分类命中词仍位于 subTags[].wordList。
subTags[]
字段
类型
说明
subTag
Integer
二级分类编码。
subTagName / subTagNameEn
String
二级分类名称及英文名称。
wordList
String[]
命中详情,可能为空。
labels[]
字段
类型
说明
id
Integer
图像标签编号。
name
String
标签名称。
score
Integer
模型得分;取值范围由标签模型决定,不统一解释为 0~1 概率。
完整转写与兼容说明
audioText 对应当前 url 所指向的录制音频片段,不是整场直播或整个房间的转写。一个片段出现多个命中子片段时,每条证据可携带相同的完整转写;beginTime/endTime/text/speaker 仍对应各自命中的子片段。RTC 多用户的转写、说话人和 liveUserId 随各自片段关联,不跨用户拼接。
- 项目选择“所有送检结果增量回调”时,正常音频片段也可在回调中返回
audioText;其他模式仍只推送检出结果。该模式是项目配置,不是提交参数。
- 查询和已保存结果仍只包含检出片段,不保证可补取整场直播的正常转写。需要正常片段转写时,请及时保存对应回调。
- 新字段为兼容性扩展,旧结果可能缺失。客户端应容忍未知字段及字段省略,不能将缺失视为零、拉流失败或审核通过。点播字段仍按点播接口文档解释。
RTC 身份字段与版本兼容
当前结果结构在顶层返回 liveProvider(zego/agora/trtc)与 liveRoomId,在每个片段返回 liveStreamId/liveUserId。普通 URL 直播不返回 RTC 身份。一个房间可含多个推流用户。
旧字段位置
当前字段位置
roomId、videoSpams[].liveRoomId、videoSpams[].zegoRoomId
liveRoomId
videoSpams[].liveProvider
liveProvider
videoSpams[].zegoStreamId
videoSpams[].liveStreamId
videoSpams[].zegoUserId
videoSpams[].liveUserId
这些身份字段属于新版响应约定,接入前确认服务发布版本。需要兼容历史响应的客户端可优先读新字段、缺失时读旧字段;不保证新版本继续输出旧字段。请求中的 roomId/channelId/strRoomId/userId/uid 含义不变。未知推流者不应回退成业务用户或录制账号。
响应示例
普通 URL 直播检测中
{
"errorCode": 0,
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"code": 2
}
普通 URL 直播正常收尾且无检出
{
"errorCode": 0,
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"code": 0,
"result": 0,
"videoSpams": []
}
RTC 检测中且尚无检出
{
"errorCode": 0,
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"code": 2,
"result": 0,
"videoSpams": [],
"liveProvider": "trtc",
"liveRoomId": "room-10001"
}
RTC 已结束且有检出
{
"errorCode": 0,
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"code": 1,
"result": 2,
"liveProvider": "trtc",
"liveRoomId": "room-10001",
"videoSpams": [
{
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"type": 1,
"result": 2,
"beginTime": 1791763205000,
"endTime": 1791763205000,
"duration": 0,
"url": "https://media.example.com/evidence/frame.jpg",
"tags": [
{
"tag": 130,
"level": 2,
"confidence": 0.92,
"wordList": [
"画面命中词"
]
}
],
"liveStreamId": "publisher-10001",
"liveUserId": "publisher-10001",
"ocr": [
"画面命中词"
]
},
{
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"type": 2,
"result": 2,
"beginTime": 1791763207000,
"endTime": 1791763208000,
"duration": 5000,
"url": "https://media.example.com/evidence/audio.wav",
"text": "命中内容",
"audioText": "开头的正常内容,命中内容,结尾的正常内容。",
"speaker": "speaker-1",
"tags": [
{
"tag": 130,
"level": 2,
"confidence": 0.92,
"wordList": [
"命中内容"
]
}
],
"liveStreamId": "publisher-10002",
"liveUserId": "publisher-10002"
}
],
"pullStreamSuccess": true
}
任务不存在
{
"errorCode": 0,
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"code": 3
}
直播时间使用 Unix 毫秒时间戳。片段回调中的 checkDuration 位于 videoSpams[] 内;断流回调中的同名字段位于断流 result 内,含义不同。
错误处理
参见错误码与处理建议。HTTP 状态、errorCode、任务状态 code 和审核结论 result 必须分别处理。
查询普通直播或三方 RTC 任务的可用结果。读取不会消费结果;实时片段建议通过回调接收。
https://vsafe.ilivedata.com/api/v1/livevideo/check/result请求格式
请求体使用 UTF-8 编码的 JSON。
| 请求头 | 必需 | 说明 |
|---|---|---|
Content-Type |
是 | application/json; charset=UTF-8 |
Accept |
建议 | application/json |
鉴权相关请求头及签名规则见帮助中心请求签名。查询和停止任务时,请使用提交任务时的项目。
请求体
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
taskId |
String | 是 | 提交成功后响应体中的 result.taskId。 |
以下 ID 仅展示格式;实际请求必须替换为本项目刚提交任务返回的 ID,不要直接复用文档中的固定 ID。
{
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000"
}
普通直播与 RTC 的区别
| 场景 | 返回内容 |
|---|---|
| 普通 URL 直播检测中 | 仅 errorCode/taskId/code=2,不返回实时片段和 extra。 |
| 普通 URL 直播已结束 | 当前版本正常收尾后 code=0;处理失败或无可用结果时可为 code=1,结果不可用也可能为 code=3。旧版本保存快照或尚未完成收尾时可能仍为 code=2,不能仅靠该值判定仍在拉流。 |
| RTC 检测中 | 返回当前累计保存的检出结果;可为 code=2/result=0/videoSpams=[]。不保证含所有正常片段。 |
| RTC 已结束 | 完成结果收尾后 code=1,可同时包含违规结果。不能把此处的 1 当成审核失败。 |
| 任务不存在 | 统一直播入口返回 code=3;格式及过期校验错误走 HTTP 错误。 |
响应格式
响应体为 JSON,响应头 Content-Type: application/json。
| 字段 | 类型 | 说明 |
|---|---|---|
errorCode |
Integer | 0 表示请求成功。 |
errorMessage |
String | 错误信息,可能省略。 |
taskId |
String | 视频审核任务 ID。 |
code |
Integer | 0/1/2/3 按上表解释;普通直播正常收尾为 0,RTC 收尾为 1。查询和片段回调的状态上下文不同。 |
result |
Integer | 审核结论:0 通过,1 疑似,2 不通过。检测中或失败时该字段可能不存在,不能视为通过。 |
videoSpams |
Array | 当前返回的证据列表,可能省略或为空。 |
extra |
Object | 提交时的透传数据,有结果时可返回,状态响应不保证存在。 |
liveProvider |
String | 仅 RTC:zego/agora/trtc,新版响应字段。 |
liveRoomId |
String | 仅 RTC:房间/频道 ID,位于顶层。 |
pullStreamSuccess |
Boolean | 可选。true 表示已收到图片或音频并进入审核结果处理,与是否检出违规、审核是否成功无关。旧结果或缺少证据时省略,不能将省略解释为 false。普通 URL 直播检测中仍只返回状态。 |
videoSpams[]
以下为直播结果的片段字段,适用于普通 URL 直播和三方 RTC;RTC 专用字段另行标明。字段按媒体类型、策略和处理阶段返回,省略不等于零或审核通过。直播时间使用 Unix 毫秒时间戳。
片段数组可能按策略筛选,不应通过重算数组来替代顶层 result 审核结论。
| 字段 | 类型 | 说明 |
|---|---|---|
type |
Integer | 1 图片,2 音频。 |
result |
Integer | 片段审核结论:0 通过,1 疑似,2 不通过。 |
taskId |
String | 所属视频任务 ID。 |
checkTaskId |
String | 该片段下游审核任务标识;不可代替视频 taskId 查询,失败时可能缺失。 |
beginTime |
Integer | 片段开始时间,Unix 毫秒时间戳。 |
endTime |
Integer | 片段结束时间,Unix 毫秒时间戳。 |
url |
String | 对应图片/音频证据地址,可能按策略省略;不要假定音频一定没有 URL。 |
text |
String | 当前命中音频子片段的识别文本;声纹或无转写结果时可能省略。 |
audioText |
String | 可选。当前录制音频片段的完整转写,可包含正常内容;不替代 text。未提供转写时省略,空字符串原样返回。 |
ocr |
String[] | 可选。当前图片的 OCR 文本,保留识别结果的顺序。 |
vpr |
Boolean | 音频是否命中声纹检测;按下游结果返回。 |
speaker |
String | 可选。当前音频子片段的说话人标识,普通直播与三方 RTC 均按音频审核结果返回;不等于 RTC 推流用户 ID,不能替代 liveUserId。 |
tags |
Array | 审核分类,结构见下表。 |
labels |
Array | 图片识别标签,结构见下表。 |
code |
Integer | 处理状态;1 可表示片段失败,不能据此认定整条直播已结束。 |
duration |
Integer | 媒体时长,毫秒;可能为 0,不是任务总审核时长。 |
checkDuration |
Integer | 片段回调可返回:片段开始时间减审核开始时间,毫秒;不是网络投递耗时,查询时不保证存在。 |
segmentUrl |
String | 对应录制证据地址。视频分段模式可为视频,直接媒体/RTC 模式不保证存在视频段。 |
language |
String | 音频识别语种。 |
liveStreamId |
String | 仅 RTC:当前片段来源流 ID。 |
liveUserId |
String | 仅 RTC:实际推流用户 ID;混音或来源未知时省略,不使用入房账号冒充。 |
tags[]
| 字段 | 类型 | 说明 |
|---|---|---|
tag |
Integer | 一级分类编码;详见分类编码对照表。音频还可能返回音频专用分类。 |
tagName / tagNameEn |
String | 一级分类名称及英文名称,按下游结果返回。 |
level |
Integer | 0 正常,1 疑似,2 异常。 |
subTags |
Array | 二级分类数组,不是单个对象。 |
confidence |
Double | 可选。审核返回的置信度,保留原值,不统一解释为 0~1 概率;缺失时不补造值。 |
wordList |
String[] | 可选。该一级分类命中的词;二级分类命中词仍位于 subTags[].wordList。 |
subTags[]
| 字段 | 类型 | 说明 |
|---|---|---|
subTag |
Integer | 二级分类编码。 |
subTagName / subTagNameEn |
String | 二级分类名称及英文名称。 |
wordList |
String[] | 命中详情,可能为空。 |
labels[]
| 字段 | 类型 | 说明 |
|---|---|---|
id |
Integer | 图像标签编号。 |
name |
String | 标签名称。 |
score |
Integer | 模型得分;取值范围由标签模型决定,不统一解释为 0~1 概率。 |
完整转写与兼容说明
audioText 对应当前 url 所指向的录制音频片段,不是整场直播或整个房间的转写。一个片段出现多个命中子片段时,每条证据可携带相同的完整转写;beginTime/endTime/text/speaker 仍对应各自命中的子片段。RTC 多用户的转写、说话人和 liveUserId 随各自片段关联,不跨用户拼接。
- 项目选择“所有送检结果增量回调”时,正常音频片段也可在回调中返回
audioText;其他模式仍只推送检出结果。该模式是项目配置,不是提交参数。 - 查询和已保存结果仍只包含检出片段,不保证可补取整场直播的正常转写。需要正常片段转写时,请及时保存对应回调。
- 新字段为兼容性扩展,旧结果可能缺失。客户端应容忍未知字段及字段省略,不能将缺失视为零、拉流失败或审核通过。点播字段仍按点播接口文档解释。
RTC 身份字段与版本兼容
当前结果结构在顶层返回 liveProvider(zego/agora/trtc)与 liveRoomId,在每个片段返回 liveStreamId/liveUserId。普通 URL 直播不返回 RTC 身份。一个房间可含多个推流用户。
| 旧字段位置 | 当前字段位置 |
|---|---|
roomId、videoSpams[].liveRoomId、videoSpams[].zegoRoomId |
liveRoomId |
videoSpams[].liveProvider |
liveProvider |
videoSpams[].zegoStreamId |
videoSpams[].liveStreamId |
videoSpams[].zegoUserId |
videoSpams[].liveUserId |
这些身份字段属于新版响应约定,接入前确认服务发布版本。需要兼容历史响应的客户端可优先读新字段、缺失时读旧字段;不保证新版本继续输出旧字段。请求中的 roomId/channelId/strRoomId/userId/uid 含义不变。未知推流者不应回退成业务用户或录制账号。
响应示例
普通 URL 直播检测中
{
"errorCode": 0,
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"code": 2
}
普通 URL 直播正常收尾且无检出
{
"errorCode": 0,
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"code": 0,
"result": 0,
"videoSpams": []
}
RTC 检测中且尚无检出
{
"errorCode": 0,
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"code": 2,
"result": 0,
"videoSpams": [],
"liveProvider": "trtc",
"liveRoomId": "room-10001"
}
RTC 已结束且有检出
{
"errorCode": 0,
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"code": 1,
"result": 2,
"liveProvider": "trtc",
"liveRoomId": "room-10001",
"videoSpams": [
{
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"type": 1,
"result": 2,
"beginTime": 1791763205000,
"endTime": 1791763205000,
"duration": 0,
"url": "https://media.example.com/evidence/frame.jpg",
"tags": [
{
"tag": 130,
"level": 2,
"confidence": 0.92,
"wordList": [
"画面命中词"
]
}
],
"liveStreamId": "publisher-10001",
"liveUserId": "publisher-10001",
"ocr": [
"画面命中词"
]
},
{
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"type": 2,
"result": 2,
"beginTime": 1791763207000,
"endTime": 1791763208000,
"duration": 5000,
"url": "https://media.example.com/evidence/audio.wav",
"text": "命中内容",
"audioText": "开头的正常内容,命中内容,结尾的正常内容。",
"speaker": "speaker-1",
"tags": [
{
"tag": 130,
"level": 2,
"confidence": 0.92,
"wordList": [
"命中内容"
]
}
],
"liveStreamId": "publisher-10002",
"liveUserId": "publisher-10002"
}
],
"pullStreamSuccess": true
}
任务不存在
{
"errorCode": 0,
"taskId": "cn_00000000-0000-0000-0000-000000000001_1791763200000",
"code": 3
}
直播时间使用 Unix 毫秒时间戳。片段回调中的 checkDuration 位于 videoSpams[] 内;断流回调中的同名字段位于断流 result 内,含义不同。
错误处理
参见错误码与处理建议。HTTP 状态、errorCode、任务状态 code 和审核结论 result 必须分别处理。