2024/07/31 16:51:23
使用数美视频审核
本文介绍如何在你的项目中使用数美视频审核。
技术原理
云市场视频审核采用 SDK 截图 + 三方审核的模式。集成声网视频 SDK 后,你可以对声网频道内的视频流使用第三方视频审核服务。当频道内有用户发送视频流时,审核结果会由第三方服务器直接返回到你的服务器。具体流程如下:
- 声网 SDK 从频道内的视频流中截取内容,加密传输至声网服务器。
- 声网服务器对视频流信息进行封装,然后加密传输至第三方审核服务商。
- 第三方审核服务商将声网视频流信息和审核结果返回到你的回调服务器。
- 根据审核结果添加业务逻辑。
信息
你需要自行准备接收审核结果回调的业务服务器。
实现步骤
1. 集成 SDK
第三方视频审核服务需要使用特殊版本的声网视频 SDK。你可以根据需要选择 SDK 版本并参考对应的集成文档:
视频 SDK 版本 | 下载链接 | 参考文档 |
---|---|---|
4.2.3 或以上(推荐) | iOS SDK 下载 | 实现视频通话 |
3.x 特殊版 | iOS SDK 下载 | 实现视频通话 |
注意
实现视频通话时,请确保使用 AccessToken2 加入声网频道。详见使用 Token 鉴权。
2. 开始审核
本节介绍如何对单个频道内的视频流进行审核。
加入频道并发布视频流后,调用 enableContentInspect
方法开启视频审核。成功开启视频审核后,SDK 会按照设定的频率进行截图。截图将会由声网云端服务器加密传输到第三方审核服务商。
调用 enableContentInspect
方法时,你需要通过 AgoraContentInspectConfig
的以下参数配置视频审核服务:
AgoraContentInspectModule.type
:必须设为AgoraContentInspectTypeSupervise
。AgoraContentInspectModule.interval
:从视频流中截图并送审的时间间隔。serverConfig
:(可选)用于接入多个云市场的视频审核服务并灵活切换。如果需要使用该功能,请联系技术支持。extraInfo
:(可选)附加信息,随审核结果回调一起发送给你的服务器。
示例代码如下:
Swift
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)
3. 接收审核结果
审核结果中的 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 毫秒。 |
其它参数解释请参考数美智能图片识别接口文档。
完整的回调示例如下:
JSON
{
"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": {}
}
}
API 参考
setImageModeration常见问题
问题 1:为什么审核内容要先发送到服务端,审核结果也要先返回给服务端?
声网采用“服务端——服务端”的传输方案,主要有两个原因:
- 保障服务的安全性,客户端容易被监听。
- 方便自行控制业务逻辑。例如:你可以在业务服务器接收到内容违规的审核结果时,对客户端进行关闭频道、UI 提示、禁言、扣分等操作。