视频直播流审核增强版帮助您检测直播流中的画面和语音是否含有风险内容。本文介绍了使用API接口进行直播流审核的方法。
接入指引
注册阿里云账号:立即注册,按照操作提示完成账号注册。
开通内容安全按量付费:请确保已开通服务,具体操作,请参见开通服务。开通不收费,接口接入使用后系统会按使用量自动出账,具体信息,请参见计费说明。您也可以购买按量抵扣资源包,资源包相较于后付费存在一定阶梯抵扣,适合使用量级可预期和较大的用户,具体信息,请参见购买按量抵扣资源包。
创建AccessKey:请确保您已通过RAM创建AccessKey,具体操作,请参见创建AccessKey。如果您使用的是RAM用户(子账号)AccessKey,您需要通过阿里云账号(主账号)给RAM用户赋予AliyunYundunGreenWebFullAccess权限,具体操作,请参见RAM授权。
开发接入:推荐使用SDK方式调用。具体信息,请参见视频审核增强版SDK及接入指南。
视频直播流审核服务包含以下3个接口:
VideoModeration:提交直播审核任务
VideoModerationResult:获取直播审核任务结果
VideoModerationCancel:取消直播审核任务
提交审核任务
接口说明
业务接口: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 | 审核服务类型。如下:
|
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编码的传输数据,以及表单参数checksum和content。 内容安全按照以下规则和格式设置checksum和content,调用您的callback接口返回检测结果。
说明 您的服务端callback接口收到内容安全推送的结果后,如果返回的HTTP状态码为200,则表示接收成功,其他的HTTP状态码均视为接收失败。接收失败时,内容安全将最多重复推送16次检测结果,直到接收成功。重复推送16次后仍未接收成功,则不再推送,建议您检查callback接口的状态。 |
seed | String | 否 | abc**** | 随机字符串,该值用于回调通知请求中的签名。 由英文字母、数字、下划线(_)组成,不超过64个字符。由您自定义,用于在接收到内容安全的回调通知时校验请求由阿里云内容安全服务发起。 说明 当使用callback时,该字段必须提供。 |
cryptType | String | 否 | SHA256 | 使用回调通知时(callback),设置对回调通知内容进行签名的算法。内容安全会将返回结果(由用户uid + seed + content拼接的字符串)按照您设置的加密算法计算签名,再发送到您的回调通知地址。取值:
|
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 | 视频直播的风险等级,根据视频画面和视频音频综合判断,返回值包括:
说明 高风险内容建议直接处置;中风险内容建议人工复查;低风险内容建议在高召回需求时再做处理,日常建议和未检测到风险做相同处理。视频画面风险分值可以在内容安全控制台配置。 |
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 | 直播画面风险等级,根据所有直播截帧计算返回,返回值包括:
|
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 | 直播截帧风险等级,根据设置的高低风险分返回,返回值包括:
说明 高风险内容建议直接处置;中风险内容建议人工复查;低风险内容建议在高召回需求时再做处理,日常建议和未检测到风险做相同处理。视频截帧风险分值可以在内容安全控制台规则配置中配置。 |
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 | 语音风险等级,根据所有音频切片计算返回,返回值包括:
|
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 | 标签详情,多个标签以逗号分隔。包含:
|
RiskLevel | String | high | 视频音频切片风险等级,返回值包括:
|
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 | 系统异常。 |