ASR录音文件识别接口
目录
使用 要求
| 项目 | 说明 |
|---|---|
| 请求方式 | POST |
| 响应格式 | 以文本格式返回JSON数据 |
| 音频格式 | 单通道或双通道的PCM、WAV、OPUS、MP3、MP4、M4A、WMA、AAC、OGG、AMR、FLAC、SPEEX、AC3、APE、M4R格式 采用PCM格式时,音频需满足采样率16k、位长16bit、单声道 |
| 音频大小 | 音频不超过512MB,视频不超过2GB |
| 音频时长 | 不超过5小时 |
| 转写结果保存时长 | 已完成结果保留72小时 |
| 转写结果获取次数 | 转写完成后可获取不超过100次 |
| 最大转写时间 | 最长不超过4小时 |
服务地址与鉴权方式
服务地址
所有API接口均基于以下基础URL:
https://aibook-api.mthreads.com:62220/api/v1/asr
鉴权方式
本服务采用 Bearer Token 认证方式。在每次API请求时,需要在HTTP请求头中添加 Authorization 字段:
HTTP Header 格式:
Authorization: Bearer {your_access_token}
Python示例:
import requests
# 您的访问令牌
access_token = "your_access_token_here"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
response = requests.post(
"https://aibook-api.mthreads.com:62220/api/v1/asr/submit",
headers=headers,
json=request_data
)
注意: 访问令牌(Access Token)请联系我们获取。联系方式: meng.cai@mthreads.com, ye.wang@mthreads.com
HTTP POST
交互流程
使用音频URL时

交互流程说明
阶段1:提交识别任务
客户端向服务端发送提交识别任务(Submit)的请求,并指定音频的URL;服务端收到请求后,会进行鉴权并初始化资源,并向客户端返回task_id。
当客户端在提交识别任务时设置了callback URL,服务端在完成识别后,会通过POST方式将识别结果发送到指定的URL。
阶段2:获取识别结果
客户端使用提交任务时得到的task_id,循环发送查询结果(Query)。服务端在未识别完成时会返回当前状态,在识别完成后会返回识别结果。
上传音频时

