结果查询接口

查询普通直播或三方 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 必须分别处理。