实现音视频安全检测
更新时间: 2024/03/25 11:00:41
本文介绍音视频通话2.0接入安全通的步骤。
背景介绍
泛娱乐类音视频聊天场景中,充斥着各种不可控的风险因素,例如色情、暴恐和涉政信息等。随着国家监管的日趋严格,各平台需要对平台的音视频内容进行管控,自行处理音视频内容审核需要投入大量人力进行甄别。 网易云信融合网易易盾的内容审核能力,为开发者提供实时音视频安全通(内容安全审核)服务(以下简称安全通),对音视频内容进行有效的判别和筛选,降低人力投入。
视频讲解
功能介绍
安全通是基于实时音视频通话的内容审核及处理功能。安全通的基础功能包含:
- 创建安全通审核任务
- 查询审核视频截图
- 查询审核音频断句
- 停止安全通审核任务
- 接收安全审核结果
- 处理安全审核结果
基于实时音视频通话内容,实现全流程的“审-查-禁”服务功能。
操作流程
安全通服务支持音视频2.0 全终端接入检测,无论您使用的是什么平台,接入流程一致。
功能实现
步骤一 准备工作
接入安全通之前,请确保已完成以下准备工作:
- 登录云信控制台创建应用、申请开通音视频通话 2.0 服务和安全通服务。具体步骤请参见音视频通话2.0接入流程和开通安全通服务。
- 实现基础的音视频通话功能,具体操作步骤请参见实现音视频通话。
- 准备接收抄送消息的服务器公网地址,并配置消息抄送。配置方法请参见开通消息抄送。审核结果会以消息抄送发送至您预留的抄送地址。
- 配置内容检测相关规则。在安全通功能页面,单击右上角的更多安全配置,配置安全检测策略。具体步骤请参见开通安全通服务。
- 准备音视频通话开发环境。
步骤二 创建音视频通话
-
(可选)创建房间,传入指定的房间名及用户ID。
如果已存在音视频通话的房间,您也可以直接加入音视频通话的房间。
例如,房间名为 neteasetest ,用户ID为 12345 。示例代码如下:
curl --location --request POST 'https://logic-dev.netease.im/v2/api/room' \ --header 'AppKey: ***' \ //请使用您应用的appkey --header 'Nonce: ***' \ //随机数,最大长度为 128 个字符。 --header 'CurTime: 1639555317' \ //当前 Unix 时间戳,即从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的秒数。数据类型为 String。 --header 'CheckSum: ba193e4d4ba3991987eb72afe692095598552b79' \ //计算方式详见:https://doc.yunxin.163.com/nertc/server-apis/TA5MjEzNTM?platformId=50326 --header 'Content-Type: application/json' \ --data-raw '{ "channelName": "neteasetest", "mode": 2, "uid": 12345 }'
返回示例如下:
{ "code": 200, "errmsg": "reason code 200", //code 200即为创建成功,其他状态码请参考 https://doc.yunxin.163.com/nertc/server-apis/DY2NDIwMTM?platformId=50326 "cid": 1344424603797473 }
-
建立音视频通话。
为了方便演示,本文以Web端进行音视频通话,传入与创建房间时相同的房间名,建立音视频通话。
this.client.join({ channelName: "neteasetest", //房间名 uid: 12345, //用户id token: '' //鉴权token,详见:https://doc.yunxin.163.com/nertc/server-apis/TQ0MTI2ODQ?platformId=50002 });
步骤三 创建安全通审核任务
- 创建安全通审核任务之前,请确保房间已创建且房间中已有一名以上成员。
- 安全通审核任务的开始和结束,都是针对房间。
为对应房间开启安全通审核任务,具体步骤请参见创建安全通审核任务。
您可根据自身业务选择是否开启自动打码,详细信息请参见安全通审核自动打码。
示例代码如下:
curl --location --request POST 'https://logic-dev.netease.im/livewallsolution/submit' \
--header 'AppKey: ***' \ //请使用您应用的appkey
--header 'Nonce: ***' \ //随机数,最大长度为 128 个字符。
--header 'CurTime: 1639555317' \ //当前 Unix 时间戳,即从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的秒数。数据类型为 String。
--header 'CheckSum: ba193e4d4ba3991987eb72afe692095598552b79' \ //计算方式详见:https://doc.yunxin.163.com/nertc/server-apis/TA5MjEzNTM?platformId=50326
--header 'Content-Type: application/json' \
--data-raw '{
"monitorUid": 666666,
"channelName": "neteasetest",
"detectType": 0,
"scFrequency": 5,
"callbackUrl": "***", //接收审核任务的地址,详见2.1
"enableMask": true, //开启自动打码
"maskType": 0,
"duration": 15
}'
返回示例如下:
{
"code": 200,
"result": {
"taskId": "***", //审核任务id,用于后续审核任务的详情查询
"status": true,
"dataId": "235979990138017090111639568801012" //网易云信为您自动生成的数据唯一标识。如果您对检测结果有任何疑问,请根据 dataId 咨询技术支持。
}
}
至此,您的音视频通话即正式进入审核阶段。
步骤四 接收安全审核结果
-
实现审核结果接收服务。
在准备工作中,我们已配置了接收抄送消息的服务器公网地址,安全审核过程中,会将异常行为实时回调到您配置的地址中,您需要在该地址中实现对应审核消息的接收。 PHP 解析抄送内容的相关示例请参见[KB0304] PHP解析网易服务器抄送和回调的Header和Body示例 。
在本次演示中,以实现最简单的抄送内容接收及打印为例。
public String robot(@RequestBody String msg) { logger.info(msg); System.out.println(msg); return "robot"; }
当音视频内容没有违规内容时,不会触发审核抄送。只有在音视频内容有违规问题时,才会触发具体异常详情抄送,具体请参见安全通审核事件。
-
模拟触发违规内容。
在进行通话之前,提前配置部分敏感词作为审核过滤条件。
在视频通话中,模拟相关的视频内容。
-
接收审核结果。
触发违规内容后,您配置的接收抄送服务的地址,就能收到该次通话相关的审核结果。以下示例代码展示了视频相关的审核结果,音频也可以进行同步审核。审核结果字段说明请参见 安全通审核事件字段说明。
{ "data": { "dataId": "235979990138***568801012", "callback": "", "channelName": "neteasetest", "evidences": { "video": { "evidence": { "uid": 12345, "beginTime": 1639569545356, "endTime": 1639569545356, "type": 1, "url": "https://yidun-video.nos-eastchina1.126.net/ur9j7xwis91ejyprqsuilchg04009rez_12345_1639569545374.jpg? Signature=GR%2FQRk37f8k7ukRVLkeTtZiQWNfRMEx%2BL0uIeogAQ5M%3D&Expires=1642161545&NOSAccessKeyId=7b107844ee8e4f9689d54c726e3273ff" }, "labels": [{ "subLabels": [{ "subLabel": 400017, "rate": 1.0, "details": { "hitInfos": ["好好学习"], "hitLocationInfos": [{ "y1": 0.33333334, "x1": 0.20926562, "y2": 0.56666666, "x2": 0.7454219, "hitInfo": "好好学习" }], "imageListInfos": [{ "type": 2, "word": "好好学习" }] } }], "level": 2, "rate": 1.0, "label": 400 }] } }, "censorSource": 2, "channelId": 1344424***7473, "taskId": "ur9j7xwis91ejyprq****009rez", "status": 101 }, "eventType": 400 }
步骤五 处理安全审核结果。
1.移除成员。
发现通话存在违规只是安全审核的第一步,接下来需要处理安全审核的结果。在配置安全策略时,您可以根据您具体的业务情况,来辨别审核力度。
针对审核结果,每个业务会有不同的策略,或是在客户端弹出相关提示,或是直接结束该通通话。
云信的音视频通话提供房间管理的相关服务端 API 接口,可以对房间内的成员进行移除,或是对整个房间进行关闭。
以下示例代码以移除违规房间成员为例,服务端移除成员的接口说明请参见移除成员。
curl --location --request POST 'https://logic-dev.netease.im/v3/api/kicklist/members?cname=neteasetest1&uid=12345' \
--header 'AppKey: ***' \ //请使用您应用的appkey
--header 'Nonce: ***' \ //随机数,最大长度为 128 个字符。
--header 'CurTime: 1639555317' \ //当前 Unix 时间戳,即从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的秒数。数据类型为 String。
--header 'CheckSum: ba193e4d4ba3991987eb72afe692095598552b79' \ //计算方式详见:https://doc.yunxin.163.com/nertc/server-apis/TA5MjEzNTM?platformId=50326
--header 'Content-Type: application/json' \
--data-raw ''
该请求无返回结果,HTTP 200表示请求成功。
2.客户端处理。
客户端会收到被移除房间的回调,以 Web 端为例:
this.client.on('client-banned', (event) => {
logger.log('peer-leave', event);
message.error('你已被踢出房间');
});
步骤六 结束审核任务。
完成音视频通话的安全审核后,您需要结束该通话频道的审核任务。具体接口说明请参见 停止安全通审核任务。
示例代码如下:
curl --location --request POST 'https://logic-dev.netease.im/livewallsolution/feedback' \
--header 'AppKey: ***' \ //请使用您应用的appkey
--header 'Nonce: ***' \ //随机数,最大长度为 128 个字符。
--header 'CurTime: 1639555317' \ //当前 Unix 时间戳,即从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的秒数。数据类型为 String。
--header 'CheckSum: ba193e4d4ba3991987eb72afe692095598552b79' \ //计算方式详见:https://doc.yunxin.163.com/nertc/server-apis/TA5MjEzNTM?platformId=50326
--header 'Content-Type: application/json' \
--data-raw '{
"realTimeInfoList": [
{
"channelName": "neteasetest",
"status": 100
}
]
}'
返回示例如下:
{
"code": 200,
"result": [
{
"channelName": "neteasetest",
"result": 0,
"taskId": "ur9j7xwis91ejyprqsuilchg04009rez"
}
]
}