视频直播流审核增强版API

视频直播流审核增强版帮助您检测直播流中的画面和语音是否含有风险内容。本文介绍了使用API接口进行直播流审核的方法。

接入指引

  1. 注册阿里云账号:立即注册,按照操作提示完成账号注册。

  2. 开通内容安全按量付费:请确保已开通服务,具体操作,请参见开通服务。开通不收费,接口接入使用后系统会按使用量自动出账,具体信息,请参见计费说明您也可以购买按量抵扣资源包,资源包相较于后付费存在一定阶梯抵扣,适合使用量级可预期和较大的用户,具体信息,请参见购买按量抵扣资源包

  3. 创建AccessKey:请确保您已通过RAM创建AccessKey,具体操作,请参见创建AccessKey。如果您使用的是RAM用户(子账号)AccessKey,您需要通过阿里云账号(主账号)给RAM用户赋予AliyunYundunGreenWebFullAccess权限,具体操作,请参见RAM授权

  4. 开发接入:推荐使用SDK方式调用。具体信息,请参见视频审核增强版SDK及接入指南

  5. 视频直播流审核服务包含以下3个接口:

提交审核任务

接口说明

  • 业务接口:VideoModeration,视频直播流仅提供异步检测接口。

  • 支持的地域及接入地址:

    地域

    外网接入地址

    内网接入地址

    支持的服务

    华东2(上海)

    green-cip.cn-shanghai.aliyuncs.com

    green-cip-vpc.cn-shanghai.aliyuncs.com

    liveStreamDetection

    华北2(北京)

    green-cip.cn-beijing.aliyuncs.com

    green-cip-vpc.cn-beijing.aliyuncs.com

    华东1(杭州)

    green-cip.cn-hangzhou.aliyuncs.com

    green-cip-vpc.cn-hangzhou.aliyuncs.com

    华南1(深圳)

    https://green-cip.cn-shenzhen.aliyuncs.com

    green-cip-vpc.cn-shenzhen.aliyuncs.com

    新加坡

    green-cip.ap-southeast-1.aliyuncs.com

    green-cip-vpc.ap-southeast-1.aliyuncs.com

    liveStreamDetection_cb

  • 计费信息

    该接口为收费接口。会根据您设置的直播画面检测策略和直播语音检测策略进行计费,直播画面可选择多个服务(service),将按照画面截帧数量*每个服务的单价进行累加计费。如果同时检测直播中的语音内容违规,则还将增加视频时长*语音违规功能的单价的费用。关于计费方式,请参见计费说明

  • 检测对象:支持检测直播流。

  • 返回结果:异步检测任务不会实时返回检测结果,您需要通过callback或者轮询的方式获取检测结果。检测结果最长保留24小时。

    • callback获取检测结果:提交异步检测任务时,在请求参数中传入callback参数,用来自动接收检测结果。

    • 轮询获取检测结果:提交异步检测任务时,无需传入callback参数;提交异步检测任务后,调用结果查询接口获取检测结果。

  • 直播流要求

    • 直播流支持以下协议:RTMP、HLS、HTTP-FLV、RTSP。

    • 直播流时长限制:单个视频流检测任务最长支持24小时,超过24小时任务自动结束。

  • 检测规则配置:

    • 初次调用时请在内容安全控制台进行直播审核规则设置。

    • 如果您不设置,直播审核增强版API的默认配置如下:

      直播流检测(liveStreamDetection)

      直播流检测_海外版(liveStreamDetection_cb)

      • 固定频率截帧:1秒/帧

      • 视频画面检测服务:视频/直播截图检测(liveStreamCheck)

      • 视频语音检测:开启

      • 视频语音检测服务:社交娱乐直播检测(live_stream_detection)

      • 结果返回方式:仅返回有检出风险的结果

      • 固定频率截帧:1秒/帧

      • 视频画面检测服务:通用基线检测_海外版(liveStreamCheck_cb)

      • 视频语音检测:开启

      • 视频语音检测服务:社交娱乐直播检测(live_stream_detection_cb)

      • 结果返回方式:仅返回有检出风险的结果

QPS限制

