同声传译 API 文档
接口说明
-
同声传译(simultaneous interpretation)流式接口,可以将音频流实时翻译为不同语种的文本,并输对应的音频内容,广泛应用于国际论坛、智能会议、智慧教育、跨国交流等场景。
-
部分接口demo如下,其他开发语言请参照 接口调用流程 进行开发,也欢迎热心的开发者到 讯飞开放平台社区 分享你们的demo。
同声传译 demo java语言
同声传译 demo python语言 -
集成同声传译API时,需按照以下要求:
内容 | 说明 |
---|---|
传输方式 | ws[s] (为提高安全性,强烈推荐wss) |
请求地址 |
[ws(s)]: //ws-api.xf-yun.com/v1/private/simult_interpretation
注:服务器IP不固定,为保证您的接口稳定,请勿通过指定IP的方式调用接口,使用域名方式调用 |
请求行 | GET /v1/private/simult_interpretation HTTP/1.1 |
接口鉴权 | 签名机制,详情请参照下方 鉴权说明 |
字符编码 | UTF-8 |
响应格式 | 统一采用JSON格式 |
开发语言 | 任意,只要可以向讯飞云服务发起WebSocket请求的均可 |
适用范围 | 任意操作系统,但因不支持跨域不适用于浏览器 |
音频属性 | 采样率16k、位长16、单声道 |
音频格式 | pcm |
数据发送 | 建议音频流每40ms发送1280字节 |
语言种类 | 支持中文普通话同声传译为英文发音 |
鉴权认证
在调用业务接口时,请求方需要对请求进行签名,服务端通过签名来校验请求的合法性。
通过在请求地址后面加上鉴权相关参数的方式,
请注意影响鉴权结果的值有url、apiSecret、apiKey、date,如果调试鉴权,请务必按照示例中给的值进行调试
,具体参数如下:
http示例url:
https://ws-api.xf-yun.com/v1/private/simultaneous_translation?authorization=YXBpX2tleT0iYXBpa2V5WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgiLCBhbGdvcml0aG09ImhtYWMtc2hhMjU2IiwgaGVhZGVycz0iaG9zdCBkYXRlIHJlcXVlc3QtbGluZSIsIHNpZ25hdHVyZT0iWkIvWXprQnUwTUV5NEhONVMyd0xQRGxPdGVVK01oQjZ3aWRNaCszNnhLMD0i&host=ws-api.xf-yun.com&date=Mon%2C+13+Dec+2021+03%3A37%3A23+GMT&serviceId=simult_interpretation
鉴权参数:
参数 | 类型 | 必须 | 说明 | 示例 |
---|---|---|---|---|
host | string | 是 | 请求主机 | itrans.xf-yun.com |
date | string | 是 | 当前时间戳,RFC1123格式("EEE, dd MMM yyyy HH:mm:ss z") | Mon, 13 Dec 2021 03:37:23 GMT |
authorization | string | 是 | 使用base64编码的签名相关信息(签名基于hamc-sha256计算) | 参考下方详细生成规则 |
• date参数生成规则:
date必须是UTC+0或GMT时区,RFC1123格式(Mon, 13 Dec 2021 03:37:23 GMT)。
服务端会对date进行时钟偏移检查,最大允许300秒的偏差,超出偏差的请求都将被拒绝。
• authorization参数生成格式:
1)获取接口密钥APIKey 和 APISecret。
在讯飞开放平台控制台,创建一个应用后打开同声传译页面可以获取,均为32位字符串。
2)参数authorization base64编码前(authorization_origin)的格式如下。
api_key="$api_key",algorithm="hmac-sha256",headers="host date request-line",signature="$signature"
其中 api_key 是在控制台获取的APIKey,algorithm 是加密算法(仅支持hmac-sha256),headers 是参与签名的参数(见下方注释)。
signature 是使用加密算法对参与签名的参数签名后并使用base64编码的字符串,详见下方。
注: headers是参与签名的参数,请注意是固定的参数名("host date request-line"),而非这些参数的值。
3)signature的原始字段(signature_origin)规则如下。
signature原始字段由 host,date,request-line三个参数按照格式拼接成,
拼接的格式为(\n为换行符,’:’后面有一个空格):
host: $host\ndate: $date\n$request-line
假设
请求url = "https://ws-api.xf-yun.com/v1/private/simultaneous_translation"
date = "Mon, 13 Dec 2021 03:37:23 GMT"
那么 signature原始字段(signature_origin)则为:
host: ws-api.xf-yun.com
date: Mon, 13 Dec 2021 03:37:23 GMT
GET /v1/private/simultaneous_translation HTTP/1.1
4)使用hmac-sha256算法结合apiSecret对signature_origin签名,获得签名后的摘要signature_sha。
signature_sha=hmac-sha256(signature_origin,$apiSecret)
其中 apiSecret 是在控制台获取的APISecret
5)使用base64编码对signature_sha进行编码获得最终的signature。
signature=base64(signature_sha)
假设
APISecret = "apisecretXXXXXXXXXXXXXXXXXXXXXXX"
date = "Mon, 13 Dec 2021 03:37:23 GMT"
则signature为
signature="ZB/YzkBu0MEy4HN5S2wLPDlOteU+MhB6widMh+36xK0="
6)根据以上信息拼接authorization base64编码前(authorization_origin)的字符串,示例如下。
api_key="apikeyXXXXXXXXXXXXXXXXXXXXXXXXXX", algorithm="hmac-sha256", headers="host date request-line", signature="ZB/YzkBu0MEy4HN5S2wLPDlOteU+MhB6widMh+36xK0="
注:
headers是参与签名的参数,请注意是固定的参数名("host date request-line"),而非这些参数的值。
7)最后再对authorization_origin进行base64编码获得最终的authorization参数。
authorization = base64(authorization_origin)
示例结果为:
authorization=YXBpX2tleT0iYXBpa2V5WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgiLCBhbGdvcml0aG09ImhtYWMtc2hhMjU2IiwgaGVhZGVycz0iaG9zdCBkYXRlIHJlcXVlc3QtbGluZSIsIHNpZ25hdHVyZT0iWkIvWXprQnUwTUV5NEhONVMyd0xQRGxPdGVVK01oQjZ3aWRNaCszNnhLMD0i
鉴权结果
如果鉴权失败,则根据不同错误类型返回不同HTTP Code状态码,同时携带错误描述信息,详细错误说明如下:
HTTP Code | 说明 | 错误描述信息 | 解决方法 |
---|---|---|---|
401 | 缺少authorization参数 | {"message":"Unauthorized"} | 检查是否有authorization参数,详情见 authorization参数详细生成规则 |
401 | 签名参数解析失败 | {“message”:”HMAC signature cannot be verified”} | 检查签名的各个参数是否有缺失是否正确,特别确认下复制的 api_key 是否正确 |
401 | 签名校验失败 | {“message”:”HMAC signature does not match”} | 签名验证失败,可能原因有很多。 1. 检查api_key,api_secret 是否正确。 2.检查计算签名的参数host,date,request-line是否按照协议要求拼接。 3. 检查signature签名的base64长度是否正常(正常44个字节)。 |
403 | 时钟偏移校验失败 | {“message”:”HMAC signature cannot be verified, a valid date or x-date header is required for HMAC Authentication”} | 检查服务器时间是否标准,相差5分钟以上会报此错误 |
时钟偏移校验失败示例:
HTTP/1.1 403 Forbidden
Date: Mon, 30 Nov 2020 02:34:33 GMT
Content-Length: 116
Content-Type: text/plain; charset=utf-8
"message": "HMAC signature does not match, a valid date or x-date header is required for HMAC Authentication"
请求参数
在调用业务接口时,都需要在 Http Request Body 中配置以下参数,请求数据均为json字符串。
请注意status的第一次请求取值为0,中间请求取值为1,最后一次请求取值为2。
请求参数示例:
{
"header": {
"app_id":"your_app_id",
"status": 0,
"parameter": {
"ist": {
"accent": "mandarin",
"domain": "ist_ed_open",
"language": "zh_cn",
"vto": 15000,
"eos": 150000
"streamtrans": {
"from": "cn",
"to": "en"
"tts": {
"vcn": "x2_john",
"tts_results": {
"encoding": "raw",
"sample_rate": 16000,
"channels": 1,
"bit_depth": 16,
"frame_size": 0
"payload": {
"data": {
"audio": "JiuY3iK9AAB...",
"encoding": "raw",
"sample_rate": 16000,
"seq": 1,
"status": 0
请求参数说明:
参数名 | 类型 | 必传 | 描述 |
---|---|---|---|
header | object | 是 | 用于上传平台参数 |
header.app_id | string | 是 | 在讯飞开放平台申请的appid信息 |
header.status | int | 是 |
流式接口请求状态,可选值为:0,1,2。
第一次请求值为0 中间请求值为1 最后一次请求值为2 |
parameter | object | 是 | 用于上传服务特性参数 |
parameter.ist | object | 是 | 用于上传功能参数 |
parameter.ist.language | string | 是 | 转写语种,可选值:zh_cn |
parameter.ist.language_type | int | 否 |
语言过滤筛选
1:中英文模式,中文英文均可识别(默认) 2:中文模式,可识别出简单英文 3:英文模式,只识别出英文 4:纯中文模式,只识别出中文 注意:中文引擎支持该参数,其他语言不支持。 |
parameter.ist.domain | string | 是 | 应用领域,可选值:ist_ed_open |
parameter.ist.accent | srting | 是 | 口音取值范围,目前固定为mandarin |
parameter.ist.eos | int | 否 |
用于设置端点检测的静默时间,单位是毫秒。
即静默多长时间后引擎认为音频结束,取值范围0~99999999 |
parameter.ist.vto | int | 否 | vad强切控制,单位毫秒,默认15000 |
parameter.ist.nunum | int | 否 |
将返回结果的数字格式规则为阿拉伯数字格式,默认开启
0:关闭 1:开启 |
parameter.streamtrans | object | 是 | 功能参数 |
parameter.streamtrans.from | string | 是 | 源语种 |
parameter.streamtrans.to | string | 是 | 目标语种 |
parameter.tts | object | 是 | tts功能参数 |
parameter.tts.vcn | string | 是 |
对应同传发音人,有以下可选值:
英文女性:x2_catherine 英文男性:x2_john 成年女性:x2_xiaoguo 成年男性:x2_xiaozhong 儿童女声:x2_xiaofang_cts 童声开心:x2_mengmenghappy 童声自然:x2_mengmengnetural |
parameter.tts.tts_results | object | 是 | 合成响应数据 |
parameter.tts.tts_results.encoding | string | 否 |
音频编码,注意更改生成文件的后缀(如.pcm或.mp3),可选值:
raw:合成pcm音频 lame:合成mp3音频 |
parameter.tts.tts_results.sample_rate | int | 否 | 采样率,可选值:16000 |
parameter.tts.tts_results.channels | int | 否 | 声道数,可选值:1 |
parameter.tts.tts_results.bit_depth | int | 否 | 位深,可选值:16 |
payload | object | 是 | 数据段,携带请求的数据 |
payload.data | object | 是 | 输入的音频数据格式 |
payload.data.audio | string | 是 | base64编码后输入的音频数据,数据大小建议保持在:0~10M |
payload.data.encoding | string | 是 | 音频编码,可选值:raw (代表pcm音频) |
payload.data.sample_rate | int | 是 | 音频采样率,可选值:16000 |
payload.data.seq | int | 是 | 标明数据为第几块,取值范围:0~9999999 |
payload.data.status | int | 是 |
数据状态:
0:开始 1:继续 2:结束 |
返回结果
如出现错误码,可到
这里
查询。
返回参数示例(识别响应):
{
"header": {
"code": 0,
"message": "success",
"sid": "aso000e287f@hu17db2d3721205c3882",
"status": 1
"payload": {
"recognition_results": {
"format": "json",
"status": 1,
"text": "eyJiZyI6MjAw...",
"encoding": "utf8"
text字段Base64解码后示例(识别响应):
{
"bg": 200,
"ed": 800,
"ls": false,
"pgs": "rpl",
"rg": [
"sn": 2,
"sub_end": false,
"ws": [
"bg": 20,
"cw": [
"rl": 0,
"sc": 0,
"w": "科大讯飞",
"wb": 20,
"wc": 0,
"we": 40,
"wp": "n"
"bg": 40,
"cw": [
"rl": 0,
"sc": 0,
"w": "是",
"wb": 40,
"wc": 0,
"we": 60,
"wp": "n"
返回参数示例(翻译响应):
{
"header": {
"code": 0,
"message": "success",
"sid": "aso000de6a1@hu17b90e965460212882",
"status": 1
"payload": {
"streamtrans_results": {
"text": "eyJzcmMiOiLkuID...",
"seq": "5",
"status": 1,
"encoding": "utf8",
"format": "json",
"compress": "raw"
text字段Base64解码后示例(翻译响应):
{
"src": "一个面向全球的中文学习爱好者的一个",
"dst": " A global Chinese learningenthusiasts for a",
"wb": 10,
"we": 2480,
"is_final": 0
返回参数示例(合成响应):
{
"header": {
"code": 0,
"message": "success",
"sid": "aso000de6a1@hu17b90e965460212882",
"status": 1
"payload": {
"tts_results": {
"encoding": "raw",
"channels": "1",
"id": "2",
"seq": "3",
"audio": "wRUal1l021bJlzu1wI...",
"sample_rate": "16000",
"status": "1",
"bit_depth": "16",
"type": "0",
"ced": "68"
audio字段为合成后的音频片段,采用base64编码,base64解码后写到文件即可。
返回参数说明(识别):
参数名 | 类型 | 描述 |
---|---|---|
header | object | 用于描述平台特性的参数 |
header.code | int |
0表示会话调用成功(并不一定表示服务调用成功,服务是否调用成功以text字段为准)
其它表示会话调用异常,详情请参考 错误码 |
header.message | string | 描述信息 |
header.sid | string | 本次会话唯一标识id |
header.status | int |
流式接口响应状态,可选值为:0,1,2。
第一次响应值为0 中间响应值为1 最后一次响应值为2 |
payload | object | 数据段,用于携带响应的数据 |
payload.recognition_results | object | 识别响应数据块 |
payload.recognition_results.text | string | 响应结果,采用base64编码。长度范围:0~1000000 |
payload.recognition_results.format | string | 文本格式 |
payload.recognition_results.encoding | string | 文本编码 |
payload.recognition_results.status | int |
数据状态
0:开始 1:继续 2:结束 |
text字段base64解码后信息如下(识别),请重点关注:
参数名 | 类型 | 描述 |
---|---|---|
bg | int | 本次输入对应的开始时间戳 |
ed | int | 本次输入对应的结束时间戳 |
sn | int | 返回结果的序号 |
pgs | string | 取值为"apd"时表示该片结果是追加到前面的最终结果,取值 为"rpl" 时表示替换前面的部分结果,替换范围为rg字段。默认值为0 |
rg | array | 替换范围 |
sub_end | bool | 字句是否结果 |
ls | bool | 是否是最后一片结果 |
wb | int | 词在本句中的开始时间,单位是帧,中间结果的wb为0 |
we | int | 词在本句中的结束时间,单位是帧,中间结果的we为0 |
wp | string |
词标识
n-普通词 s-顺滑词(语气词) p-标点 |
w | string | 词识别结果 |
返回参数说明(翻译):
参数名 | 类型 | 描述 |
---|---|---|
header | object | 用于描述平台特性的参数 |
header.code | int |
0表示会话调用成功(并不一定表示服务调用成功,服务是否调用成功以text字段为准)
其它表示会话调用异常,详情请参考 错误码 |
header.message | string | 描述信息 |
header.sid | string | 本次会话唯一标识id |
header.status | int |
流式接口响应状态,可选值为:0,1,2。
第一次响应值为0 中间响应值为1 最后一次响应值为2 |
payload | object | 数据段,用于携带响应的数据 |
payload.streamtrans_results | object | 翻译结果 |
payload.streamtrans_results.text | string | 文本数据,响应结果,采用base64编码 |
payload.streamtrans_results.encoding | string | 文本编码 |
payload.streamtrans_results.format | string | 文本格式 |
payload.streamtrans_results.status | int |
数据状态
0:开始 1:继续 2:结束 |
text字段base64解码后信息如下(翻译),请重点关注:
参数名 | 类型 | 描述 |
---|---|---|
src | string | 原文本 |
dst | string | 目标文本 |
wb | int | 起始偏移量,本次结果对应的开始时间戳,识别结果第一个字符相对原始音频绝对时间戳的偏移时间,单位是毫秒 |
we | int | 结束偏移量,本次结果对应的结束时间戳,识别结果第一个字符相对原始音频绝对时间戳的偏移时间,单位是毫秒 |
is_final | int |
本次结果是否是最终结果
中间结果:0 确定结果:1 |
返回参数说明(合成):
参数名 | 类型 | 描述 |
---|---|---|
header | string | 用于描述平台特性的参数 |
header.code | int |
0表示会话调用成功(并不一定表示服务调用成功,服务是否调用成功以text字段为准)
其它表示会话调用异常,详情请参考 错误码 |
header.message | string | 描述信息 |
header.sid | Object | 本次会话唯一标识id |
header.status | int |
流式接口响应状态,可选值为:0,1,2。
第一次响应值为0 中间响应值为1 最后一次响应值为2 |
payload | obejct | 数据段,用于携带响应的数据 |
payload.tts_results | object | 合成结果 |
payload.tts_results.encoding | string |
音频编码,注意更改生成文件的后缀(如.pcm或.mp3),可选值:
raw:合成pcm音频 lame:合成mp3音频 |
payload.tts_results.sample_rate | int | 采样率,可选值:16000 |
payload.tts_results.channels | int | 声道数,可选值:1 |
payload.tts_results.bit_depth | int | 位深,可选值:16 |
payload.tts_results.status | int |
数据状态
0:开始 1:继续 2:结束 |
payload.tts_results.seq | int | 数据序号,标明数据为第几块 。取值范围:0~9999999 |
payload.tts_results.audio | string | 响应结果,采用base64编码。长度范围:0~1000000 |
payload.tts_results.frame_size | int | 帧大小,取值范围0~1024 |
常见问题
同声传译的主要功能是什么?
答:可将不限时长的音频流实时识别并转译成指定的语种和发音。
同声传译支持什么语言?
答:目前支持中文-英文的互译,其他语种后续会开放,敬请关注平台动态。
同声传译支持什么应用平台?
答:目前支持WebAPI应用平台。
同声传译对音频有什么要求吗?
答:采样率为16k、采样深度为16bit、单声道的pcm格式的音频。
是否支持源语种的自动识别?
答:目前暂不支持。