游戏多媒体引擎 GME3.0 语音内容安全使用指南

这篇说说腾讯云GME 3.0语音内容安全功能,支持对实时语音和语音消息进行审核,包括开通方法、配置审核回调URL与验签、音频切片投递至COS/S3/OSS,以及审核回调事件类型(1101-1106)和字段说明。 开通与配置:在GME控制台开通实时语音和语音消息场景审核,配置回调URL和验签Key。 音频切片:绑定存储桶后按15秒切片投递,路径格式为{桶}/{taskId}/{userId}/audios/{sdkap。

相关产品
游戏多媒体引擎 产品页,含版本规格、价格与购买入口。

一、场景说明

在游戏场景中,需要对音频进行切片送审。

二、计费说明

语音内容安全计费,按照时长计费,详情见:语音内容安全服务计费。

三、功能说明

开通 GME3.0内容安全功能,可对通过 GME 产生的音频内容进行内容安全处理。

四、开通方法

步骤1:进入到 腾讯云游戏多媒体引擎控制台,左侧导航栏选择语音内容安全管理。

步骤2:开通实时语音场景审核和语音消息场景审核。

五、配置审核结果回调 url 和验签 key

可以配置你的业务服务端接收审核结果的回调 url,审核结果可以及时触达到此链接。

六、验签说明

验签说明包含 实时语音审核验签说明 和 语音消息审核验签说明。

七、实时语音审核验签说明

回调密钥和验签:

我们会在回调结果的 header 里,添加 sign 字段,你可以根据签名文档进行合法性校验

签名文档和代码示例见:签名校验示例

八、音频切片文件投递

你需要绑定一个存储桶,我们会按15秒一个切片,投递到你的存储桶里,后台会将需要转存的命中文件上传到你指定的云存储平台(对象存储 COS,AWS S3 或者 阿里云 OSS)

九、访问密钥与密钥

腾讯云 COS

COS 名称 又名 作用 可见性
SecretId 访问密钥 账号标识(用户名) 可公开
SecretKey 密钥 签名密码 仅创建时可见,必须保存

查询入口:

1. 登录 腾讯云控制台。

2. 点击右上角头像,选择访问管理 CAM。

3. 左侧导航栏,选择访问密钥下的 API 密钥管理。

4. 点击新建密钥,短信验证后,生成:

·SecretId(访问密钥)

·SecretKey(密钥)

阿里云 OSS

OSS 名称 又名 作用 可见性
AccessKey ID 访问密钥 ID 账号标识(用户名) 可公开
AccessKey Secret 密钥 签名密码 仅创建时可见,必须保存

查询入口:

1. 登录阿里云控制台。

2. 点击右上角头像,选择 AccessKey 管理。

3. 选择 继续使用 AccessKey(或通过 RAM 访问控制创建子账号密钥)。

4. 点击 创建 AccessKey。

5. 完成安全验证后,页面会显示 AccessKey ID 和 AccessKey Secret。

6. 点击 下载 CSV 或直接复制保存,文件包含:

·AccessKey ID(访问密钥)

·AccessKey Secret(密钥)

AWS S3

S3名称 又名 作用 可见性
Access Key ID 访问密钥 账号标识(用户名) 可公开
Secret Access Key 密钥 签名密码 仅创建时可见,必须保存

查询入口:

1. 登录 AWS 控制台,进入 IAM。

2. 选择 Users,选择你的用户下的 Security credentials。

3. 选择 Access keys,点击 Create access key。

4. 生成后下载 CSV,里面包含:

·Access Key ID(访问密钥)

·Secret Access Key(密钥)

十、音频切片文件路径

音频切片默认命名为:

{你的桶名称}/{taskId}/{userId}/audios/{sdkappid}_{roomId}_{userid}_{UTC 时间}.ogg

字段含义说明:

字段 含义
<taskId> 审核的任务 ID。
<sdkappid> 审核任务的 SDKAppId。
<roomId> 审核的房间号。
<userid> 用户 ID。
<UTC 时间> 当前时间字符串 例如:20250106143143。

十二、审核策略

你可以编辑需要识别的策略配置。

十三、自定义词

你可以添加自定义词库,添加需要命中的关键词,精确匹配。

十四、审核回调

包含 实时语音审核回调 和 语音消息审核回调。

十五、实时语音审核回调

你可以提供一个接收回调的 HTTP/HTTPS 服务网关来订阅回调消息。当相关事件发生时,审核系统会回调事件通知到你的消息接收服务器。

事件回调消息格式:HTTP/HTTPS POST 请求发送给你的服务器,其中:

字符编码格式:UTF-8。

请求:body 格式为 JSON。

应答:HTTP status code = 200,服务端忽略应答包具体内容

为了协议友好,建议你的应答内容携带 JSON: {"code":0}。

十六、审核回调字段

事件回调消息的 body 中包含以下字段:

字段名 类型 含义
EventGroupId Number 事件组 ID, 云端审核固定为11。
EventType Number 回调通知的事件类型。
CallbackTs Number 事件回调服务器向你的服务器发出回调请求的 Unix 时间戳,单位为毫秒。
EventInfo JSON Object 事件信息。

十七、审核回调类型

事件类型说明:

字段名 类型 含义
EVENT_TYPE_CLOUD_Moderation_START 1101 云端审核模块启动。
EVENT_TYPE_CLOUD_Moderation_STOP 1102 云端审核模块退出。
EVENT_TYPE_CLOUD_Moderation_SEND_START 1103 云端审核开始送审。
EVENT_TYPE_CLOUD_Moderation_TASK_INFO 1104 审核结果回调。
EVENT_TYPE_CLOUD_Moderation_SEND_STOP 1105 云端审核结束送审。
EVENT_TYPE_CLOUD_Moderation_UPLOAD_ERROR 1106 云端审核投递模块发生错误。

事件信息说明:

字段名 类型 含义
RoomId String 房间名(类型与客户端房间号类型一致)。
EventTs Number 事件发生的 Unix 时间戳,单位为秒 (不建议使用该字段,建议使用 EventMsTs)。
EventMsTs Number 事件发生的 Unix 时间戳,单位为毫秒。
UserId String 审核机器人的用户 ID。
StreamUserId String 当前用户 ID。
TaskId String 审核任务 ID,一次云端审核任务唯一的 ID。
Payload JSONObject 根据不同事件类型定义不同。

十九、事件类型为1101 ,审核任务启动:

EVENT_TYPE_CLOUD_Moderation_START 时 Payload 的定义:

字段名 类型 含义
Status Number 0 代表审核模块启动成功,1 代表审核模块启动失败。

{ "EventGroupId": 11, "EventType": 1101, "CallbackTs": 1726125338219, "EventInfo": { "RoomId": "960025", "EventTs": 1726125338, "EventMsTs": 1726125338219, "UserId": "inspect", "TaskId": "npVqpdU7sBobiK1iskE3BwlLIebCMrbKUbnL4KrO+8oZWQndib9uvO4Deq9P1NasXGNGNuAE", "Payload": { "Status": 0 } }}

20、事件类型为1102,审核任务结束

EVENT_TYPE_CLOUD_Moderation_STOP 时 Payload 的定义:

字段名 类型 含义
LeaveCode Number 0:代表审核模块正常调用停止审核退出。1:审核机器人被客户踢出房间。2:客户解散房间。3:服务器将审核机器人踢出。4:服务器解散房间。99:代表房间内除了审核机器人没有其他用户流,超过指定时间退出。100:房间超时退出。101:同一用户重复进入相同房间导致机器人退出。

{ "EventGroupId": 11, "EventType": 1102, "CallbackTs": 1729601782073, "EventInfo": { "RoomId": "975626", "EventTs": "1729601782", "EventMsTs": 1729601782073, "UserId": "SliceTaskDuration1-partner-robot", "TaskId": "nHRjqhU7gTG0UIL-MquzG8D0Q+wehTbVTeeIIK-rO+8oZWQndibtueIpQ8A0F3n9PEVRk0rngE", "Payload": { "LeaveCode": 99 } }}

21、事件类型为1103,开始送审文件

EVENT_TYPE_CLOUD_Moderation_SEND_START 时 Payload 的定义:

字段名 类型 含义
Status Number 0:代表开始送审文件。

{ "EventGroupId": 11, "EventType": 1103, "CallbackTs": 1726750023538, "EventInfo": { "RoomId": "295210", "EventTs": 1726750023, "EventMsTs": 1726750023538, "UserId": "inspect", "TaskId": "nHwXIdU7mJvL22pFsXZ-v7OgEzq1OzbNXe9L4K-4pycoZWQndib3ZfzqN7Wq+AdiPLMBLxd0gE", "Payload": { "Status": 0 } }}

22、事件类型为1104,审核结果回调

EVENT_TYPE_CLOUD_Moderation_FILE_INFO 时 Payload 的定义:

字段名 类型 含义
DataId String 审核任务 ID。
MediaType Number 1:代表实时语音内容审核。
Suggest Number 0:建议通过。1 :建议人工复审。2:建议屏蔽。
Label String Normal:正常语音内容 Ad:广告Porn:色情Abuse:谩骂Illegal: 违禁Polity: 涉政Terror: 暴恐Sexy: 性感Moan: 呻吟/娇喘Custom: 自定义
Audio String 用户桶音频路径。
AudioText String 音频识别文本。
CheckDetail 对象 审核详细结果。
Keywords []String 关键词。
Rate Number 置信度分数;示例值:100

23、CheckDetail 的定义

字段名 类型 含义
Label String Normal:正常语音内容。Ad:广告。Porn:色情。Abuse:谩骂。Illegal: 违禁。Polity: 涉政。Terror: 暴恐。Sexy: 性感。Moan: 呻吟/娇喘。Custom: 自定义。
Keywords []string 关键词
Desc String 二级标签
Score Number 置信度分数;示例值:100
Suggest Number 0:建议通过。1:建议人工复审。2:建议屏蔽。

音频审核结果示例

{ "EventGroupId": 11, "EventType": 1104, "CallbackTs": 1726750309161, "EventInfo": { "RoomId": "963239", "EventTs": 1735872251, "EventMsTs": 1735872251524, "UserId": "TRTCModerationCase2-user0", "StreamerUserId": "SliceCustomUploadCase6-user0", "TaskId": "-m9lm+lU7tOlL2mFgsPuzHeyNThbhZzbJlKQI4K-raO8oZWQndibARGYcSDohF0Zfgo7RNCuGQE.", "Payload": { "DataId": "547512114953106866", "RequestId": "", "MediaType": 1, "Suggest": 2, "Label": "Polity", "Image": "", "Rate": 100, "Audio": "https://x.xx.com/-m9lm+lU7tOlL2mFgsPuzHeyNThbhZzbJlKQI4K-raO8oZWQndibARGYcSDohF0Zfgo7RNCuGQE./547512114835666354.ogg", "AudioText": "XXX认真听取讲解,观看反映延安时期重大战役运筹指挥情况的历史图表,感悟党中央和中央军委的领导智慧和艺术。", "CheckDetail": [ { "Label": "Polity", "Suggest": 2, "Keywords": [ "XXX" ], "Score": 100, "Desc": "", "AudioSegments": {}, "ImageLocation": {} } ] } }}

24、事件类型为1105,结束文件送审

EVENT_TYPE_CLOUD_Moderation_SEND_STOP 时 Payload 的定义:

字段名 类型 含义
Status Number 结束送审。

{ "EventGroupId": 11, "EventType": 1105, "CallbackTs": 1726751347072, "EventInfo": { "RoomId": "295211", "EventTs": 1726751347, "EventMsTs": 1726751347072, "UserId": "inspect", "TaskId": "-nHwXIdU7jx6C00Nt8Vr+3h4GwYdP7zbeHi9L4K-4pycoZWQndibqFeEaV4LvjFqSuQvaAkrNQE.", "Payload": { "Status": 0 } }}

25、事件类型为1106,投递文件失败

EVENT_TYPE_CLOUD_Moderation_SEND_ERROR 时 Payload 的定义:

字段名 类型 含义
Code Number COS 或者第三方存储错误码。
Message String COS 或者第三方存储错误消息。

{ "EventGroupId": 11, "EventType": 1106, "CallbackTs": 1726751347072, "EventInfo": { "RoomId": "295211", "EventTs": 1726751347, "EventMsTs": 1726751347072, "UserId": "inspect", "TaskId": "-nHwXIdU7jx6C00Nt8Vr+3h4GwYdP7zbeHi9L4K-4pycoZWQndibqFeEaV4LvjFqSuQvaAkrNQE.", "Payload": { "Code": 10002, "Message": "BadRequest" } }}

26、语音消息

语音消息和实时语音是两个不同的功能,语音消息审核结果除了在语音消息接口里直接返回 audit_result 字段外,还会回调你配置的服务端回调 url

27、语音消息审核验签说明

审核回调结构体 sign 字段是待验签的字段

步骤1:组成待签名的字符串

//待签名字符串body: "biz_id=" +biz_id + "&audit_res=" +audit_res+ "&DataId=" + DataId + "&Label=" + Label

步骤2:使用 sha256签名算法签名

func createSignature(signKey string, body string) string { mac := hmac.New(sha256.New, []byte(signKey)) mac.Write([]byte(body)) sha := hex.EncodeToString(mac.Sum(nil)) return sha}

28、语音审核结果回调

字段定义:

名称 类型 描述
user_id Number 业务方玩家用户 ID。
player_uin String 业务方玩家用户 ID,字符串类型。
biz_id Number GME Sdkappid。
sign String 签名字符串。
audit_res Number 审核状态,对应如下:1:审核完成。2:审核中。3:语言不支持。4:没有勾选该语言送审。
DataId String 数据唯一标识。
HitFlag Boolean 是否违规:true 违规,false 不违规。
Label String 审核结果标签,对应如下:normal:正常音频内容。politics:政治。porn:色情。abuse:谩骂。ad:广告。illegal:违法。terrorism: 暴恐。moan: 呻吟/娇喘。customized:自定义词库。
AsrText String 语音转文本结果。
ScanDetail Array of ScanDetail 包含语音消息的审核结果和违规内容。
RequestId String 唯一请求 ID,用于跟踪查询问题。

29、ScanDetail 字段说明:

名称 类型 描述
Label String 审核结果标签,对应如下:normal:正常文本。politics:政治。porn:色情。abuse:谩骂。ad:广告。illegal:违法。terrorism: 暴恐。moan: 呻吟/娇喘。customized:自定义词库。
KeyWords []String 命中关键词。
Rate String 置信度分数。示例值:100
StartTime Number 违规事件结束时间,单位为秒(s)。示例值:15
EndTime Number 违规事件结束时间,单位为秒(s)。示例值:15

{ "user_id": 9920413420219, "player_uin": "9920413420219", "biz_id": 1400367018, "sign": "f7067c7020dc384879f273738f76319235d94aef60b7d83cec575a300e548199", "audit_res": 1, "DataId": "A1A3E84F-4C9A-4A51-B7EC-10DFBC49959F", "HitFlag": true, "Label": "porn", "AsrText": "怎么,还想你的奶了?", "ScanDetail": [ { "Label": "porn", "Rate": "72", "StartTime": 0, "EndTime": 0 } ], "RequestId": "a61df1f6-e0e2-4a5b-805c-e277463d7bc3"}

赞 (0)
上一篇 4天前
下一篇 4天前