请求接口#

音频流检测接口,可协助您识别音频中的涉政、色情、广告、暴恐等风险;同时可结合您的业务场景,识别未成年、音色、等内容。

接口说明#

该接口用于提交音频流鉴定等相关信息,稳定拉流后将持续回调对应的识别结果至指定的callback地址。

拉流重试机制#

为防止网络异常导致的拉流失败问题发生,数美音频流服务设置了拉流失败后的重试机制,具体机制如下: 普通rtmp、http、hls流会重试12次,第一次间隔5秒,第二次间隔10秒,以此类推,最大间隔不超过60秒 通过声网SDK录制方式拉流,重试2次,间隔为0 通过即构SDK录制方式拉流,重试10次,每次重试间隔30秒

超时时间#

建议超时时间:建议设置5秒。

回调机制#

当用户收到推送结果,并返回HTTP状态码为200时,表示推送成功;否则系统将进行最多20次推送。

请求#

请求地址#

集群请求地址支持产品列表
上海http://api-audiostream-sh.fengkongcloud.com/audiostream/v4中文、阿语
硅谷http://api-audiostream-gg.fengkongcloud.com/audiostream/v4中文、国际化
新加坡http://api-audiostream-xjp.fengkongcloud.com/audiostream/v4中文、国际化

请求参数#

