通过 Android 或 iOS NUI SDK 上传本地录音文件,使用录音文件识别极速版获取转写结果。本文介绍服务地址、调用流程、请求参数和响应字段。
前提条件与使用限制
已开通录音文件识别极速版商用服务。极速版不支持试用,开通、计费及并发限制请参见录音文件识别极速版接口说明。
已获取项目 Appkey 和有效的 NLS Token,分别参见管理项目和获取 Token。识别语种和模型在项目中配置,所选模型应与音频语种匹配。
音频格式支持 WAV、MP3、AAC、MP4、OPUS。文件大小不超过 100 MB,时长不超过 2 小时。
AccessKey ID 和 AccessKey Secret 应保存在服务端,不得写入 App 代码或存储在移动端。由服务端获取 NLS Token 后下发给 App,并在 Token 过期前更新。初始化参数包含凭证,不应将完整参数写入日志。
获取 SDK
从移动端 SDK 选择与下载获取支持录音文件识别的 SDK 包,并按该页核对兼容性和合规使用要求。包内录音文件识别示例为 Android 的 FileTranscriberActivity.java 和 iOS 的 FileTranscriberViewController.m。
具体集成和代码示例请参见Android SDK和iOS SDK。
SDK V2.6.2 起,纯云端功能不需要复制资源文件或设置 workspace。
服务地址
SDK 初始化时通过 url 设置服务地址。移动设备通过公网接入;VPC 内网地址用于具备对应地域 VPC 网络访问条件的运行环境。
|
访问方式 |
地域 |
URL |
|
公网 |
上海 |
|
|
北京 |
|
|
|
深圳 |
|
|
|
VPC 内网 |
上海 |
|
|
北京 |
|
|
|
深圳 |
|
Host 为 URL 的域名部分,例如上海公网地址对应 nls-gateway-cn-shanghai.aliyuncs.com。
上海、北京、深圳地域的 ECS 实例可通过同地域 VPC 内网地址访问,经典网络不支持内网访问语音服务。使用内网地址时采用 HTTP 协议,Host 同时改为对应内网域名;该方式不产生 ECS 实例的公网流量费用。
调用流程
下图展示 Android SDK 和 iOS SDK 的交互流程。
创建 SDK 实例并设置录音文件识别回调,使用 Appkey、NLS Token、服务地址和设备标识初始化 SDK。
设置识别参数。
nls_config可以通过参数设置接口配置,也可以在启动任务的参数中传入。传入本地音频文件的绝对路径并启动任务。接口返回
0表示调用成功;识别结果通过EVENT_FILE_TRANS_RESULT回调返回,发生错误时收到EVENT_ASR_ERROR。处理识别结果,不再使用 SDK 时释放资源。初始化、启动和释放等同步调用应在非 UI 线程执行。
两端的调用接口如下。
Android
使用 NativeNui 实例,并实现 INativeFileTransCallback。
|
操作 |
接口 |
|
初始化 |
|
|
设置参数 |
|
|
启动任务 |
|
|
释放资源 |
|
结果和错误通过以下回调返回:
void onFileTransEventCallback(Constants.NuiEvent event, int resultCode,
int finish, AsrResult asrResult, String taskId);
AsrResult.asrResult 包含识别响应 JSON;resultCode 为 SDK 错误码,finish 表示任务是否结束。
iOS
使用 NeoNui 实例,并设置实现 NeoNuiSdkDelegate 的 delegate。
|
操作 |
接口 |
|
初始化 |
|
|
设置参数 |
|
|
启动任务 |
|
|
释放资源 |
|
结果和错误通过以下回调返回:
- (void)onFileTransEventCallback:(NuiCallbackEvent)nuiEvent
asrResult:(const char *)asr_result
taskId:(const char *)task_id
ifFinish:(BOOL)finish
retCode:(int)code;
asr_result 包含识别响应 JSON;code 为 SDK 错误码,finish 表示任务是否结束。
参数说明
初始化参数
初始化时传入 JSON 字符串。以下示例使用上海公网地址;将 Appkey、NLS Token 和设备标识替换为实际值。
{
"url": "https://nls-gateway-cn-shanghai.aliyuncs.com/stream/v1/FlashRecognizer",
"app_key": "<APPKEY>",
"token": "<NLS_TOKEN>",
"device_id": "<DEVICE_ID>"
}
|
参数 |
类型 |
是否必选 |
说明 |
|
|
String |
是 |
语音服务地址。 |
|
|
String |
是 |
控制台项目的 Appkey。 |
|
|
String |
是 |
有效且未过期的 NLS Token。可在初始化时设置,也可通过参数设置接口更新。 |
|
|
String |
是 |
设备标识,用于唯一标识设备。 |
任务参数
启动任务时传入 JSON 字符串。file_path 是 App 可读取的本地文件绝对路径。以下示例识别 16 kHz WAV 文件,并开启词级结果。
{
"file_path": "<AUDIO_FILE_PATH>",
"nls_config": {
"format": "wav",
"sample_rate": 16000,
"enable_word_level_result": true
}
}
|
参数 |
类型 |
是否必选 |
说明 |
|
|
String |
是 |
待识别文件的绝对路径。 |
|
|
String |
否 |
自行完成服务域名的 DNS 解析后,可传入对应 IP 地址访问。 |
|
|
JsonObject |
否 |
识别配置。可以在启动任务时传入,或提前通过参数设置接口配置。 |
nls_config 字段
|
参数 |
类型 |
是否必选 |
说明 |
|
|
String |
是 |
音频编码格式,支持 |
|
|
Integer |
否 |
识别模型的采样率,支持 |
|
|
Boolean |
否 |
是否启用逆文本标准化(ITN),将中文数字转换为阿拉伯数字。默认 |
|
|
Integer |
否 |
允许的最大结束静音,默认 |
|
|
String |
否 |
通过 POP API 创建的定制模型 ID,默认不添加。 |
|
|
String |
否 |
泛热词表 ID,默认不添加。 |
|
|
Boolean |
否 |
是否返回词级信息,默认 |
|
|
Boolean |
否 |
对双声道文件, |
参数设置与 Token 更新
参数设置接口同样接收 JSON 字符串。以下示例更新 NLS Token:
{
"token": "<NEW_NLS_TOKEN>"
}
提前设置 nls_config 时,将该对象放在参数设置 JSON 的顶层。启动任务时可以沿用已有配置,不重复传入。
响应说明
识别结果通过 EVENT_FILE_TRANS_RESULT 返回。以下为开启词级结果的响应示例。
{
"task_id": "<TASK_ID>",
"status": 20000000,
"message": "SUCCESS",
"flash_result": {
"duration": 3834,
"completed": true,
"sentences": [
{
"text": "hello world, ",
"words": [
{
"text": "hello ",
"begin_time": "280",
"end_time": "752",
"punc": ""
},
{
"text": "world",
"begin_time": "752",
"end_time": "988",
"punc": ", "
}
],
"begin_time": 280,
"end_time": 988,
"channel_id": 0
},
{
"text": "这里是阿里巴巴语音实验室。",
"words": [
{
"text": "这里",
"begin_time": "988",
"end_time": "1460",
"punc": ""
},
{
"text": "是",
"begin_time": "1460",
"end_time": "1696",
"punc": ""
},
{
"text": "阿里巴巴",
"begin_time": "1696",
"end_time": "2640",
"punc": ""
},
{
"text": "语音",
"begin_time": "2640",
"end_time": "3112",
"punc": ""
},
{
"text": "实验室",
"begin_time": "3112",
"end_time": "3820",
"punc": "。"
}
],
"begin_time": 988,
"end_time": 3820,
"channel_id": 0
}
]
}
}
|
字段 |
说明 |
|
|
任务 ID,任务的唯一标识。 |
|
|
服务端状态码, |
|
|
状态消息。 |
|
|
识别结果对象。 |
flash_result 字段
|
字段 |
说明 |
|
|
音频时长,单位为毫秒。 |
|
|
是否完成识别。 |
|
|
句子级识别结果,对象数组。 |
sentences 字段
|
字段 |
说明 |
|
|
句子级识别结果。 |
|
|
句子在音频中的开始时间偏移,单位为毫秒。 |
|
|
句子在音频中的结束时间偏移,单位为毫秒。 |
|
|
音频声道编号,从 |
|
|
词级信息数组,开启 |
words 字段
|
字段 |
说明 |
|
|
当前词的识别结果。 |
|
|
当前词在音频中的开始时间偏移,单位为毫秒。 |
|
|
当前词在音频中的结束时间偏移,单位为毫秒。 |
|
|
当前词尾的标点,没有标点时为空。 |
错误码
服务端和移动端 SDK 的错误码及处理方法,请参见错误码查询。