移动端SDK说明

更新时间:
复制 MD 格式

通过 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

公网

上海

https://nls-gateway-cn-shanghai.aliyuncs.com/stream/v1/FlashRecognizer

北京

https://nls-gateway-cn-beijing.aliyuncs.com/stream/v1/FlashRecognizer

深圳

https://nls-gateway-cn-shenzhen.aliyuncs.com/stream/v1/FlashRecognizer

VPC 内网

上海

http://nls-gateway-cn-shanghai-internal.aliyuncs.com/stream/v1/FlashRecognizer

北京

http://nls-gateway-cn-beijing-internal.aliyuncs.com/stream/v1/FlashRecognizer

深圳

http://nls-gateway-cn-shenzhen-internal.aliyuncs.com/stream/v1/FlashRecognizer

Host 为 URL 的域名部分,例如上海公网地址对应 nls-gateway-cn-shanghai.aliyuncs.com。

说明

上海、北京、深圳地域的 ECS 实例可通过同地域 VPC 内网地址访问,经典网络不支持内网访问语音服务。使用内网地址时采用 HTTP 协议,Host 同时改为对应内网域名;该方式不产生 ECS 实例的公网流量费用。

调用流程

下图展示 Android SDK 和 iOS SDK 的交互流程。

image
  1. 创建 SDK 实例并设置录音文件识别回调,使用 Appkey、NLS Token、服务地址和设备标识初始化 SDK。

  2. 设置识别参数。nls_config 可以通过参数设置接口配置,也可以在启动任务的参数中传入。

  3. 传入本地音频文件的绝对路径并启动任务。接口返回 0 表示调用成功;识别结果通过 EVENT_FILE_TRANS_RESULT 回调返回,发生错误时收到 EVENT_ASR_ERROR。

  4. 处理识别结果,不再使用 SDK 时释放资源。初始化、启动和释放等同步调用应在非 UI 线程执行。

两端的调用接口如下。

Android

使用 NativeNui 实例,并实现 INativeFileTransCallback。

操作

接口

初始化

initialize(callback, ticket, logLevel, saveLog)

设置参数

setParams(params)

启动任务

startFileTranscriber(params, taskId),taskId 使用长度为 32 的 byte[] 接收任务 ID。

释放资源

release()

结果和错误通过以下回调返回:

void onFileTransEventCallback(Constants.NuiEvent event, int resultCode,
        int finish, AsrResult asrResult, String taskId);

AsrResult.asrResult 包含识别响应 JSON;resultCode 为 SDK 错误码,finish 表示任务是否结束。

iOS

使用 NeoNui 实例,并设置实现 NeoNuiSdkDelegate 的 delegate。

操作

接口

初始化

nui_initialize:logLevel:saveLog:

设置参数

nui_set_params:

启动任务

nui_file_trans_start:taskId:,taskId 使用长度为 32 的 char 数组接收任务 ID。

释放资源

nui_release

结果和错误通过以下回调返回:

- (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>"
}

参数

类型

是否必选

说明

url

String

是

语音服务地址。

app_key

String

是

控制台项目的 Appkey。

token

String

是

有效且未过期的 NLS Token。可在初始化时设置,也可通过参数设置接口更新。

device_id

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
  }
}

参数

类型

是否必选

说明

file_path

String

是

待识别文件的绝对路径。

direct_ip

String

否

自行完成服务域名的 DNS 解析后,可传入对应 IP 地址访问。

nls_config

JsonObject

否

识别配置。可以在启动任务时传入,或提前通过参数设置接口配置。

nls_config 字段

参数

类型

是否必选

说明

format

String

是

音频编码格式,支持 wav、mp3、aac、mp4、opus。通过 nls_config 配置。

sample_rate

Integer

否

识别模型的采样率,支持 8000(电话)和 16000(非电话)。服务端按该值对音频自动升采样或降采样。

enable_inverse_text_normalization

Boolean

否

是否启用逆文本标准化(ITN),将中文数字转换为阿拉伯数字。默认 false。

max_end_silence

Integer

否

允许的最大结束静音,默认 450,单位为毫秒。

customization_id

String

否

通过 POP API 创建的定制模型 ID,默认不添加。

vocabulary_id

String

否

泛热词表 ID,默认不添加。

enable_word_level_result

Boolean

否

是否返回词级信息,默认 false。

first_channel_only

Boolean

否

对双声道文件,true 仅识别第一声道,false 识别两个声道。未设置时,8 kHz 模型处理双声道,16 kHz 模型仅处理第一声道。

参数设置与 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
      }
    ]
  }
}

字段

说明

task_id

任务 ID,任务的唯一标识。

status

服务端状态码,20000000 表示成功。

message

状态消息。

flash_result

识别结果对象。

flash_result 字段

字段

说明

duration

音频时长,单位为毫秒。

completed

是否完成识别。

sentences

句子级识别结果,对象数组。

sentences 字段

字段

说明

text

句子级识别结果。

begin_time

句子在音频中的开始时间偏移,单位为毫秒。

end_time

句子在音频中的结束时间偏移,单位为毫秒。

channel_id

音频声道编号,从 0 开始。

words

词级信息数组,开启 enable_word_level_result 时返回。

words 字段

字段

说明

text

当前词的识别结果。

begin_time

当前词在音频中的开始时间偏移,单位为毫秒。

end_time

当前词在音频中的结束时间偏移,单位为毫秒。

punc

当前词尾的标点,没有标点时为空。

错误码

服务端和移动端 SDK 的错误码及处理方法,请参见错误码查询。