本接口的单用户QPS限制为100次/秒,并发审核路数限制为50路(即同一时间只能处理50个任务,如需要提升并发路数请咨询您的商务经理)。超过限制,API调用会被限流,这可能会影响您的业务,请合理调用。

调试

在接入前,您也可以通过阿里云OpenAPI在线调试VideoModeration接口,查看调用示例代码及SDK依赖信息,方便概览接口的使用方法和参数。

重要

在线调试能力是基于当前登录账号调用内容安全的API接口,因此调用量会计入账号的收费用量中。

请求参数

名称

类型

是否必须

示例值

描述

Service

String

liveStreamDetection

审核服务类型。如下:

  • liveStreamDetection:视频直播流检测

  • liveStreamDetection_cb:视频直播流检测_海外版

ServiceParameters

JSONString

审核服务需要的参数集。JSON字符串格式,关于每个字符串的描述,请参见表1 ServiceParameters

表1 ServiceParameters

名称

类型

是否必选

示例值

描述

url

String

http://www.aliyundoc.com/a.flv

待检测对象的URL,请确保该URL能通过公网访问到,且URL地址长度不超过2048个字符。

说明

URL地址中不能包含中文,且一次请求请确保仅传入1条URL。

callback

String

http://www.aliyundoc.com

检测结果回调通知您的URL,支持使用HTTP和HTTPS协议的地址。该字段为空时,您必须定时轮询检测结果。

callback接口必须支持POST方法、UTF-8编码的传输数据,以及表单参数checksumcontent

内容安全按照以下规则和格式设置checksumcontent,调用您的callback接口返回检测结果。

  • checksum:字符串格式,由用户uid + seed + content拼成字符串,通过SHA256算法生成。用户UID即阿里云账号ID,可以在阿里云控制台查询。为防篡改,您可以在获取到推送结果时,按上述算法生成字符串,与checksum做一次校验。

    说明

    用户UID必须是阿里云账号的UID,而不是RAM用户的UID。

  • content:JSON字符串格式,请自行解析反转成JSON对象。关于content结果的示例,请参见查询检测结果的返回示例。

说明

您的服务端callback接口收到内容安全推送的结果后,如果返回的HTTP状态码为200,则表示接收成功,其他的HTTP状态码均视为接收失败。接收失败时,内容安全将最多重复推送16次检测结果,直到接收成功。重复推送16次后仍未接收成功,则不再推送,建议您检查callback接口的状态。

seed

String

abc****

随机字符串,该值用于回调通知请求中的签名。

由英文字母、数字、下划线(_)组成,不超过64个字符。由您自定义,用于在接收到内容安全的回调通知时校验请求由阿里云内容安全服务发起。

说明

当使用callback时,该字段必须提供。

cryptType

String

SHA256

使用回调通知时(callback),设置对回调通知内容进行签名的算法。内容安全会将返回结果(由用户uid + seed + content拼接的字符串)按照您设置的加密算法计算签名,再发送到您的回调通知地址。取值:

  • SHA256(默认):使用SHA256加密算法。

  • SM3:使用国密HMAC-SM3加密算法,返回十六进制的字符串,且字符串由小写字母和数字组成。

    例如,abc经国密SM3加密后返回66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0。

dataId

String

videoId****

检测对象对应的数据ID。

由大小写英文字母、数字、下划线(_)、短划线(-)、英文句号(.)组成,不超过128个字符,可以用于唯一标识您的业务数据。

liveId

String

liveId****

视频直播流的ID。

该参数用于视频直播任务去重,防止重复检测,如果传递该参数,会根据uid+service+liveId判断是否存在检测中的直播任务。如果存在,就直接返回已存在的直播检测taskId,不发起新的任务。

说明

您的服务端callback接口收到内容安全推送的结果后,如果返回的HTTP状态码为200,则表示接收成功,其他的HTTP状态码均视为接收失败。接收失败时,内容安全将最多重复推送16次检测结果,直到接收成功。重复推送16次后仍未接收成功,则不再推送,建议您检查callback接口的状态。

返回数据

名称

类型

示例值

描述

Code

Integer

200

状态码。更多信息,请参见Code说明

Data

JSONObject

{"TaskId": "AAAAA-BBBBB"}

审核结果数据。

Message

String

OK

