本文介绍如何在你的项目中使用数美视频审核。
云市场视频审核采用 SDK 截图 + 三方审核的模式。集成声网视频 SDK 后,你可以对声网频道内的视频流使用第三方视频审核服务。当频道内有用户发送视频流时,审核结果会由第三方服务器直接返回到你的服务器。具体流程如下:
你可以在声网控制台自助开通视频审核服务,并且配置第三方云存储、回调地址等信息。具体步骤参考视频截图上传。
第三方视频审核服务需要使用特定版本的声网视频 SDK。你可以根据需要选择 SDK 版本并参考对应的集成文档:
视频 SDK 版本 | 下载链接 | 参考文档 |
---|---|---|
4.2.3 或以上(推荐) | ||
3.x 特殊版 |
本节以 Android 平台为例,介绍如何对单个频道内的视频流进行审核。
加入频道并发布视频流后,调用 enableContentInspect
方法开启视频审核。成功开启视频审核后,SDK 会按照设定的频率进行截图,然后上传截图至声网云端服务器,再加密传输到第三方审核服务商。
调用 enableContentInspect
方法时,你需要通过 ContentInspectConfig
的以下参数配置视频审核服务:
ContentInspectModule.type
:必须设为 CONTENT_INSPECT_TYPE_IMAGE_MODERATION
。ContentInspectModule.interval
:从视频流中截图并送审的时间间隔。serverConfig
:(可选)用于接入多个云市场的视频审核服务并灵活切换。如果需要使用该功能,请联系技术支持。extraInfo
:(可选)附加信息,随审核结果回调一起发送给你的服务器。示例代码如下:
ContentInspectConfig config = new ContentInspectConfig();
config.extraInfo = "YourExtraInfo";
config.moduleCount = 1;
// 设置功能模块的类型为 SDK 端截图并且使用云市场视频审核服务对视频流审核
config.modules[0].type = ContentInspectConfig.CONTENT_INSPECT_TYPE_IMAGE_MODERATION;
// 设置视频截图上传的频率为 2 秒一次
config.modules[0].interval = 2;
mRtcEngine.enableContentInspect(true, config);
iOS 平台的方法名稍有不同,示例代码如下:
let inspectExtraConfig = AgoraContentInspectConfig()
inspectExtraConfig.extraInfo = "YourExtraInfo"
var modules = [AgoraContentInspectModule]()
let module1 = AgoraContentInspectModule()
// 设置功能模块的类型为 SDK 端截图并且使用云市场视频审核服务对视频流审核
module1.type = .imageModeration
// 设置视频截图上传的频率为 2 秒一次
module1.interval = 2
modules.append(module1)
inspectExtraConfig.modules = modules
agoraKit.enableContentInspect(true, config:inspectExtraConfig)
审核结果中的 passThrough
字段一定包含以下公共参数:
参数 | 类型 | 描述 |
---|---|---|
source |
String | 固定为 "agora" ,代表审核内容是来自声网频道内的视频流。 |
cname |
String | 审核结果对应的频道名。 |
uid |
Int | 审核结果对应的用户 ID。 |
sid |
String | 审核结果对应的用户会话。用户从加入到退出当前频道视为一次会话。 |
requestId |
String | 请求 ID,用于标识声网向第三方服务商发送的审核请求。 |
timestamp |
Int | 审核结果对应片段的起始时间点。格式为 UTC 时间,时区为 UTC+0,由年、月、日、小时、分钟、秒和毫秒组成。例如:20230110080616876 代表 2023 年 1 月 10 日 8 点 6 分 16 秒 876 毫秒。 |
其它参数解释请参考数美智能图片识别接口文档。
完整的回调示例如下:
{
"requestId": "0a2c2bcd2ecccd812e38aed725c36285",
"code": 1100,
"message": "成功",
"riskLevel": "REVIEW",
"riskLabel1": "porn",
"riskLabel2": "luolu",
"riskLabel3": "luoluzhedian",
"riskDescription": "色情:裸露:裸露遮点",
"riskDetail": {
"riskSource": 1002
},
"auxInfo": {
"segments": 1,
"typeVersion": {},
"passThrough": {
"callbackData": "test-callbackData",
"cname": "test-cname",
"requestId": "B05EE55820AF449EBC007EB1E17A450F",
"sid": "B05EE55820AF449EBC007EB1E17A4511",
"source": "agora",
"timestamp": 20230110101016650,
"uid": 123456
}
},
"allLabels": [
{
"probability": 0.633300781252751,
"riskDescription": "色情:裸露:裸露遮点",
"riskDetail": {
"riskSource": 1002
},
"riskLabel1": "porn",
"riskLabel2": "luolu",
"riskLabel3": "luoluzhedian",
"riskLevel": "REVIEW"
}
],
"tokenLabels": {
"UGC_account_risk": {}
}
}
1. 为什么审核内容要先发送到服务端,审核结果也要先返回给服务端?
声网采用“服务端——服务端”的传输方案,主要有两个原因:
2. 从频道内截取的内容由谁存储?
第三方审核供应商会提供 OSS 存储服务。