参数名称类型参数说明是否必传规范
accessKeystring公司密钥由数美提供,具体内容见邮件
appIdstring应用标识用于区分应用 需要联系数美服务开通,请使用数美单独提供的传值为准 ,默认内容见邮件
eventIdstring事件标识区分场景数据 需要联系数美服务开通,请使用数美单独提供的传值为准 ,默认内容见邮件
typestring检测的风险类型businesstype和type必传其一可选值:监管功能 POLITY:涉政识别 EROTIC:色情识别 ADVERT:广告识别 BAN:违禁识别 VIOLENT:暴恐识别 MOAN:娇喘识别 AUDIOPOLITICAL:一号领导人声纹识别 ANTHEN:国歌识别 DIRTY:辱骂识别 ADLAW:广告法识别 SING:唱歌识别 MINOR:未成年人识别 BANEDAUDIO:违禁歌曲 COPYRIGHTSONGS:版权歌曲 VOICE:人声属性(伪造人声) 如需做组合识别,通过下划线连接即可,例如POLITY_EROTIC_MOAN 涉政、色情和娇喘识别,涉政、色情、辱骂、广告识别指的是语义内容的风险检测
businessTypestring业务标签businesstype和type必传其一可选值:业务标签的一、二、三级标签 GENDER:性别识别 AGE:年龄识别 TIMBRE:音色识别 SING:唱歌识别 LANGUAGE:语种识别 VOICE:人声属性 AUDIOSCENE:声音场景 如需识别音色、唱歌、语种GENDER必传
datajson_object请求的数据内容本次请求相关信息,最长1MB
tokenIdstring用户账号标识用于区分用户账号,建议传入用户ID
btIdstring音频唯一标识用于查询指定音频,限长128位字符
streamTypestring流类型可选值: NORMAL:普通流地址,目前支持rtmp、rtmps、hls、http、https协议,支持flv,m3u8等格式 ZEGO:即构 AGORA:声网 TRTC:腾讯录制 VOLC:火山引擎录制 GIN:巨人录制 ALI:阿里录制 注意:使用RTC的SDK录制方案时,会在RTC侧产生额外录制费用,具体请咨询相关厂商
urlstring直播流地址当streamType为NORMAL时必传
langstring音频流语言类型可选值(默认zh): zh:中文 en:英文 ar:阿拉伯语 hi:印地语 es:西班牙语 fr:法语 ru:俄语 pt:葡萄牙语 id:印尼语 de:德语 ja:日语 tr:土耳其语 vi:越南语 it:意大利语 th:泰语 tl:菲律宾语 ko:韩语 ms:马来语 [集群支持语种详见 请求URL支持语种](#language)
zegoParamjson_object要检测的流参数当streamType为ZEGO时必传
tokenIdstring身份验证信息获取zego的identify_token用于登录,生成方式详见zego文档:https://doc-zh.zego.im/article/15258。注意tokenId唯一标识审核请求,每次请求都需要重新生成。
streamIdstring音频流编号音频流编号,唯一对应一路音频流,streamId与roomId至少传入其中之一。
roomIdstring房间编号唯一对应一个房间。
isMixingEnabledbool录制模式录制模式 true:合流,房间内所有用户合成一路流录制审核。此时如果streamId与roomId单独存在时则单独生效;但当streamId与roomId同时存在时,则以streamId为有效值。 false:分流,房间内每个用户单独录制审核。此时roomId为必传,且以roomId为有效值。同时streamId不可以传入。
initDomainint即构SDK初始化是否有设置隔离域名当即构客户端init初始化支持隔离域名和随机userId该字段必传 可选值: 0:默认版本 1:仅支持客户端初始化有隔离域名 2:支持客户端初始化有隔离域名和随机userId功能 3:更新SDK,修复一些bug 4:支持客户自定义传入SEI信息 5:支持vad静音检测,token会有唯一性校验,每次上传鉴黄必须重新生成 6:房间维度拉流送审模式下,开发者可以控制某条流是否需要送审 推荐使用6进行接入;默认值为0
trtcParamjson_object腾讯录制参数当streamType为TRTC时必传,详见扩展参数
sdkAppIdint腾讯提供的sdkAppId
demoSencesint录制类型可选值:分流录制:2;合流录制:4
userIdstring分配给录制端的userId,限制长度为32bit,只允许包含(a-zA-Z),数字(0-9)以及下划线和连词符
uidstring指定需要审核的用户ID,如果不传该参数,则默认拉取并审核房间中所有推流用户的流。如果需要审核同一房间内的一部分用户,请使用不同的录制端userId和userSig分多次请求。注意区分此参数和userId的区别。
userSigstring录制userId对应的验证签名,相当于登录密码
roomIdint房间号码,取值范围:1-4294967294。roomId与strRoomId必传一个,若两者都有值优先选用roomId
strRoomIdstring房间号码,取值说明:只允许包含(a-zA-Z),数字(0-9)以及下划线和连词符。若您选用strRoomId时,需注意strRoomId和roomId两者都有值优先选用roomId
agoraParamjson_object声网流参数当streamType为AGORA时必传,详见agoraParam参数
appIdstring声网提供的appId注意与数美的appId区分开
channelstring声网提供的频道名
tokenstring安全要求较高的用户可以使用token进行认证,生成方式详见声网文档:https://docs.agora.io/cn/Recording/token_server?platform=CPP。建议将token的有效期设置超过频道的持续时间,防止token失效导致无法拉流。当前声网支持的最大token有效期为24小时,因此当频道持续时间超过24小时的时候,需要处理token失效的问题。处理方法:在请求参数中设置开启音频流结束回调通知(设置returnFinishInfo为1)。当回调接收到审核结束通知(statCode为1),并且原因是由于拉流的token无效或过期(auxInfo下errorCode状态码返回3005),如果频道仍然存在并且需要继续审核,则生成新的token,将频道重新送审。
uidint用户ID32位无符号整数,当token存在时,必须提供生成token时所使用的用户ID。注意,此处需要区别实际房间中的用户uid,提供给服务端录制所用的uid不允许在房间中存在
isMixingEnabledbool单流/合流录制。默认值为true。true: 合流;false: 分流。合流是指一个直播房间一路流;分流是指一个麦位一路流。
channelProfileint声网录制的频道模式通信,常见的1对1单聊或群聊,频道内任何用户可以自由说话;直播,有两种用户角色:主播和观众,可选值如下(默认值为0):0: 通信;1: 直播
subscribeModestring订阅模式AUTO: 自动订阅房间内的所有流,不设置subscribeMode时候的默认行为;UNTRUSTED: 配合untrustedUserIdList只订阅该列表指定的用户流,仅在声网分流里生效;TRUSTED: 配合trustedUserIdList只订阅该列表以外的用户流,仅在声网分流中生效
trustedUserIdListstring_array信任用户的列表subscribeMode=TRUSTED时生效,允许为空,数美不会订阅房间内该列表指定的用户流。其中每个元素uid的范围应为uint32的范围,但类型为string。例如:["123","456"]
untrustedUserIdListstring_array非信任用户的列表subscribeMode=UNTRUSTED时生效,不允许为空,数美只订阅房间内该列表指定的用户流。其中每个元素uid的范围应为uint32的范围,但类型为string。例如:["123","456"]
volcParamjson_object火山流参数当streamType为VOLC时必传,详见volcParam参数
appIdstring火山引擎提供的appId注意与数美的appId区分开
roomIdstring房间号
tokenstring火山引擎token详见:https://www.volcengine.com/docs/6348/70121
userIdstring分配给录制端的userId
subscribeModestring订阅模式AUTO: 自动订阅房间内的所有流,不设置subscribeMode时候的默认行为。 UNTRUSTED: 配合untrustedUserIdList只订阅该列表指定的用户流,此种模式下如果untrustedUserIdList列表为空,参数错误,因为无法订阅任何流。 TRUSTED: 配合trustedUserIdList只订阅该列表以外的用户流,此种模式下如果一定时间下没有untrustedUserIdList名单外的用户进入房间,数美将主动结束审核。
trustedUserIdListstring_array信任用户的列表subscribeMode=TRUSTED时生效,允许为空,数美不会订阅房间内该列表指定的用户流。
untrustedUserIdListstring_array非信任用户的列表subscribeMode=UNTRUSTED时生效,不允许为空,数美只订阅房间内该列表指定的用户流。
ginParamjson_object巨人流参数当streamType为GIN时必传,详见ginParam参数
tokenIdstring房间token用于拉流端登陆房间,需要巨人提供
roomIdstring房间编号唯一对应一个房间,服务端以房间为单位拉流录制
isMixingEnabledbool单流/合流录制。默认值为true。true: 合流;false: 分流,合流是指房间内所有用户合成一路流录制审核;分流是指房间内每个用户单独录制审核.
ipstring指定服务器ip
portstring指定端口
aliParamjson_object阿里流参数当streamType为ALI时必传
tokenstring鉴权用于拉流端加入频道,生成方式详见文档:https://help.aliyun.com/zh/live/user-guide/token-based-authentication,每次上传审核都需要重新生成新的token。
roomstring房间ID必传参数,非空字符串,需要和生成token使用的channelID完全一致。服务端以房间为单位拉流录制。room为唯一标志,相同的room不会重复拉流。
userIdstring拉流机器人ID,。需要和生成token的userId完全一致,必传参数,非空字符串
isMixingEnabledbool录制模式。默认值为true。true: 合流;false: 分流。true:合流,房间内所有用户合成一路流录制审核;false:分流,房间内每个用户单独录制审核。
returnPreTextint是否返回违规音频流片段的前文文字信息可选值:0(默认):不返回违规片段前文;1:返回违规片段前文
returnPreAudioint是否返回违规音频流片段的前文音频链接可选值:0(默认):不返回违规片段前文音频;1:返回违规片段前文音频
returnFinishInfoint音频流结束回调通知可选值:0(默认):审核结束时不发送结束通知; 1:审核结束时发起结束通知,回调参数增加statCode状态码 建议传入1(默认值为0,在流结束时不会产生回调)
returnAllTextint返回音频片段的等级可选值如下(默认为0): 0:返回风险等级为非pass的音频片段 1:返回所有风险等级的音频片段 建议传入1 (默认为0,在静音的情况下不会产生回调)
extrajson_object辅助参数用于辅助音频检测的相关信息
passThroughjson_object透传字段该字段内容会随着回调结果一起返回
liveTitlestring标题房间标题(人审服务时传入)
anchorNamestring昵称用户昵称(人审服务时传入)
audioDetectStepint抽帧审核步长取值范围1-36,默认每片段均审核;设置1审核奇数片段,2审核每三片段一次,以此类推
receiveTokenIdstring消息接收者tokenId(私聊场景)由字母、数字、下划线、短杠组成,长度≤64字符
deviceIdstring数美设备标识
ipstring用户公网IP地址支持IPv4或IPv6
levelint用户等级0:最低级(新注册/不活跃用户);1:较低级;2:中等级;3:较高级;4:最高级(VIP/付费用户)
genderstring用户性别可选值:male(男性),female(女性)
callbackstring回调地址异步检测结果回调通知您的URL,支持HTTP和HTTPS
acceptLangstring返回标签的语种类型选择返回标签的语种类型 可选值: zh:中文 en:英文 不传入默认为返回中文标签

响应#

返回参数#

以下参数,除code、message、requestId以外,其他必返参数均为在code返回1100时为必返。

参数名称类型参数说明是否必返规范
requestIdstring本次请求的唯一标识请求唯一标识
codeint请求返回码1100:成功 1901:QPS超限、流路数超限 1902:参数不合法 1903:服务失败 1904:拉流失败 9101:无权限操作
messagestring请求返回描述和请求返回码对应
detailjson_object描述详细信息描述错误码请求,详见detail参数
errorCodeint状态码1001:重复推流
dupRequestIdstring表示重复的requestId当errorCode为1001,表示重复推流时,会返回dupRequestId字段。例如当第一次请求的时候没有收到返回,但该音频流实际已经开始审核了,没有requestId无法主动关闭审核。可以再次请求,收到重复推流的信息,通过返回的dupRequestId调用关闭审核接口

回调参数#

当音频流稳定接入开始接受数美监测后,数美会持续回调识别结果给客户,回调策略根据returnAllText的取值不同而不同。 returnAllText为0时,监测到音频流有违规内容时回调结果给客户; returnAllText为1时,每隔10秒返回一次最近10秒的识别结果给客户 放在HTTP Body中,采用Json格式,具体参数如下

参数名称类型参数说明是否必返规范
requestIdstring本次请求的唯一标识流片段唯一标识
btIdstring音频唯一标识
codeint请求返回码1100:成功 1901:QPS超限、流路数超 限1902:参数不合法 1903:服务失败 1904:拉流失败 9101:无权限操作 message和requestId之外的字段,只有当code为1100时才会存在
messagestring请求返回描述,和请求返回码对应
statCodeint审核状态0:审核中 1:审核结束
requestParamsjson_object审核结束透传参数
audioDetailjson_object风险音频片段信息当code等于1100时返回。
audioUrlstring音频片段地址
riskLevelstring当前事件的处置建议PASS:通过 REVIEW:审核 REJECT:拒绝
riskLabel1string一级标签各个一级标签之间是并列的关系,当riskLevel为PASS时返回normal
riskLabel2string二级标签二级标签归属于一级标签,当riskLevel为PASS时为空
riskLabel3string三级标签三级标签归属于二级标签,当riskLevel为PASS时为空
riskDescriptionstring标签解释对于命中用户自定义名单时返回:命中自定义名单 当riskLevel为PASS时返回正常 其他情况展现形式为一级标签:二级标签:三级标签的中文名,仅供人了解风险原因时作为参考,程序请勿依赖该参数的值做逻辑处理
audioTextstring音频转译文本的结果当returnPreText值为1时,包含违规音频前一个片段文本内容和违规音频片段文本内容 当returnPreText值为0时,仅包含违规音频片段文本内容
preAudioUrlstring前一个音频片段音频地址当returnPreAudio值为1时,返回当前片段与前一片段的20秒音频片段地址 returnPreAudio值为0时,不返回
riskDetailjson_object风险详情信息当code等于1100时返回
audioTextstring音频转译文本的结果
matchedListsjson_array命中的客户自定义名单信息命中客户自定义名单时返回,其他时不存在
namestring客户自定义名单名
wordsjson_array命中的这个名单中的敏感词信息下标从0开始计数
wordstring敏感词
positionint_array敏感词所在位置下标从0开始计数
riskSourceint风险来源可选值: 1000:无风险 1001:文本风险 1003:音频风险
riskSegmentsjson_array高风险内容片段在涉政、暴恐、违禁、竞品、广告法等功能的时候存在
segmentstring高风险内容片段
positionint_array高风险内容片段所在位置下标从0开始计数
auxInfojson_object其他辅助信息返回时间戳等辅助信息
audioStartTimestring辅助参数违规内容开始时间(绝对时间)
audioEndTimestring辅助参数违规内容结束时间(绝对时间)
beginProcessTimeint辅助参数开始处理的时间(13位时间戳)
finishProcessTimeint辅助参数结束处理的时间(13位时间戳)
userIdint用户账号标识AGORA分流情况下存在。返回的userId是实际房间中的用户id,与请求参数agoraParam中的uid无关。
strUserIdstring用户账号标识ALI、TRTC、ZEGO、VOLC、GIN分流情况下存在。返回的strUserId是实际房间中的用户id。当流类型为TRTC分流,与请求参数trtcParam中的uid无关;当流类型为ALI分流,与请求参数aliParam中的userId无关。
roomstring房间号
seiInfoarraySEI信息(需要联系数美开通)
passThroughjson_object透传字段该字段内容与请求参数data中extra的passThrough的值相同
businessLabelsjson_array音频业务标签返回性别、音色、是否唱歌等标签
businessLabel1string一级业务标签一级业务标签
businessLabel2string二级业务标签二级业务标签
businessLabel3string三级业务标签三级业务标签
businessDescriptionstring中文标签描述业务标签描述,仅供人了解风险原因时作为参考,程序请勿依赖该参数的值做逻辑处理
allLabelsjson_array风险标签全部风险标签
riskLabel1string一级风险标签一级风险标签
riskLabel2string二级风险标签二级风险标签
riskLabel3string三级风险标签三级风险标签
riskDescriptionstring风险原因风险原因,仅供人了解风险原因时作为参考,程序请勿依赖该参数的值做逻辑处理
tokenProfileLabelsjson_array账号属性标签仅在开启功能时返回
label1string一级标签
label2string二级标签
label3string三级标签
descriptionstring标签描述账号标签描述,仅供人了解风险原因时作为参考,程序请勿依赖该参数的值做逻辑处理
timestampint打标签时间戳13位Unix时间戳,单位:毫秒
tokenRiskLabelsjson_array账号风险标签仅在开启功能时返回
label1string一级标签
label2string二级标签
label3string三级标签
descriptionstring标签描述账号标签描述,仅供人了解风险原因时作为参考,程序请勿依赖该参数的值做逻辑处理
timestampint打标签时间戳13位Unix时间戳,单位:毫秒
speakersjson_array该音频片段说话人信息该音频片段中说话人uid以及音量信息,每秒采集一次,一个片段不超过10次。该结构是个数组,最多10个元素,按照相对时间排序,每个元素也是一个数组,包含当前说话人uid和音量大小 备注:目前仅在声网合流中生效
uidint说话人uid
volumeint音量大小取值范围为 [0,255]
vadCodeint该音频片段的静音状态0:静音片段 1:非静音片段
audioTagsjson_object音频标签返回性别、音色、是否唱歌等标签
genderjson_object性别标签当type取值包含GENDER时返回
labelstring性别标签名称可能取值:男性、女性
probabilityint对应性别可能性大小取值0-100,数值越高表示概率越大
timbrejson_array音色标签当type取值包含TIMBRE时返回
labelstring音色标签类别可能取值:大叔、青年、正太、老年、女王、御姐、少女、萝莉、大妈
probabilityint对应音色标签可能性大小取值0-100,数值越高表示概率越大
songint唱歌标签当type取值包含SING时返回 可能取值: 0:没有唱歌 1:有唱歌
languagejson_object语种识别当type取值包含LANGUAGE时返回
labelint语种识别类别标识可能取值: 0:普通话 1:英语 2:粤语 3:藏语 4:维语 5:蒙语 6:朝鲜语 -1:其他语种
probabilityint对应音色标签可能性大小取值0-100,数值越高表示概率越大
auxInfojson_object辅助信息
errorCodeint状态码3001:流地址访问失败,例如资源HTTP状态码404、403 3002:流数据无效,例如“Invalid data found when processing input” 3003:流不存在,例如zego返回197612错误码 3004:流未返回音频数据 3005:拉流token无效或过期,建议使用新token重新开启审核,例如声网token过期或者trtc usersig无效
streamTimeint流审核时长流结束后最后一次返回,代表送审时长,如有间隔审核逻辑时,和流真实时长可能不一致

示例#

请求示例#

{
"accessKey": "xxxxx",
"appId": "default",
"eventId": "default",
"type": "EROTIC_ADVERT_POLITY_DIRTY",
"businessType": "GENDER_TIMBRE_SING_LANGUAGE",
"callback": "xxxxx",
"data": {
"btId": "test1",
"lang": "zh",
"room": "room2",
"url": "xxxxx",
"streamType": "NORMAL",
"returnAllText": 1,
"returnPreText": 1,
"returnPreAudio": 1,
"tokenId": "2222"
}
}

返回示例#

{
"code": 1100,
"message": "成功",
"requestId": "b639042cbfe229359e672074762c5583"
}

回调示例#

{
"requestId": "b639042cbfe229359e672074762c5583_2",
"btid": "1637847086612",
"code": 1100,
"message": "成功",
"audioDetail": {
"audioTags": {
"gender": {
"label": "男性",
"probability": 99
},
"language": [
{
"label": 0,
"probability": 99
},
{
"label": 1,
"probability": 0
}
],
"song": 0,
"timbre": [
{
"label": "大叔",
"probability": 7
},
{
"label": "青年",
"probability": 34
},
{
"label": "老年",
"probability": 58
},
{
"label": "正太",
"probability": 0
}
]
},
"audioText": "那就不好打吗?所以所以他小龙让掉也是合情合理。还要看这条,先锋啊,下一个节奏点可能就是个先锋,但这个先锋的时候,苏宁其实是可以打正面团战了,谢谢毛主任一直都",
"audioUrl": "https://bj-voice-mp3-1251671073.cos.ap-beijing.myqcloud.com/MP3%2F20211125%2Fb639042cbfe229359e672074762c5583_2.mp3?q-sign-algorithm=sha1&q-ak=AKIDcCe4LVKKzUvBIEtb2NZbS8lGblkbmoFW&q-sign-time=1637847114%3B1637847234&q-key-time=1637847114%3B1637847234&q-header-list=host&q-url-param-list=&q-signature=c0f9a66334bc00e1d92da40974756b9b4b9e7b26",
"auxInfo": {
"beginProcessTime": 1637847113897,
"finishProcessTime": 1637847114514,
"room": "test1"
},
"businessLabels": [
{
"businessDescription": "未成年人:未成年人:未成年人",
"businessLabel1": "minor",
"businessLabel2": "weichengnianren",
"businessLabel3": "weichengnianren",
"confidenceLevel": 0,
"probability": 0
}
],
"preAudioUrl": "https://bj-voice-mp3-1251671073.cos.ap-beijing.myqcloud.com/MP3%2F20211125%2Fb639042cbfe229359e672074762c5583_2_pre.mp3?q-sign-algorithm=sha1&q-ak=AKIDcCe4LVKKzUvBIEtb2NZbS8lGblkbmoFW&q-sign-time=1637847114%3B1637847234&q-key-time=1637847114%3B1637847234&q-header-list=host&q-url-param-list=&q-signature=3a261ca2e46b32ec218be69a5802ec0e04c2c627",
"riskDescription": "正常",
"riskDetail": {
"audioText": "那就不好打吗?所以所以他小龙让掉也是合情合理。还要看这条,先锋啊,下一个节奏点可能就是个先锋,但这个先锋的时候,苏宁其实是可以打正面团战了,谢谢毛主任一直都"
},
"riskLabel1": "normal",
"riskLabel2": "normal",
"riskLabel3": "normal",
"riskLevel": "REJECT",
"speakers": [
[
{
"uid": 2,
"volume": 100
},
{
"uid": 1,
"volume": 255
},
{
"uid": 3,
"volume": 50
}
],
[
{
"uid": 2,
"volume": 200
},
{
"uid": 3,
"volume": 50
}
],
[
{
"uid": 4,
"volume": 255
}
]
]
}
}

在线咨询