请求消息的响应消息。

RequestId

String

ABCD1234-1234-1234-1234-123****

请求ID。

示例

请求示例

{
    "Service": "liveStreamDetection",
    "ServiceParameters": {
        "url": "http://www.aliyundoc.com/a.flv",
        "dataId": "videoId****",
        "liveId": "liveId****"
    }
}

正常返回示例

{
    "Msg": "OK",
    "Code": 200,
    "Data":
    {
        "TaskId": "AAAAA-BBBBB",
        "DataId": "videoId****"
    },
    "RequestId": "ABCD1234-1234-1234-1234-123****"
}

获取直播审核任务结果

接口说明

  • 业务接口:VideoModerationResult。

  • 计费信息:该接口不计费。

  • 查询超时:建议您将查询间隔设置为30秒(即在提交异步检测任务30秒后查询结果),最长不能超出24小时,否则结果将会自动删除。

  • 结果返回:如果直播在进行中,则每次查询返回最近10条检测结果;如果直播流已经结束,则会返回所有检测结果。

QPS限制

本接口的单用户QPS限制为100次/秒。超过限制,API调用会被限流,这可能会影响您的业务,请合理调用。

调试

在接入前,您也可以通过阿里云OpenAPI在线调试VideoModerationResult接口,查看调用示例代码及SDK依赖信息,方便概览接口的使用方法和参数。

请求参数

名称

类型

是否必选

示例值

描述

Service

String

liveStreamDetection

审核服务类型,需要和提交审核任务的审核服务类型保持一致。

ServiceParameters

JSONString

审核服务需要的参数集。JSON字符串格式,关于每个字符串的描述,请参见表表1 ServiceParameters

表1 ServiceParameters

名称

类型

是否必选

示例值

描述

taskId

string

abcd****

要查询的检测任务的taskId,每次支持输入一个taskId

说明

您在提交检测任务后,可以从返回数据中获取检测任务的taskId

返回数据

名称

类型

示例值

描述

RequestId

String

ABCD1234-1234-1234-1234-123****

本次调用请求的ID,是由阿里云为该请求生成的唯一标识符,可用于排查和定位问题。

Data

Object

直播流内容检测结果。更多信息,请参见表2 Data

Code

String

200

状态码。更多信息,请参见Code说明

Message

String

OK

本次请求的响应消息。

表2 Data

名称

类型

示例值

描述

DataId

String

videoId****

检测对象对应的数据ID。

说明

如果在检测请求参数中传入了dataId,则此处返回对应的DataId。

LiveId

String

liveId****

检测对象对应的直播流ID。

说明

如果在检测请求参数中传入了liveId,则此处返回对应的LiveId。

TaskId

String

AAAAA-BBBBB

检测对象对应的任务ID。

RiskLevel

String

high

视频直播的风险等级,根据视频画面和视频音频综合判断,返回值包括:

  • high:高风险

  • medium:中风险

  • low:低风险

  • none:未检测到风险

说明

高风险内容建议直接处置;中风险内容建议人工复查;低风险内容建议在高召回需求时再做处理,日常建议和未检测到风险做相同处理。视频画面风险分值可以在内容安全控制台配置。

FrameResult

JSONObject

直播画面检测结果,调用成功时(code=200),返回结果中包含一个结构体,具体结构,请参见表3 FrameResult

说明

视频流检测场景中,code返回280表示在检测中,返回200表示检测完成。在检测中状态时,检测结果中包含从开始检测到当前时间检测到的结果。

AudioResult

JSONObject

直播语音检测结果。返回结果中包含一个结构体,关于结构体的描述,请参见表8 audioResult

表3 FrameResult

名称

类型

示例值

描述

FrameNum

Integer

200

直播画面返回截帧数。

FrameSummarys

JSONArray

直播画面标签汇总。具体结构描述,请参见表4 FrameSummarys

RiskLevel

String

high

直播画面风险等级,根据所有直播截帧计算返回,返回值包括:

  • high:高风险

  • medium:中风险

  • low:低风险

  • none:未检测到风险

Frames

JSONArray

包含命中标签的直播截帧信息。具体结构描述,请参见表5 Frames

表4 FrameSummarys

名称

类型