交互流程说明
阶段1:提交识别任务
客户端向服务端发送提交识别任务(Submit)的请求;服务端收到请求后,会进行鉴权并初始化资源,并向客户端返回task_id。
客户端向服务端上传音频(Upload)。当音频较大时,客户端可分块上传音频。客户端在分块上传过程中, 每次应等待服务端告知当前数据块上传成功后,再接着上传下一块数据。
当客户端上传数据完成后,向服务端发送结束上传(UploadDone)的请求,服务端开始识别。
当客户端在提交识别任务时设置了callback URL,服务端在完成识别后,会通过POST方式将识别结果发送到指定的URL。
阶段2:获取识别结果
客户端使用提交任务时得到的task_id,循环发送查询结果(Query)。服务端在未识别完成时会返回当前状态,在识别完成后会返回识别结果。
提交识别任务
请求
在HTTP Body中使用JSON格式字符串。相关参数如下:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| domain | String | 否 | 识别领域。目前仅支持general。 默认为general(通用场景) |
| language | String | 否 | 语种。目前仅支持cn 默认为cn(中文) |
| audio_type | String | 否 | 转写音频上传方式,默认为url - url:使用网络链接 - upload:使用文件上传 当使用文件上传时,客户端需要在提交识别任务的xxx时间内,开始上传音频,否则识别超时 |
| url | String | 是 | 存放录音文件的url地址 仅当audio_type=url时生效 |
| format | String | 否 | 音频编码格式,默认是WAV 可选:PCM、WAV、OPUS、MP3、MP4 、M4A、WMA、AAC、OGG、AMR、FLAC、SPEEX、AC3、APE、M4R 采用PCM格式时,仅支持采样率16k、位长16bit、单声道;其他格式支持单通道或双通道音频 |
| lm_id | String | 否 | 自定义语言模型对应的ID,默认不添加 |
| vocabulary_id | String | 否 | 自定义热词对应的ID,默认不添加 |
| enable_punctuation | Boolean | 否 | 是否在后处理中添加标点,默认是False |
| enable_itn | Boolean | 否 | 逆文本归一化,即将识别结果中的中文数字转换阿拉伯数字。默认是False |
| remove_disfluency | Boolean | 否 | 语气词过滤,即结果顺滑,默认是False |
| enable_speaker_info | Boolean | 否 | 是否开启说话人分离功能,默认是False |
| show_confidence | Boolean | 否 | 是否输出置信度,默认为False |
| show_words | Boolean | 否 | 是否开启返回词信息,默认为False |
| enable_semantic_sentence_detection | Boolean | 否 | 是否开启语义断句,默认是False |
| max_single_segment_time | Integer | 否 | 单句话允许的最长时间,单位为毫秒,默认是60000 |
| max_sentence_length | Integer | 否 | 每句话的最大字数,默认为-1,表示不启用该功能 |
| min_paragraph_length | Integer | 否 | 分段的最少字数,默认为-1,表示不启用该功能 |
| max_paragraph_length | Integer | 否 | 分段的最大字数,默认为-1,表示不启用该功能 |
| special_word_filter | String (文本化的JSON字符串) | 否 | 敏感词过滤功能,可根据实际需求开启或关闭自定义词或默认词表。默认为空字符串,该参数支持: - 空字符串:不处理 - 字典Dict:敏感词替换 - 列表List:敏感词替换为* |
| callback | String | 否 | 回调服务的地址,默认为空 当callback非空时,在识别完成后,会使用将结果POST到该URL。要求URL支持HTTP和HTTPS协议,host不可使用IP地址 |
| enable_query | Boolean | 否 | 该参数仅在callback非空时有效 如果使用回调功能并且设置enable_query=False,当服务端识别完成并调用callback后,不能再使用query接口查询结果。默认为False 若该参数设置为True,则在回调后依然允许使用query查询结果 |
| first_channel_only | Boolean | 否 | 是否只识别首个声道,默认为False |
| channel_split | Boolean | 否 | 该参数仅在first_channel_only=False时有效 当识别所有声道的内容时,是否要分轨识别。分轨识别是指,分别识别不同声道的内容。默认为False,表示将所有声道混合在一起识别。 如果为True,则会分别识别各个声道,并在结果中使用channel_id表示来源。例如,对于一条双通道音频,当channel_split=True时,将会分别识别左右声道的内容。 |
| valid_times | List | 否 | 有效时间段信息,用来排除一些不需要的时间段。 其中,valid_time参数中的每个元素说明如下: - start_time (Integer, 必填):音频段起始时间,单位为毫秒 - end_time (Integer, 必填):音频段结束时间,单位为毫秒 - channel_id (Integer, 可选):音频所属声道,默认为0 |
示例
{
"appid":"76e81efb964447",
"domain":"general",
"language":"cn",
"audio_type":"url",
"url":"https://oss.mthreads.com/test.wav",
"format":"wav",
"lm_id":0,
"vocabulary_id":0,
"enable_punctuation":true,
"enable_itn":true,
"remove_disfluency":true,
"enable_speaker_info":false,
"enable_timestamp_alignment":false,
"show_confidence":true,
"show_words":true,
"max_end_silence":800,
"enable_semantic_sentence_detection":true,
"max_single_segment_time":60000,
"max_sentence_length":-1,
"min_paragraph_length":-1,
"special_word_filter":"",
"callback":"https://callback.mthreads.com",
"enable_query":true,
"first_channel_only":false,
"channel_split":true,
"valid_times":[
{
"channel_id":0,
"start_time":0,
"end_time":60000
}
]
}
响应
返回HTTP状态码为200时,表示成功;其余为失败
| 字段 | 类型 | 说明 |
|---|---|---|
| task_id | String | 任务id |
| status | Integer | 识别状态码 |
| status_text | String | 状态说明 |
如果设置了callback,在识别结束后,服务端会向指定的URL发送HTTP POST请求。具体请求内容请参考"查询结果"部分。
示例
{
"task_id":"4c0d4443fcd34567b42e028a54400e40",
"status":1000,
"status_text":"Success."
}
上传音频
请求
仅在提交任务时指定audio_type=upload时,能使用上传音频功能。当音频文件过大时,可以每次上传一部分数据,分多次上传。
进行分块时,建议用户一次性上传不超过10M的数据。
在进行音频上传时,相关参数放在HTTPS请求行中,二进制数据放在请求体中。
HTTPS请求行
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| task_id | String | 是 | 在"提交识别任务"阶段,服务端返回的task_id |
HTTPS请求头
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Content-Type | String | 是 | 取值"application/octet-stream",表明HTTPS请求体的数据 为二进制流。 |
HTTPS请求体
待识别音频的二进制数据
示例
POST http://url/upload?task_id=68753A444D6F12269C600050E4C00067 HTTP/1.1
Content-Type: application/octet-stream;
content of audio[语音文件的二进制数据]
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| status | Integer | 识别状态码 |
| status_text | String | 状态说明 |
示例
{
"task_id":"4c0d4443fcd34567b42e028a54400e40",
"status":1000,
"status_text":"Success."
}
结束上传
请求
在完成所有音频片段的上传后,需要发送"结束上传"的请求。发送"结束上传"后,该音频进入服务端处理队列。请求参数说明:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| task_id | String | 是 | 在"提交识别任务"阶段,服务端返回的task_id |
| md5 | String | 是 | 上传文件的MD5码值,用于文件完整性校验。 |
示例
{
"task_id":"4c0d4443fcd34567b42e028a54400e40",
"md5":"cc57b89407609632014997eeb90f0c86"
}
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| status | Integer | 识别状态码 |
| status_text | String | 状态说明 |
示例
{
"status":1000,
"status_text":"Success."
}
查询结果
请求
请求体为空
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| task_id | String | 任务id |
| status | Integer | 识别状态码 除"成功"、不同的识别失败外,还包括: - 排队中 - 识别中 |
| status_text | String | 状态说明 |
| duration | Long | 识别音频总时长,单位是毫秒 仅在开始识别后显示 |
| finished_time | Integer | 已完成转写的音频时长,单位是毫秒 仅在开始识别后显示 |
| cost_time | Integer | 开始转写后的耗时,单位是毫秒 仅在识别完成后返回 |
| text | String | 识别结果 仅在识别完成后返回 |
| sentences | List | 句子级别识别结果 仅在识别完成后返回 |
句子级别结果sentences中的字段说明:
| 字段 | 类型 | 说明 |
|---|---|---|
| channel | Integer | 该句对应的音轨ID |
| start_time | Integer | 该句的起始时间 |
| end_time | Integer | 该句的结束时间 |
| text | String | 该句的识别结果 |
| speaker | Integer | 该句对应的说话人ID |
| confidence | Double | 当前句子识别结果的置信度,取值范围:[0.0,1.0]。值越大表示置信度越高。 仅在show_confidence=True时显示 |
| words | List | 该句对应的词级别信息 仅在show_words=True时显示 |
词级别信息words中的字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| text | String | 词的文本 |
| start_time | Integer | 词的起始时间,单位毫秒 |
| end_time | Integer | 词的结束时间,单位毫秒 |
示例
排队中:
{
"task_id":"4c0d4443fcd34567b42e028a54400e40",
"status":3000,
"status_text":"Queueing."
}
识别中:
{
"task_id":"4c0d4443fcd34567b42e028a54400e40",
"status":2000,
"status_text":"Processing.",
"duration":60000,
"finished_time":30000
}
识别完成:
{
"taskid":"4c0d4443fcd34567b42e028a54400e40",
"status":1000,
"status_text":"Success.",
"duration":60000,
"finished_time":60000,
"cost_time":5000,
"text":"摩尔线程",
"sentences":[
{
"channel":0,
"start_time":0,
"end_time":1500,
"text":"摩尔线程",
"speaker":0,
"confidence":0,
"words":[
{
"text":"摩",
"start_time":430,
"end_time":870
},
{
"text":"尔",
"start_time":870,
"end_time":990
},
{
"text":"线",
"start_time":990,
"end_time":1140
},
{
"text":"程",
"start_time":1140,
"end_time":1430
}
]
}
]
}
状态码
| 状态码 | 状态 消息 | 说明 |
|---|---|---|
| 1000 | success! | 成功 |
| 1001 | waiting | 排队中 |
| 1002 | running | 识别中 |
| 2001 | appid doesn't exist! | appid不存在 |
| 2002 | authorization failed. | 鉴权失败 |
| 2003 | too many requests | 并发数量过多 |
| 2004 | service overload | 数据发送过快,服务超负荷 |
| 3001 | service is busy | 服务器忙 |
| 3002 | service timeout | 服务处理超时 |
| 3003 | client is disconnected | 未完成前客户端主动断开 |
| 3004 | errors occured during processing | 识别过程中发生错误 |
| 3005 | cannot find the taskid | 任务过期,或taskid不存在 |
| 3006 | invalid audio type | audio type非法 |
| 3007 | language is not supported | 输入的语种不支持 |
| 3008 | target language is not supported | 翻译目标语种不支持 |
| 3009 | errors occured during translation | 翻译过程中发生错误 |
| 4001 | unknown parameter is given. | 输入了未知/不支持的参数 |
| 4002 | given value is invalid | 参数值非法 |
| 4003 | request invalid | 请求消息格式错误 |
| 4004 | fail to read the audio | 音频解码失败 |
| 4005 | unsupported audio format | 音频格式不支持 |
| 4006 | audio too large | 音频文件过大 |
| 4007 | audio too long | 音频时长过长 |
| 4008 | fail to download the audio file | 文件下载失败 |
| 4009 | data timeout | 发送数据超时,等待下一 包太久,导致识别结束 |
| 4010 | url is invalid | URL非法 |
| 4011 | callback url is invalid | callback URL非法 |
| 4012 | fail to check content-length | content-length 检查失败 |
| 4013 | fail to check md5 | 音频md5校验失败 |
| 4014 | fail to upload audio data | 文件上传失败或超时 |
| 4015 | duplicated upload done detected | 重复发送UploadDone |
| 4016 | duplicated start detected | 未按照规定的交互流程发送请求 |

