| 类别 | 兼容范围 |
|---|---|
| gcc/g++ | v4.8.5+ |
| 接口 | Linux C++ 接口 |
| 网络 | 对网络无要求,设备具备联网条件,可使用在线激活方式,首次使用需要连接网络。若设备不能联网,需要使用离线激活方式 |
| 开发环境 | 建议使用 VS Studio 进行开发 |

#include "./include/aikit_biz_api.h"
#include "./include/aikit_constant.h"AIKIT_Configurator::builder()
.app()
.appID("")
.apiKey("")
.apiSecret("")
.workDir("./") //示例为当前路径
.auth()
.ability("e867a88f2")
.log()
.logLevel(LOG_LVL_INFO)
.logPath("./");
int ret = AIKIT_Init();
if(ret != 0){
printf("AIKIT_Init failed:%d\n",ret);
goto exit;
}| 模块 | 配置选项 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| app | appID | string | 是 | 应用ID |
| app | apiKey | string | 是 | 离线引擎托管平台创建应用后,生成的唯一应用标识 |
| app | apiSecret | string | 是 | 离线引擎托管平台创建应用后,生成的唯一应用秘钥 |
| app | workDir | string | 是 | SDK工作目录,默认授权缓存、读取能力资源、写SDK日志在此路径下 |
| app | resDir | string | 否 | 指定资源读取路径,不设置默认从workDir读取 |
| auth | authType | string | 否 | 离线授权类型(0或1),0-->(默认)设备级授权(DEVICE)和 1-->应用级授权(APP) |
| auth | licenseFile | string | 否 | (购买装机量达到10000台后,可以通过工单申请离线激活license文件)离线授权license文件绝对路径,SDK离线激活方式,需要从离线引擎托管平台申请的离线授权license文件,放入设备指定路径中(可放入至SDK工作路径下),即licenseFile参数即为离线激活文件的绝对工作路径。 |
| auth | channelID | string | 否 | 渠道ID,存在多个能力集可指定使用的能力集 |
| auth | UDID | string | 否 | 用户自定义设备标识,需要服务端配置开启支持后才支持使用,建议设置长度低于256 |
| auth | ability | string | 是 | 竞争授权注册的能力id组合,格式如"xxxxx1;xxxxx2",多个能力通过英文分号隔开,如果进行设置,则按照注册的能力进行授权,如果设置为空或者没有设置,则按照旧版sdkid的方式进行授权 |
| log | logLevel | int | 否 | 日志的输出等级:LOG_LVL_VERBOSE: verbose日志,日志最全LOG_LVL_DEBUG: debug级别LOG_LVL_WARN:警告级别信息LOG_LVL_INFO: 重要信息LOG_LVL_ERROR:错误级别日志LOG_LVL_FATAL:错误级别日志LOG_LVL_OFF:错误级别日志 |
| log | logMode | int | 否 | 模式: LOG_STDOUT:linux 控制台 LOG_FILE:文件形式 |
| log | logPath | string | 否 | 输出模式为文件时的文件名称(带有文件名称的路径) |
void OnOutput(AIKIT_HANDLE* handle, const AIKIT_OutputData* output){
printf("OnOutput abilityID :%s\n",handle->abilityID);
printf("OnOutput key:%s\n",output->node->key);
if((output->node->value) && (fin != nullptr))
{
//output->node->value 即为能力计算结果
}
}
void OnEvent(AIKIT_HANDLE* handle, AIKIT_EVENT eventType, const AIKIT_OutputEvent* eventValue){
printf("OnEvent:%d\n",eventType);
if(eventType == AIKIT_Event_End){
//计算结束
}
}
void OnError(AIKIT_HANDLE* handle, int32_t err, const char* desc){
printf("OnError:%d\n",err);
}
AIKIT_Callbacks cbs = {OnOutput,OnEvent,OnError};
AIKIT_RegisterAbilityCallback("e867a88f2",cbs);| 参数 | 类型 | 说明 |
|---|---|---|
| handle | AIKIT_HANDLE* | 会话handle |
| output | AIKIT_OutputData* | 输出数据 |
| 参数 | 类型 | 说明 |
|---|---|---|
| handle | AIKIT_HANDLE* | 会话handle |
| eventType | AIKIT_EVENT | 事件类型 |
| eventValue | AIKIT_OutputEvent* | 事件数据 |
| 参数 | 类型 | 说明 |
|---|---|---|
| handle | AIKIT_HANDLE* | 会话handle |
| err | int32_t | 错误码 |
| desc | char* | 错误码描述 |
AIKIT_CustomBuilder *customData = AIKIT_CustomBuilder::create();
customData->text("key_word", "./keyword.txt",strlen("./keyword.txt"),0);//传入唤醒词名称
int ret = AIKIT_LoadData("e867a88f2",AIKIT_Builder::build(customData));
int indexs[]={0};
AIKIT_SpecifyDataSet("e867a88f2","key_word",indexs,1);| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| abilityId | char* | 是 | 能力标识ID |
| data | AIKIT_CustomData* | 是 | 个性化数据构造器 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| abilityId | char* | 是 | 能力标识ID |
| key | char* | 是 | 个性化资源key |
| indexs | int[] | 是 | 个性化资源索引数组 |
| count | int | 是 | 个性化数据索引数组成员个数 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| abilityId | char* | 是 | 能力标识ID |
| srcData | AIKIT_CustomData* | 是 | 原始数据输入 |
| data | AIKIT_CustomData** | 是 | 结果数据输出 |
AIKIT_ParamBuilder* paramBuilder = nullptr;
paramBuilder = AIKIT_ParamBuilder::create();
//paramBuilder->param("wdec_param_nCmThreshold", "$paramValue",strlen("$paramValue"));
//paramBuilder->param("gramLoad", false);
ret = AIKIT_Start("e867a88f2",AIKIT_Builder::build(paramBuilder),nullptr,&handle);
if(ret != 0) {
printf("AIKIT_Start failed:%d\n", ret);
goto exit;
}| 功能标识 | 功能描述 | 数据类型 | 取值范围 | 必填 | 默认值 |
|---|---|---|---|---|---|
| wdec_param_nCmThreshold | 门限值 | string | 最小长度:0, 最大长度:1024 | 否 | |
| gramLoad | 更新自定义唤醒词 | bool | true:true, false:false | 否 | false |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| ability | char* | 是 | 能力标识ID |
| param | AIKIT_BizParam* | 是 | 能力的配置和输入,可使用AIKIT_Builder快捷构建 |
| usrContext | void* | 否 | 用户上下文指针,保存在outHandle中,用以回调中使用 |
| outHandle | AIKIT_HANDLE**(指针的指针) | 是 | 生成的会话句柄 |
0=成功,其他=错误| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| handle | AIKIT_HANDLE* | 是 | AIKIT_Start生成的会话handle |
| input | AIKIT_InputData* | 是 | 输入数据 |
AIKIT_DataBuilder* dataBuilder = AIKIT_DataBuilder::create();
//输入音频数据
AiAudio* wavData = AiAudio::get("wav")->data(buffer,bufferLen)->valid();
dataBuilder->payload(wavData);
int ret = AIKIT_Write(handle,AIKIT_DataBuilder::build(dataBuilder));
if (ret != 0) {
printf("AIKIT_Write:%d\n",ret);
goto exit;
}| 字段 | 含义 | 数据类型 | 取值范围 | 默认值 | 说明 | 必填 |
|---|---|---|---|---|---|---|
| encoding | 音频编码 | string | lame, speex, opus, speex-wb | speex-wb | 取值范围可枚举 | 否 |
| sample_rate | 采样率 | int | 16000, 8000 | 16000 | 音频采样率,可枚举 | 否 |
| channels | 声道数 | int | 1, 2 | 1 | 声道数,可枚举 | 否 |
| bit_depth | 位深 | int | 16, 8 | 16 | 单位bit,可枚举 | 否 |
| data | 音频数据 | string | 音频大小:0-10M | 否 | ||
| frame_size | 帧大小 | int | 最小值:0, 最大值:1024 | 0 | 帧大小,默认0 | 否 |
| 字段 | 含义 | 数据类型 | 取值范 围 | 默认值 | 说明 | 必填 |
|---|---|---|---|---|---|---|
| encoding | 文本编码 | string | utf8, gb2312 | utf8 | 取值范围可枚举 | 否 |
| compress | 文本压缩格式 | string | raw, gzip | raw | 取值范围可枚举 | 否 |
| format | 文本格式 | string | plain, json, xml | json | 取值范围可枚举 | 否 |
| data | 文本数据 | string | 文本大小:0-1M | 否 |
int ret = AIKIT_End(handle);
if (ret != 0) {
printf("AIKIT_End failed : %d\n", ret);
}| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| handle | AIKIT_HANDLE* | 是 | AIKIT_Start生成的会话handle |
/**
* SDK逆初始化函数用以释放SDK所占资源 *
@return 结果错误码,0=成功 */
AIKITAPI int32_t AIKIT_UnInit();/**
* 设置日志级别,模式,以及保存路径
* @param level 日志级别
* @param mode 日志输出模式
* @param path 输出模式为文件时的文件名称
* @return 错误码 0=成功,其他表示失败
*/
AIKITAPI int32_t AIKIT_SetLogInfo(int32_t level, int32_t mode, const char* path); | 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 参数 | 类型 | 必填 | 说明 |
| level | int32_t | 否 | 日志的输出等级: LOG_LVL_DEBUG: debug级别,日志最全LOG_LVL_WARN:警告级别信息LOG_LVL_INFO: 重要信息LOG_LVL_ERROR:错误级别日志LOG_LVL_FATAL:错误级别日志LOG_LVL_OFF:错误级别日志 |
| mode | int32_t | 否 | 模式: LOG_STDOUT:linux 控制台 LOG_FILE:文件形式 |
| path | const char* | 否 | 输出模式为文件时的文件名称(带有文件名称的路径) |
/**
* 获取设备ID
* @param deviceID 设备指纹输出字符串
* @return 结果错误码,0=成功
*/
AIKITAPI int32_t AIKIT_GetDeviceID(const char** deviceID);/**
* 个性化数据加载
* @param ability 能力唯一标识
* @param key 个性化数据唯一标识
* @param index 个性化数据索引
* @return 错误码 0=成功,其他表示失败
*/
AIKITAPI int32_t AIKIT_UnLoadData("e867a88f2", "key_word", int index);| 参数 | 类型 | 说明 |
|---|---|---|
| ability | String | 能力id |
| key_word | String | 个性化数据唯一标识 |
| index | String | 个性化数据索引 |
/**
* 设置授权更新间隔,单位为秒,默认为300秒
* AIKIT_Init前设置
* @param interval 间隔秒数
* @return 结果错误码,0=成功
*/
AIKITAPI int32_t AIKIT_SetAuthCheckInterval(uint32_t interval);/**
* 获取SDK版本号
* @return SDK版本号
*/
AIKITAPI const char* AIKIT_GetVersion();appid 未授权该SDK 能力,请申请授权后使用该能力。
appid、apiKey、apiSecret 配置有误,请检查配置。
apiKey 或 apiSecret 有误,请检查apiKey、apiSecret 的值是否正确,并替换为 正确的值。
appid 不存在或appid 未授权,请使用正确的 appid。
SDK 初始化时设置的SDK工作路径即“workDir” 无读写权限,请确保SDK 初始化时,SDK工作路径具有读写权限。
能力(能力id为 xxxxxx)不存在,初始化引擎时传入的能力id有误,请检查能力id是否正确;或改能力未授权,请确认该能力是否已申请授权。
该错误为资源未找到,请检查是否将资源导入到了SDK的工作路径下。
流式接口能力,调用 AEE_Start 或 start 方法开始的会话,未调用AEE_End 或 end 方法打断或正常结束,再次调用AEE_Srart则SDK会返回18310错误,同一个能力SDK不支持并发调用,需要结束本次会话之后,才能开始下一次会话。
请检查确认引擎初始化及调用能力时所传能力id参数是否正确;如果能力ID无误,SDK日志中打印的 xxxxxx 能力未授权。
应用安全等级与设备指纹不符,须申请调整appid 安全等级;
答:默认提供的只有X86的so库,arm和mips架构请提交交叉编译工单(申请交叉编译的用户需要先完成企业认证,然后下载填写交叉编译申请表格 提交到工单中)。
| 错误码 | 含义 | 自查指南 |
|---|---|---|
| 18000 | 本地 license 文件不存在 | 离线激活方式,请检查离线授权文件路径下,license 文件是否存在;如果不存在,请将申请的离线授权文件放置在对应路径下; 在线激活方式下,请检查 workDir 目录下 license 文件是否存在,如果不存在,请将设备联网,重启应用。 |
| 18001/18002 /18003/18004 | 授权问题 | Linux 平台删除授权文件,将设备联网,重启应用,重新从云端获取授权文件; Android 端清除应用缓存,将设备联网,重启应用,重新从云端获取授权文件; 如仍有问题,请联系项目经理协助解决。 |
| 18005 | 授权已过期 | 能力授权已过期。 |
| 18006 | 授权时间错误,设备时间比标准时间慢 30 分钟以上 | 设备时间不准确导致,请校正设备时间为标准时间,重启应用。 |
| 18007 | 授权应用不匹配(apiKey、apiSecret) | apiKey、apiSecret配置有误,请核对项目中配置的 apiKey、apiSecret 。 |
| 18008 | 授权文件激活过期 | 非永久授权激活文件的有效期为 3天,Linux 平台删除授权文件、Android平台清除应用缓存后重启应用重新激活; 若设备无法联网,请重新申请离线激活文件,在 3 天内激活。 |
| 18010 | 离线授权激活文件指定平台与设备平台不匹配 | 批量授权激活文件不支持当前设备平台,离线批量授权文件仅只支持申请时指定的的特定平台,不可多平台混用。 |
| 18011 | 离线授权激活文件指定架构与设备 CPU 架构不匹配 | 批量授权激活文件不支持当前设备架构,离线批量授权文件仅只支持申请时制定的特定架构,不支持多架构混用。 |
| 18012 | 离线授权激活文件中包含 license 个数异常 | 离线批量激活文件异常,请检查设备中使用的离线激活文件与所申请的是否一致 |
| 18013 | 离线授权激活文件中未找到当前设备 | 批量离线授权激活文件中不包含改设备,请联网激活或申请离线授权激活文件。 |
| 18014 | 离线授权激活文件中设备指纹安全等级非法 | 离线授权文件中安全等级错误,请联系平台重新提供 |
| 18015 | 硬件授权验证失败 | - |
| 18016 | 离线授权激活文件内容非法 | 批量离线授权文件不合法,请替换正确的批量离线激活文件测试,如仍有问题,请联系项目经理协助解决。 |
| 18017 | 离线授权激活文件中协议头非法 | 批量离线授权文件不合法,请替换正确的批量离线激活文件测试,如仍有问题,请联系项目经理协助解决。 |
| 18018 | 离线授权激活文件中指纹组成项个数为0 | 未获取到有效的设备标识,例如 Android平台 Androidid 未获取到;Linux平台 MAC等未获取到。 |
| 18019 | 资源已过期 | 请联系平台技术人员解决 |
| 18100/18101/18102 | 资源错误 | 请仔细检查所用资源与平台提供的资源是否一致,可通过MD5对比,请使用提供SDK时附带的成套资源。 |
| 18103 | 资源参数不存在 | 请根据文档检查能力参数Key、Value 是否合法。 |
| 18104 | 资源路径打开失败 | 资源路径无读写权限,请确保在 SDK 初始化时以获取到读写权限,或将资源路径设置为有读写权限的路径下。 |
| 18105 | 资源加载失败,workDir 内未找到对应资源 | 请根据日志提示将所需资源导入到指定路径下 |
| 18106 | 资源卸载失败 | 请检查代码是否存在未初始化时调用 SDK uninit 方法,或多次调用 uninit 方法 |
| 18200 | 引擎鉴权失败 | 应用授权信息与SDK不对应。 1. 请尝试将设备联网后重启应用; 2. 请检查您项目中使用的SDK和平台提供的是否一致; |
| 18201 | 引擎动态加载失败 | 请检查日志中打印的引擎库是否已导入到项目中 |
| 18202 | 引擎未初始化 | 请检查调用能力前是否已初始化引擎及初始化是否成功。 |
| 18203 | 引擎不支持该接口调用 | 请参照 Demo 仔细检查方法调用是否正确 |
| 18205 | 引擎重复初始化 | 请根据文档检查引擎初始化方法是否存在重复调用,引擎初始化全局仅需初始化一次。 |
| 18206 | 引擎参数非法 | 请根据文档检查引擎初始化参数是否合法; |
| 18207 | 引擎上下文未注册 | - |
| 18300 | SDK不可用 | 请联系平台技术人员解决 |
| 18301 | SDK未初始化 | 在使用能力前请先初始化 SDK,如果有调用 uninit 方法,再次使用能力时需要重新初始化。 |
| 18302 | SDK初始化失败 | 请根据CoreListener回调中返回的错误码参考此文档做对应检查 |
| 18303 | SDK 已经初始化 | 重复初始化导致,使用能力时,SDK 只需要初始化一次,请检查 SDK 初始化逻辑是否存在多次初始化。 |
| 18304 | 不合法参数 | 请参考demo及协议文件仔细检查所传参数是否正确;若确认无误,请联网后重启应用后重试 |
| 18305/18306 | 会话不存在或已销毁 | 1. 请检查 start 方法调用是否返回成功; 2. 请排查代码是否在调用 end 方法结束会话后又调用了 write 或read 方法。 3. 请确保 end 方法在能力执行完毕后调用,能力执行结果会在 onEvent 中回调。 |
| 18307 | 会话重复终止 | 该错误一般为重复调用 end 方法导致, 请仔细检查代码是否有重 复调用 end 方法 |
| 18308 | 超时错误 | 请检查网络是否正常连接 |
| 18309 | SDK正在初始化中 | 请联系平台技术人员解决 |
| 18310 | 会话重复开启 | start 、end方法需成对调用,请仔细检查代码逻辑是否存在调用start 后未调用end结束会话,又再次调用start 情况出现 |
| 18400 | 工作目录无写权限 | 在设置 workDir 时,请确保该工作路径有读写权限。若无法设置读写权限,请修改为有读写权限的工作路径。 |
| 18401 | 未获取到设备标识 | 没有获取到组成设备指纹所必须的组成项,请确认 mac、AndroidID、SN 等是否能获取到,请根据授权安全等级确保能获取对应数量的设备标识。 |
| 18402 | 文件打开失败 | 请检查 日志中所打印的文件是否存在,以及对应路径下是否有读权限。 |
| 18404 | 设备指纹比较失败 | 设备指纹组成项发生变化导致,获取到的设备指纹与缓存的设备指纹不一致,请将设备联网后重启应用重试。 |
| 18405 | 工作目录不存在 | 请检查资源文件文件夹是否存在 |
| 18500 | 未找到该参数 key | 请参照demo或协议文档仔细检查参数名拼写 |
| 18501 | 参数范围溢出,不满足约束条件 | 请根据协议检查调用 SDK 方 法时所传参数范围,需要确保所传参数符合协议约束要求 |
| 18502 | SDK 初始化参数为空 | 请根据 SDK 集成文件检查 SDK 初始化代码,确保必填参数有值且合法 |
| 18503 | SDK 初始化参数中 appId 为空 | appId 为空值,请在 SDK 初始化时传入正确的 appId 值 |
| 18504 | SDK 初始化参数中 apiKey为空 | apiKey为空值,请在 SDK 初始化时传入正确的 apiKey值 |
| 18505 | SDK 初始化参数中 apiSecret 为空 | apiSecret 为空值,请在 SDK 初始化时传入正确的 apapiSecret 值 |
| 18506 | abilityId 参数为空 | abilityId 为空值,请检查 引擎初始化方法及调用能力方法时所传的 abilityId 是否正确 |
| 18507 | input 参数为空 | 请检查调用能力方法时 input 参数是否为空 |
| 18508 | 输入数据参数 Key 不存在 | 请根据协议文档检查输入参数的 key |
| 18509 | 必填参数缺失 | 请根据文档或demo检查参数漏传项 |
| 18510 | 输出参数缺失 | 能力输出参数缺失 |
| 18520 | 不支持的编解码类型 | 输入的编解码格式不支持 |
| 18600 | 协议中时间戳字段缺失 | 请将设备联网后重启应用 |
| 18601 | 协议中未找到该能力 ID | 请确认 SDK 初始化时所传 appId、 apiKey、apiSecret 是否正确; 若无误请删除授权文件或清空应用缓存后重启应用; 请确认所传能力 ID 是否正确; 请联系平台协助排查授权是否已过期或授权量已用完。 |
| 18602 | 协议中未找到该资源 | 请确认 SDK 初始化时所传 appId、 apiKey、apiSecret 是否正确; 请将设备联网后重新应用重试; 请确认是否已申请授权过该资源。 |
| 18603 | 协议中未找到该引擎 | 请确认 SDK 初始化时所传 appId、 apiKey、apiSecret 是否正确; 请将设备联网后重新应用重试; 请确认项目中使用SDK版本是否正确。 |
| 18606 | 协议能力接口类型不匹配 | 请根据协议检查能力接口类型是否一致,流式与非流式接口不可混用 |
| 18607 | 预置协议解析失败 | 请联系平台技术人员解决 |
| 18700 | 能力未授权 | 该SDK未授权,请联系项目经理申请授权 |
| 18701 | 网络不通 | 请检查网络连接是否正常 |
| 18702 | 网关检查不过 | 检查设备时间是否正确; 请检查 SDK 初始化时所传 apiKey、apiScrect 是否正确; |
| 18703 | 云端响应格式不对 | 请检查网络是否可以正常访问外网 |
| 18704 | 应用未注册 | 请检查appid 是否正确 |
| 18705 | 应用 ApiKey & ApiSecret 校验失败 | 请检查 apiKey、apiSecret 是否正确 |
| 18706 | 引擎不支持的平台架构 | 您所使用的能力不支持该设备平台架构,请确认申请的SDK支持的平台架构。 |
| 18707 | 授权已过期 | 如需继续使用请申请授权延期 |
| 18708 | 无可用授权 | 该能力不支持当前平台架构的设备; 2. 授权量已满 |
| 18709 | 未找到该 appid 绑定的能力 | 请检查 appId 是否正确;请确认是否已购买该能力 |
| 18710 | 未找到该 appid 绑定的资源 | 请检查 appId 是否正确;请检查是否已申请受限资源 |
| 18711 | json操作失败 | 请联系平台技术人员解决 |
| 18712 | http 404错误 | 请联系平台技术人员解决 |
| 18713 | 设备指纹安全等级不匹配 | 设备指纹安全等级不匹配,请申请申请安全等级变更 |
| 18714 | 应用信息错误 | 一般为apiKey、apiSecret值有误,请检查 appid、apiKey、apiSecret 的值是否正确。 |
| 18715 | 未找到该SDKID | 该组合能力SDK未授权,请申请授权 |
| 18716 | 未找到该组合能力集合 | 该组合能力未创建,请申请授权 |
| 18717 | SDK组合能力授权不足 | 组合能力授权量已用完,需申请追加授权 |
| 18718 | 无效授权应用签名 | 应用级授权,应用签名与授权签名不一致 |
| 18719 | 应用签名不唯一 | 应用级授权,提供的应用签名有误 |
| 18720 | 能力schema不可用 | 请联系平台技术人员解决 |
| 18721 | 未找到能力集模板 | 请联系平台技术人员解决 |
| 18722 | 能力不在模板能力集模板中 | 该能力未授权,请申请授权 |
| 18801 | 建立链接错误 | - |
| 18802 | 结果等待超时 | - |
| 18803 | 连接状态异常 | - |