流式语音识别WebSocket API
目录
使用要求
| 项目 | 说明 |
|---|---|
| 发送格式 | 音频数据采用二进制格式,其余采用文本格式发送json数据 |
| 响应格式 | 以文本格式返回json数据 |
| 音频数据属性 | 采样率16k、单声道;使用PCM格式时,位长16bit |
| 音频格式 | PCM(无压缩的PCM或WAV音频流)、OPUS、AMR、MP3、AAC格式 采用PCM格式时,音频需满足采样率16k、位长16bit、单声道;其他格式需满足采样率16k、单声道 |
| 数据发送 | 建议音频流每160ms发送一次,每次发送160ms的数据 建立请求后,数据发送间隔不能超过10s。若长时间未发送数据(超过10s),服务会返回错误消息并结束识别 如果用户发送数据过快,可能导致引擎出现过载错误 |
服务地址与鉴权方式
外网访问地址:
wss://aibook-api.mthreads.com:62220/api/v1/asr
鉴权方式:
在URL中使用鉴权token:
wss://aibook-api.mthreads.com:62220/api/v1/asr?token=${your_token}
注意: 访问令牌(Access Token)请联系我们获取。联系方式: meng.cai@mthreads.com, ye.wang@mthreads.com
WebSocket交互流程
在流式识别中,随着用户传输数据,服务端不断返回结果,直到用户发送StopTranscription后,服务端返回TranscriptionCompleted。

注意:
- 用户发送StopTranscription之前,发送数据包的间隔需小于10s。若超过10s未发送数据,会被服务器断开连接。
- 用户发送StopTranscription后,需等待服务端返回所有剩余结果。服务端会继续处理所有已接收数据,待所有数据处理完成并将结果返回给用户后,再断开与用户的连接。
- 若用户在StopTranscription后发送任何信息,服务端都会返回错误信息。
交互流程说明
阶段1: 建立连接并设置参数
- 客户端向服务端发送开始转录(StartTranscription)的请求,在该请求中,客户端需要指定识别过程中使用的相关参数
- 服务端收到开始转录的请求后,会进行鉴权并初始化资源,完成后向客户端发送识别开始(TranscriptionStarted)的信息
- 以上步骤完成后,客户端可以开始向服务端发送待识别音频
阶段2: 实时识别
- 客户端将音频数据以二进制的形式向服务端发送
- 服务端收到二进制音频数据后,开始进行流式识别:
- 当收到新一句话开始的音频数据后,会向客户端返回一句话开始(SentenceBegin)的信息
- 当收到更多音频数据,直到识别的内容发生改变时,服务端会向客户端发送识别结果变化(SentenceChanged)的信息。在该结果中,服务端仅发送当前句子已被识别出的内容。注意:每次识别结果发生变化时,并不一定是多识别出了一个字,有可能是多了几个字或者是句子中之前的识别结果发生改变
- 在识别一句话的过程中,识别结果变化的信息会发送多次
- 服务端自动检测到一句话说完后,会向客户端发送一句话识别结束(SentenceEnd)的信息。至此,一句话的内容识别完成
- 当客户端继续发送数据时,服务端会持续进行上述步骤,即循环返回一句话开始、识别结果变化、一句话识别结束
阶段3: 停止识别
- 当客户端需要停止识别过程时,向服务端发送结束识别(StopTranscription)的请求
- 服务端停止识别并释放资源,并向客户端发送识别完成(TranscriptionCompleted)。至此整个交互过程完成。
发送请求
发送的请求主体分为文本和二进制两种格式。除发送音频数据采用二进制格式外,其余采用JSON编码的文本格式,并分为主体头(header)和主体内容(payload)两部分。
请求Header格式
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| appid | String | 是 | 用于说明当前的应用ID |
| type | String | 是 | 消息类型,用于区分当前请求的类型。可选: "StartTranscription", "StopTranscription" |
开始转录(StartTranscription)
开始识别,用于传输相关配置。其header部分如上所述,payload部分说明如下:
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| domain | String | 否 | 识别领域。默认为general(通用场景) |
| language | String | 否 | 语种。默认为cn(中文) 可选: - cn: 中文 - en: 英文 2024/6/24新增 |
| format | String | 否 | 音频编码格式,默认是无压缩、无头PCM文件,16bit采样、单声道 可选: PCM、WAV(带头WAV文件)、OPUS、MP3、AMR、AAC 采用PCM格式时,音频需满足采样率16k、位长16bit、单声道;其他格式需满足采样率16k、单声道 |
| vocabulary_id | String | 否 | 自定义热词对应的ID |
| lm_id | String | 否 | 自定义语言模型对应的ID |
| enable_punctuation | Boolean | 否 | 是否在后处理中添加标点,默认是False |
| enable_itn | Boolean | 否 | 逆文本归一化,即将识别结果中的中文数字转换阿拉伯数字。默认是False |
| remove_disfluency | Boolean | 否 | 语气词过滤,即结果顺滑,默认是False |
| enable_speaker_info | Boolean | 否 | 是否开启说话人分离功能,默认是False。该功能为True时,在一句话识别结束时,返回该句子对应的说话人ID |
| nbest | Integer | 否 | 输出结果的nbest,默认为1 |
| show_confidence | Boolean | 否 | 是否输出置信度,默认为False |
| show_words | Boolean | 否 | 是否开启返回词级别信息,默认是False |
| show_intermediate_result | Boolean | 否 | 是否返回识别过程中间结果(SentenceChanged),默认是False |
| enable_semantic_sentence_detection | Boolean | 否 | 是否开启语义断句,默认是False |
| special_word_filter | String (JSON字符串) | 否 | 敏感词过滤功能,可根据实际需求开启或关闭自定义词或默认词表。默认为空字符串,该参数支持: - null 或 未定义: 不处理 - object: 敏感词替换 - array: 敏感词替换为* |
示例:
{
"header": {
"appid": "76e81efb964447",
"type": "StartTranscription"
},
"payload": {
"format": "pcm",
"domain": "general",
"language": "cn",
"vocabulary_id": "hotword",
"lm_id": "lm",
"enable_punctuation": true,
"enable_itn": true,
"remove_disfluency": true,
"enable_speaker_info": false,
"nbest": 1,
"show_confidence": true,
"show_intermediate_result": true,
"enable_semantic_sentence_detection": true,
"special_word_filter": ""
}
}
发送音频数据(SendData)
直接发送二进制音频数据。