示例值

描述

Label

String

violent_armedForces

视频截帧标签。

Description

String

疑似含有烟火类内容元素

对Labal字段的说明。

重要

该字段为Label字段的解释说明,可能会变更调整,建议根据Label字段进行处置,不要基于该字段进行结果处置。

LabelSum

Integer

8

标签出现次数。

表5 Frames

名称

类型

示例值

描述

TempUrl

String

http://www.aliyundoc.com/test.jpg

直播截帧的临时地址,30分钟有效,建议您及时进行转存。

说明

若开启了视频证据转存,则返回转存的视频截帧的OSS URL链接。

Offset

Float

50.5

直播截帧距离直播开始的时间戳,单位:秒。

Timestamp

Integer

1684559739000

该截帧处理的绝对时间戳,单位:毫秒。

RiskLevel

String

high

直播截帧风险等级,根据设置的高低风险分返回,返回值包括:

  • high:高风险

  • medium:中风险

  • low:低风险

  • none:未检测到风险

说明

高风险内容建议直接处置;中风险内容建议人工复查;低风险内容建议在高召回需求时再做处理,日常建议和未检测到风险做相同处理。视频截帧风险分值可以在内容安全控制台规则配置中配置。

Results

JSONArray

直播截帧检测的风险标签、置信分等参数结果。更多信息,请参见表6 Results

表6 Results

名称

类型

示例值

描述

Service

String

liveSteamCheck

调用的画面检测服务(service)。

Result

Array

直播截帧检测的风险标签、置信分等参数结果。更多信息,请参见表7 Result

表7 Result

名称

类型

示例值

描述

Label

String

violent_explosion

直播截帧检测运算后返回的标签。同一张截帧可能会检出多个标签和分值。支持的标签如下:

Confidence

Float

81.22

置信分值,0到100分,保留到小数点后2位。

Description

String

疑似含有烟火类内容元素

对Labal字段的说明。

重要

该字段为Label字段的解释说明,可能会变更调整,建议根据Label字段进行处置,不要基于该字段进行结果处置。

表8 audioResult

名称

类型

示例值

描述

AudioSummarys

JSONArray

语音标签汇总。具体结构描述,请参见表9 AudioSummarys

RiskLevel

String

high

语音风险等级,根据所有音频切片计算返回,返回值包括:

  • high:高风险

  • medium:中风险

  • low:低风险

  • none:未检测到风险

SliceDetails

JSONArray

语音对应的文本详情(每一句文本对应一个元素),包含一个或者多个元素,具体结构描述,请参见表10 SliceDetails

表9 AudioSummarys

名称

类型

示例值

描述

Label

String

profanity

视频语音标签。

LabelSum

Integer

8

标签出现次数。

表10 SliceDetails

名称

类型

示例值

描述

StartTime

Integer

0

句子开始的时间,单位:秒。

EndTime

Integer

4065

句子结束的时间,单位:秒。

StartTimestamp

Integer

1678854649720

切片开始时间戳,单位:毫秒。

EndTimestamp

Integer

1678854649720

切片结束时间戳,单位:毫秒。

Text

String

恶心的

语音转换成文本内容。

Url

String

https://aliyundoc.com/test.wav

如果检测的内容是语音流,表示该段文本对应的语音流的临时访问地址。该地址有效时间为30分钟,需要及时转存。

Labels

String

political_content,xxxx

标签详情,多个标签以逗号分隔。包含:

  • ad:广告引流

  • violence:暴恐内容

  • political_content:涉政内容

  • specified_speaking:特定声音

  • specified_lyrics:特定歌曲

  • sexual_content:色情内容

  • sexual_sounds:呻吟声音

  • contraband:违禁内容

  • profanity:辱骂内容

  • religion:宗教内容

  • cyberbullying:网络暴力

  • negative_content:不良内容

  • nontalk:静音音频

  • C_customized:用户库命中

RiskLevel

String

high

视频音频切片风险等级,返回值包括:

  • high:高风险

  • medium:中风险

  • low:低风险

  • none:未检测到风险

RiskWords

String

AAA,BBB,CCC

命中风险词,多个词以逗号分隔。

RiskTips

String

色情_低俗词,色情_描述

