2024/07/31 16:51:23
使用数美视频审核
本文介绍如何在你的项目中使用数美视频审核。
技术原理
云市场视频审核采用 SDK 截图 + 三方审核的模式。集成声网视频 SDK 后,你可以对声网频道内的视频流使用第三方视频审核服务。当频道内有用户发送视频流时,审核结果会由第三方服务器直接返回到你的服务器。具体流程如下:
- 声网 SDK 从频道内的视频流中截取内容,加密传输至声网服务器。
- 声网服务器对视频流信息进行封装,然后加密传输至第三方审核服务商。
- 第三方审核服务商将声网视频流信息和审核结果返回到你的回调服务器。
- 根据审核结果添加业务逻辑。
信息
你需要自行准备接收审核结果回调的业务服务器。
实现步骤
1. 集成 SDK
第三方视频审核服务需要使用特殊版本的声网视频 SDK。你可以根据需要选择 SDK 版本并参考对应的集成文档:
视频 SDK 版本 | 下载链接 | 参考文档 |
---|---|---|
4.19.0 或以上 | Web SDK 下载 | 实现视频通话 |
注意
实现视频通话时,请确保使用 AccessToken2 加入声网频道。详见使用 Token 鉴权。
2. 开始审核
本节介绍如何对单个频道内的视频流进行审核。
加入频道并发布视频流后,确保已经调用 play
在页面上播放本地视频轨道,再调用 setImageModeration
方法开启视频审核。成功开启视频审核后,SDK 会按照设定的频率进行截图,截图将会由声网云端服务器加密传输到第三方审核服务商。
调用 setImageModeration
方法时,你需要通过 ImageModerationConfiguration
的以下属性配置视频审核服务:
属性 | 类型 | 描述 |
---|---|---|
interval | Number | 从视频流中截图并送审的时间间隔 (ms),最小值为 1000。 |
extraInfo | String | (可选)附加信息,最大长度为 1024 字节。SDK 会将附加信息和截图一起上传至声网服务器;截图并上传完成后,附加信息将会随回调通知一起发送给你的服务器。 |
示例代码如下:
JavaScript
// 定义 imageModerationConfig 配置对象
const imageModerationConfig = {
interval: 2000, // 设置视频截图的时间间隔为 2000 毫秒(2秒),最小值为 1000
extraInfo: "This is some additional information for content inspection." // (可选)添加附加信息
};
// 调用 setImageModeration 方法并传入 imageModerationConfig
client.setImageModeration(true, imageModerationConfig)
.then(() => {
console.log("Content inspection enabled successfully.");
})
.catch(error => {
console.error("Failed to enable content inspection:", error);
});
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 提示、禁言、扣分等操作。