细分标签,多个标签以逗号分隔。

Extend

String

{"riskTips":"色情_低俗词","riskWords":"色情服务"}

保留字段。

示例

请求示例

{
    "Service": "liveStreamDetection",
    "ServiceParameters": {
        "taskId": "abcd****"
    }
}

正常返回示例

  • 仅检测直播图画

{
    "Code": 200,
    "RequestId": "25106421-XXXX-XXXX-XXXX-15DA5AAAC546",
    "Message": "success finished",
    "Data": {
        "DataId": "dc16c28f-xxxx-xxxx-xxxx-51efe0131080",
        "LiveId": "live0307-0728-****",
        "RiskLevel": "high",
        "FrameResult": {
            "FrameNum": 2,
            "FrameSummarys": [
                {
                    "Label": "violent_explosion",
                    "Description": "疑似含有烟火类内容元素",
                    "LabelSum": 8
                },
                {
                    "Label": "sexual_cleavage",
                    "Description": "疑似含有包含肢体裸露或性感内容",
                    "LabelSum": 8
                }
            ],
            "RiskLevel": "medium",
            "Frames": [
                {
                    "Offset": 1,
                    "RiskLevel": "none",
                    "Results": [
                        {
                            "Result": [
                                {
                                    "Label": "nonLabel",
                                    "Description": "未检测出风险"
                                }
                            ],
                            "Service": "baselineCheck"
                        },
                        {
                            "Result": [
                                {
                                    "Label": "nonLabel",
                                    "Description": "未检测出风险"
                                }
                            ],
                            "Service": "baselineCheck_pro"
                        }
                    ],
                    "TempUrl": "http://abc.oss-cn-shanghai.aliyuncs.com/test1.jpg",
                    "Timestamp": 1704769999000
                },
                {
                    "Offset": 2,
                    "RiskLevel": "medium",
                    "Results": [
                        {
                            "Result": [
                                {
                                    "Confidence": 74.18,
                                    "Label": "violent_explosion",
                                    "Description": "疑似含有烟火类内容元素"
                                }
                            ],
                            "Service": "baselineCheck"
                        },
                        {
                            "Result": [
                                {
                                    "Confidence": 78.88,
                                    "Label": "sexual_cleavage",
                                    "Description": "疑似含有包含肢体裸露或性感内容"
                                }
                            ],
                            "Service": "baselineCheck_pro"
                        }
                    ],
                    "TempUrl": "http://abc.oss-cn-shanghai.aliyuncs.com/test2.jpg",
                    "Timestamp": 1704769989000
                }
            ]
        }
    }
}

  • 同时检测直播图画和直播语音

{
    "Code": 200,
    "RequestId": "25106421-XXXX-XXXX-XXXX-15DA5AAAC546",
    "Message": "success finished",
    "Data": {
        "DataId": "dc16c28f-xxxx-xxxx-xxxx-51efe0131080",
        "LiveId": "live0307-0728-****",
        "RiskLevel": "high",
        "AudioResult": {
            "AudioSummarys": [
                {
                    "Label": "sexual_sounds",
                    "LabelSum": 3
                }
            ],
            "RiskLevel": "high",
            "SliceDetails": [
                {
                    "EndTime": 60,
                    "EndTimestamp": 1698912813192,
                    "Labels": "",
                    "RiskLevel": "none",
                    "StartTime": 30,
                    "StartTimestamp": 1698912783192,
                    "Text": "内容安全",
                    "Url": "http://abc.oss-cn-shanghai.aliyuncs.com/test.wav"
                },
                {
                    "EndTime": 30,
                    "EndTimestamp": 1698912813192,
                    "Extend": "{\"customizedWords\":\"服务\",\"customizedLibs\":\"test\"}",
                    "Labels": "C_customized",
                    "RiskLevel": "high",
                    "StartTime": 0,
                    "StartTimestamp": 1698912783192,
                    "Text": "欢迎使用阿里云内容安全服务",
                    "Url": "http://abc.oss-cn-shanghai.aliyuncs.com/test.wav"
                }
            ]
        },
        "FrameResult": {
            "FrameNum": 2,
            "FrameSummarys": [
                {
                    "Label": "violent_explosion",
                    "Description": "疑似含有烟火类内容元素",
                    "LabelSum": 8
                },
                {
                    "Label": "sexual_cleavage",
                    "Description": "疑似含有包含肢体裸露或性感内容",
                    "LabelSum": 8
                }
            ],
            "RiskLevel": "medium",
            "Frames": [
                {
                    "Offset": 1,
                    "RiskLevel": "none",
                    "Results": [
                        {
                            "Result": [
                                {
                                    "Label": "nonLabel",
                                    "Description": "未检测出风险"
                                }
                            ],
                            "Service": "baselineCheck"
                        },
                        {
                            "Result": [
                                {
                                    "Label": "nonLabel",
                                    "Description": "未检测出风险"
                                }
                            ],
                            "Service": "baselineCheck_pro"
                        }
                    ],
                    "TempUrl": "http://abc.oss-cn-shanghai.aliyuncs.com/test1.jpg",
                    "Timestamp": 1704769999000
                },
                {
                    "Offset": 2,
                    "RiskLevel": "medium",
                    "Results": [
                        {
                            "Result": [
                                {
                                    "Confidence": 74.18,
                                    "Label": "violent_explosion",
                                    "Description": "疑似含有烟火类内容元素"
                                }
                            ],
                            "Service": "baselineCheck"
                        },
                        {
                            "Result": [
                                {
                                    "Confidence": 78.88,
                                    "Label": "sexual_cleavage",
                                    "Description": "疑似含有包含肢体裸露或性感内容"
                                }
                            ],
                            "Service": "baselineCheck_pro"
                        }
                    ],
                    "TempUrl": "http://abc.oss-cn-shanghai.aliyuncs.com/test2.jpg",
                    "Timestamp": 1704769989000
                }
            ]
        }
    }
}

取消直播审核任务

接口说明

您可以调用该接口取消直播流审核任务。

  • 业务接口:VideoModerationCancel。

  • 计费信息:该接口不计费。

调试

在接入前,您也可以通过阿里云OpenAPI在线调试VideoModerationCancel接口,查看调用示例代码及SDK依赖信息,方便概览接口的使用方法和参数。

请求参数

名称

类型

是否必须

示例值

描述

Service

String

liveStreamDetection

审核服务类型。请和提交审核任务的类型保持一致。

ServiceParameters

JSONString

服务需要的参数集。JSON字符串格式,关于每个字符串的描述,请参见表 11. ServiceParameters

表11 ServiceParameters

名称

类型

是否必选

示例值

描述

taskId

string

abcd****

要取消的检测任务的taskId,每次支持输入一个。

备注:您在提交检测任务后,可以从返回数据中获取检测任务的taskId

返回参数

名称

类型

示例值

描述

Code

Integer

200

状态码。更多信息,请参见Code说明

Message

String

OK

本次请求的响应消息。

RequestId

String

AAAAAA-BBBB-CCCCC-DDDD-EEEEEEEE****

请求ID。

示例

请求示例

{
    "Service": "liveStreamDetection",
    "ServiceParameters": {
        "taskId": "abcd****"
    }
}

返回结果参考

{
    "Msg": "OK",
    "Code": 200,
    "RequestId": "70ED13B0-BC22-576D-9CCF-1CC12FEAC477"
}

Code说明

以下为视频直播流审核增强版接口返回Code的含义说明,系统仅对Code返回为200和280的请求计量计费,其他Code不会计费。

Code

说明

200

请求正常或者检测完成。

280

检测中。

400

请求参数为空。

401

请求参数错误。

402

请求参数长度不符合接口规定,请检查并修改。

403

请求超过QPS限制,请检查并调整并发。

404

传入的视频下载遇到错误,请检查或重试。

405

传入的视频下载超时,可能是因为视频无法访问,请检查调整后重试。

406

传入的视频过大,请检查调整视频大小后再重试。

407

传入的视频格式暂不支持,请检查调整后重试。

408

该账号无权限调用该接口,可能是账号未开通或者已欠费,或者调用账号未被授权访问。

409

传入的TaskId不存在,可能是结果已经超过24小时有效期。

480

检测并发路数超过限制,请检查并调整并发。

500

系统异常。