概述
本文档是百度AI开放平台Linux SDK (C++)BDSpeechSDK 3.x 的用户指南。描述了在线语音识别相关接口的使用说明
ASR 自动语音识别技术(Automatic Speech Recognition), 将人的语音转换为文本。
再次提醒: BDSpeechSDK的功能只有不限音频流时长的在线识别功能,并可以返回服务器端语义。没有任何离线功能,没有离线识别及唤醒词功能。
SDK 支持 普通话,英语,四川话和粤语
库标识 | 版本,sdk->get_sdk_version() | 发布时间 | libBDSpeechSDK.a md5值 |
---|---|---|---|
09a7b48a3a-20180502 | 3.0.0.9a7b48a3a | 2018-05-16 | 3974ca4d43dedff8d56b8830f2b17983 |
目前仅支持 x64 Linux 操作系统。
目前支持运行centos 4-7 版本,及Ubuntu 14.04, 使用g++ 4.8.2版本。 其它Linux及g++版本暂时未做测试,请自行尝试编译,如果有报错请反馈。
如果使用g++ 5.x以上版本编译,需要开启-D_GLIBCXX_USE_CX11ABI=0,SDK可以正常使用,但可能导致您自己的部分新特性的代码不能编译。
SDK限制为10个识别线程,但可以跑多个进程。
输入音频流的音频格式为pcm, 单声道,16bits, 小端序。采样率16k。
实时传输的一个16k采样率的音频流需要32kb/s的网速,10个并发音频流需要320K/s ,请确保与百度服务器之间的网络稳定。
开启压缩传输后会降低传输的数据量,但是音频质量会有损失。
SDK 输出的结果为识别音频的文字。如果开始语义理解后,进一步在识别音频的文字的基础上可以获取简单的语义解析结果。复杂的语义解析及智能问答可以参见ai.baidu.com上文本处理类的接口。
如果您用的是实时音频,没有影响。如果您用的是录音文件,请sleep与原始音频相同的时间,否则结果无法预期。即从音频开始进行计算到获取最终结果,识别整体耗时都是略多于原始音频的时长。
如果您需要测试SDK,请至sample目录。
BDSpeechSDK中包含extern, include, lib, sample, resources五个目录。 如果您需要测试SDK,请至sample目录。
Centos 5 或 6 上如果没有g++程序,请按以下代码安装:
yum install gcc-c++
g++ --version
默认是 4.4.7 版本
升级至4.8.2
wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
yum install devtoolset-2-gcc-c++ devtoolset-2-binutils devtoolset-2-build devtoolset-2-gdb devtoolset-2-libstdc++-devel devtoolset-2-runtime
如果网速过慢的话,可以手动下载 下面的rpm文件本地安装
devtoolset-2-binutils-2.23.52.0.1-10.el6.x86_64.rpm
devtoolset-2-build-2.1-4.el6.noarch.rpm
devtoolset-2-gcc-4.8.2-15.el6.x86_64.rpm
devtoolset-2-gcc-c++-4.8.2-15.el6.x86_64.rpm
devtoolset-2-gdb-7.6.1-47.el6.x86_64.rpm
devtoolset-2-libstdc++-devel-4.8.2-15.el6.x86_64.rpm
devtoolset-2-runtime-2.1-4.el6.noarch.rpm
# 如果网速过慢的话,可以手动下载上述rpm文件
# 链接:https://pan.baidu.com/s/1qZk6wVy 密码:zjew
# yum localinstall *.rpm
mv /usr/bin/gcc /usr/bin/gcc-4.4.7
mv /usr/bin/g++ /usr/bin/g++-4.4.7
mv /usr/bin/c++ /usr/bin/c++-4.4.7
ln -s /opt/rh/devtoolset-2/root/usr/bin/gcc /usr/bin/gcc
ln -s /opt/rh/devtoolset-2/root/usr/bin/c++ /usr/bin/c++
ln -s /opt/rh/devtoolset-2/root/usr/bin/g++ /usr/bin/g++
成功后:
[root@instance-ah3bznc6 root]# g++ --version
g++ (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)
Copyright (C) 2013 Free Software Foundation, Inc.
功能基本等同于Android iOS SDK的在线部分。BDSpeechSDK没有任何离线功能。
按步骤主要分为语音识别 及 语义理解。
###识别模型及语言
百度语音提供2种识别模型
SDK 支持 普通话,英语,四川话及粤语
识别模型和输入法模型及语言由ASR_PARAM_KEY_PRODUCT_ID控制
###静音断句及时长设置
SDK根据静音时长判断一句话有没有结束。SDK检测到静音时长超过这个时间后,就认为一句话结束,句子该切分了。
静音时长可以单独设置,建议值 200ms - 3000ms。参见ASR_PARAM_KEY_MAX_SPEECH_PAUSE参数
自定义词库适合短句,保证词库中一模一样的短句可以被识别出,词库中的分词优先级较高。 自定义词库仅对搜索模型生效。最好在1万行以内。
副作用:如果用户的测试集中包含大量非自定义词表的query,整体上准确率下降。
词库定义了1个短句: 1 . 摆渡船来了 百度内部处理的可能的分词结果: 摆渡船 来 了
以下录音的结果
BDSSDKMessage 包可以认为是命令的参数,由一个标明意向的name,及其它参数组成,然后通过post函数传递命令。
name | 说明 |
---|---|
ASR_CMD_CONFIG | 设置配置参数 |
ASR_CMD_START | 设置启动参数 |
ASR_CMD_PUSH_AUDIO | 传递音频数据 |
ASR_CMD_STOP | 停止当前当前音频流输入 |
ASR_CMD_CANCEL | 取消当前的整个识别过程 |
每次识别一个音频流,都需要从获取实例到释放实例完整地执行一遍。即get_instance每个音频流获取一次,不要复用。
get_instance最多可以保持10个实例,即最多同时识别10个音频。
std::string err_msg;
bds::BDSpeechSDK* sdk = bds::BDSpeechSDK::get_instance(bds::SDK_TYPE_ASR, err_msg);
设置结果的回调函数。注意回调产生在SDK内部的线程中。
void asr_output_callback(bds::BDSSDKMessage& message, void* user_arg);
sdk->set_event_listener(&asr_output_callback, (void*)& thread_seq);
// 此例中 thread_seq会作为user_arg参数,传入asr_output_callback回调。
bds::BDSSDKMessage cfg_params;
cfg_params.name = bds::ASR_CMD_CONFIG;
cfg_params.set_parameter(bds::COMMON_PARAM_KEY_DEBUG_LOG_LEVEL, sdk_log_level);
....
bool is_success =sdk->post(cfg_params, err_msg);
// is_success表示设置是否成功,具体错误见err_msg
cfg_params.set_parameter中可以设置的参数列表请见“参数列表:输入配置参数”一节
这里只需要填写ASR_PARAM_KEY_APP参数,填写您自定义的应用名称即可,方便百度服务端联调及统计。
bds::BDSSDKMessage start_params;
start_params.name = bds::ASR_CMD_START;
start_params.set_parameter(bds::ASR_PARAM_KEY_APP, "AIPtest");
....
bool is_success =sdk->post(start_params, err_msg);
// is_success表示设置是否成功,具体错误见err_msg
cfg_params.set_parameter中可以的参数列表说明请见“参数列表:输入启动参数”一节
音频流的音频格式为raw,或者是pcm文件输入流。单声道,16bits, 小端序。
bds::BDSSDKMessage push_params;
push_params.name = bds::ASR_CMD_PUSH_AUDIO;
push_params.set_parameter(bds::DATA_CHUNK, audio_buf, (int)read_cnt); // read_cnt=320
//如果实时音频,此处不需要sleep。如果是文件流,此处需要 sleep , sleep的时长为音频时长。
//即服务端处理一段音频需要等同于音频原始时长的耗时,不能上传过快,否则服务端行为不能预期。
....
bool is_success =sdk->post(push_params, err_msg);
// is_success表示设置是否成功,具体错误见err_msg
每次传递音频的大小可以根据需要来,建议320字节 。
两次音频数据调用请在10s内完成。否则有异常出现。
告诉SDK 音频流已经输入完毕,不再有后续音频。 需要调用以下2行代码:
push_params.set_parameter(bds::DATA_CHUNK, audio_buf, 0);
bds::BDSSDKMessage stop_params;
stop_params.name = bds::ASR_CMD_STOP;
bool is_success = sdk->post(stop_params, err_msg));
// is_success表示设置是否成功,具体错误见err_msg
告诉SDK 本次识别取消,即用户不再需要识别结果。
bds::BDSSDKMessage cancel_params;
cancel_params.name = bds::ASR_CMD_CANCEL;
bool is_success = sdk->post(cancel_params, err_msg));
// is_success表示设置是否成功,具体错误见err_msg
在设置的event_listener输出回调中,SDK返回EvoiceRecognitionClientWorkStatusCancel事件
bds::BDSpeechSDK::release_instance(sdk);
与get_instance 对应 SDK不是处于空闲状态(见下面的空闲状态定义),调用 bds::BDSpeechSDK::release_instance可能引起程序出core。
所有识别结束,不需要发起新的识别。
SDK空闲时才能执行
bds::BDSpeechSDK::do_cleanup();
SDK空闲是指 没有开始识别或者实例产生了以下3个回调后:
本次识别的最后一点数据发完之后,并且post了长度为0的数据,并且post了stop命令后,最长(通常都不会超过)12s,sdk就会产生上述3个回调。
不建议用户发送ASR_CMD_CANCEL命令来强制结束识别,如果有需要,也可以这样做;但在没收到上述三个回调状态时,即不是空闲状态调用 bds::BDSpeechSDK::release_instance可能引起程序出core。
默认日志根据您设置的日志级别输出到stderr中,可以自行指定日志文件。 注意需要在引擎空闲的时候,如一开始执行。 日志需要设置 COMMON_PARAM_KEY_DEBUG_LOG_LEVEL = EVRDebugLogLevelTrace 开启
BDSpeechSDK::open_log_file(const char *logFileName, int fileSize = 0);
BDSpeechSDK::close_log_file();
close_log_file函数与open_log_file配对使用。在引擎空闲的时候,如全部结束后执行。
开启日志并且日志级别在EVRDebugLogLevelInformation以上。 Sdk日志里带有统计信息,以Statistics开头(s大写),如下示例:
[INFO]-[2017-12-08 15:08:28.598][bds_EventManagerAsr.cpp:307]Statistics info, sn[e89f9705-2ca9-43bb-9790-0328a69ab1f4], sn_cost[11245]ms, response_cost[1085]ms, hard_delay[16]ms, recv_interval:[11229]ms, now:[1512716908598612], recv_first_pack_time:[1512716897352635], recv_last_pack_time:[1512716908582388], audio_len[10.620000]s
其中, 一个sn代表一句话的识别标志logId
根据您需要的识别语言和模型选择PRODUCT_ID参数
语义解析: 自然语言文本是用户意图的表述,语义解析的目的就是将文本分词并解析成意图表示。语义解析仅支持普通话搜索模型。 在线语义详细说明请查看“语义理解协议”文档
PID | 语言 | 模型 | 是否有标点 | 在线语义 | 备注 |
---|---|---|---|---|---|
1536 | 普通话 | 搜索模型 | 无标点 | 不支持 | 默认PID |
15362 | 普通话 | 搜索模型 | 加强标点(逗号、句号、问号、感叹号) | 不支持 | |
15363 | 普通话 | 搜索模型 | 无标点 | 支持 | |
1537 | 普通话 | 输入法模型 | 有标点(逗号) | 不支持 | |
15372 | 普通话 | 输入法模型 | 加强标点(逗号、句号、问号、感叹号) | 不支持 | |
15373 | 普通话 | 输入法模型 | 加强标点(逗号、句号、问号、感叹号) | 支持 | |
1737 | 英语 | 有标点(逗号) | 不支持 | ||
1637 | 粤语 | 有标点(逗号) | 不支持 | ||
16372 | 粤语 | 加强标点(逗号、句号、问号、感叹号) | 不支持 | ||
1837 | 四川话 | 有标点(逗号) | 不支持 | ||
1936 | 普通话 | 远场模型 | 有标点(逗号) | 不支持 | |
19362 | 普通话 | 远场模型 | 加强标点(逗号、句号、问号、感叹号) | 不支持 | |
19363 | 普通话 | 远场模型 | 加强标点(逗号、句号、问号、感叹号) | 支持 |
BDSSDKMessage 包可以认为是用户向SDK发送命令。由一个标明意向的name,及该name相关的参数组成,然后通过post函数传递命令。
name | 说明 | 参数 |
---|---|---|
ASR_CMD_CONFIG | 设置配置参数 | 见本节的“ASR_CMD_CONFIG 输入参数” |
ASR_CMD_START | 设置启动参数 | 见本节的“ASR_CMD_START” 输入参数” |
ASR_CMD_PUSH_AUDIO | 传递音频数据 | 见本节的“ASR_CMD_PUSH_AUDIO” 输入参数” |
ASR_CMD_STOP | 停止当前音频流输入 | 无 |
ASR_CMD_CANCEL | 取消当前的整个识别过程 | 无 |
BDSSDKMessage params;
params.name=ASR_CMD_CONFIG; // 这里设置name
params.set_parameter(xxxx, yyyyy);// 根据文档或者demo,设置参数
bool is_success =sdk->post(params, err_msg)); // 发送这个命令
bool 表示 int =0 (关闭)和 =1 (开启) 的值
参数名 | 参数类型 / 值 | 必填选填 | 常用程度 | 说明 |
---|---|---|---|---|
ASR_PARAM_KEY_APP_ID | string | 必填 | 常用 | 您在网站上申请的应用appId |
ASR_PARAM_KEY_API_KEY | string | 必填 | 常用 | 您在网站上申请的应用appKey |
ASR_PARAM_KEY_PRODUCT_ID | int | 必填 | 常用 | 根据需要识别的语言,及模型选择一个PID值,中文搜索模型是1536。具体值见上一个表格,PRODUCT_ID。 |
ASR_PARAM_KEY_MAX_SPEECH_PAUSE | float | 选填 | 常用 | 默认值70帧(=700ms)。VAD检测xxx帧 静音后认为一句话结束。 一帧 = 10ms |
ASR_PARAM_KEY_SAVE_AUDIO_ENABLE | bool | 选填 | 常用 | 默认关闭,用于保存识别过程中的音频数据 |
ASR_PARAM_KEY_SAVE_AUDIO_PATH | string | 选填 | 常用 | 保存音频文件路径,ASR_PARAM_KEY_SAVE_AUDIO_ENABLE开启后生效,默认路径为程序启动目录下的sdk_save_audio.d里。音频文件以单次识别为分割,文件以日期命名,精确到微秒,后缀为.pcm |
COMMON_PARAM_KEY_DEBUG_LOG_LEVEL | TBDVoiceRecognitionDebugLogLevel | 选填 | 常用 | 设置日志级别,日志可以使用open_log_file保存到文件中 |
EVRDebugLogLevelOff | 默认 | 不常用 | 关闭日志,仅测试是使用 | |
EVRDebugLogLevelTrace | 常用 | 开启所有日志, 反馈请开启这个级别日志 | ||
ASR_PARAM_KEY_COMPRESSION_TYPE | TBDVoiceRecognitionAudioCompressionType | 选填 | 不常用 | SDK内部传输到百度服务端的音频流压缩格式,仅仅在与百度服务端通讯带宽不够的情况下设置。注意此处不是输入格式。输入格式见ASR_PARAM_KEY_SAMPLE_RATE。 |
EVR_AUDIO_COMPRESSION_PCM | 推荐 | 常用 | 不压缩,以原始音频pcm格式上传。 | |
EVR_AUDIO_COMPRESSION_BV32 | 默认 | 不常用 | BV有损压缩格式传输,8倍压缩 | |
EVR_AUDIO_COMPRESSION_AMR | 不常用 | AMR有损压缩格式传输,16倍压缩 | ||
ASR_PARAM_KEY_SAMPLE_RATE | BDVoiceRecognitionRecordSampleRateFlags | 选填 | 固定值 | 原始音频的采样率。输入音频流的音频格式为raw,或者是pcm文件输入流。单声道,16bits, 小端序 |
EVoiceRecognitionRecordSampleRate16K | 默认 | 常用 | 16000的采样率,推荐 | |
ASR_PARAM_KEY_DISABLE_PUNCTUATION | bool | 选填 | 固定值 | 固定值1,仅当不需要标点时将其设置为0 |
ASR_PARAM_KEY_CHUNK_ENABLE | bool | 必填 | 固定值 | 固定值1 |
ASR_PARAM_KEY_MFE_DNN_DAT_FILE | string | 必填 | 固定值 | 固定值为bds_easr_mfe_dnn.dat文件的路径 |
ASR_PARAM_KEY_MFE_CMVN_DAT_FILE | string | 必填 | 固定值 | 固定值为bds_easr_mfe_cmvn.dat文件的路径 |
参数名 | 参数类型 / 值 | 必填 | 说明 |
---|---|---|---|
ASR_PARAM_KEY_APP | string | 必填 | 您自己应用的名称, 英文字母数字及下划线 |
ASR_PARAM_KEY_PLATFORM | string | 必填 | 固定值 "Linux" |
ASR_PARAM_KEY_SDK_VERSION | string | 必填 | 固定值 "sdk3.0", 该值随版本而定,具体参见demo |
传输方式见:”接口使用及调用流程:传递音频数据“一节。
参数名 | 参数类型 / 值 | 必填 | 说明 |
---|---|---|---|
DATA_CHUNK | 二进制 及其长度 | 是 | 传入音频流二进制数组及长度,长度为0表示音频流结束 |
void asr_output_callback(bds::BDSSDKMessage& message, void* user_arg);
sdk->set_event_listener(&asr_output_callback, (void*)& thread_seq);
// 此例中 thread_seq会作为user_arg参数,传入asr_output_callback回调。
asr_output_callback 中的BDSSDKMessage message参数解析如下: message.name 必定为bds::asr_callback_name message.get_parameter(bds::CALLBACK_ASR_STATUS, status) 获取status,根据status值有如下表格
status | 含义 | 参数 |
---|---|---|
EVoiceRecognitionClientWorkStatusStartWorkIng | 引擎准备完毕 | 无 |
EVoiceRecognitionClientWorkStatusFlushData | 临时结果 | CALLBACK_ASR_RESULT, 具体见下面表格 |
EVoiceRecognitionClientWorkStatusFinish | 最终结果 | CALLBACK_ASR_RESULT, 具体见下面表格 |
EVoiceRecognitionClientWorkStatusLongSpeechEnd | 开启长语音模式时(默认开启),整个音频流识别结束。该事件表示音频流识别结束。 | 无 |
EVoiceRecognitionClientWorkStatusChunkNlu | 语义理解结果 | DATA_CHUNK, 具体见下面表格 |
EVoiceRecognitionClientWorkStatusError | 识别出错 | 具体见下面EVoiceRecognitionClientWorkStatusError表格 |
EVoiceRecognitionClientWorkStatusCancel | 用户手动取消的回调 | 无 |
用于EVoiceRecognitionClientWorkStatusFlushData 及 EVoiceRecognitionClientWorkStatusFinish
std::string json_result;
message.get_parameter(bds::CALLBACK_ASR_RESULT,json_result);
json_result 为json字符串,解析后有如下参数:
key | 类型 | 说明 |
---|---|---|
results_recognition | string array | 识别结果数组,可能有多个,请取第一个为识别结果 |
origin_result["sn"] | string | 代表一句话识别的logId |
origin_result["sn_start_time"] | string | 该识别结果对应的音频开始时间 |
origin_result["sn_end_time"] | string | 该识别结果对应的音频结束时间 |
const char* buf;
int len = 0;
message.get_parameter(bds::DATA_CHUNK, buf, len);
// std::string result(buf, len); // 转为string
具体解析的json解析结果请参见”语义理解协议“ 文档
key | 类型 | 说明 |
---|---|---|
CALLBACK_ERROR_CODE | int | 错误码 |
CALLBACK_ERROR_DOMAIN | int | 错误领域 |
CALLBACK_ERROR_DESC | string | 错误描述 |
CALLBACK_ERROR_SERIAL_NUM | string | 代表一句话识别的logId |
如果初步反馈,请将这4个值一起反馈。具体bug反馈请开启EVRDebugLogLevelTrace, 给出完整日志。
注意把日志开启(EVRDebugLogLevelTrace级别)
EVRClientErrorCodeServerSpeechQualityProblem错误会被sdk吞掉,: 音频质量有问题。因为即使后端检测到音频质量问题,识别仍可继续,所以用户回调中看不到,只能在日志中能看到。
语音识别错误会被分类,具体见TVoiceRecognitionClientErrorDomain的定义。
加粗为用户侧发生的常见错误
DOMAIN | CODE | 值 | 主要来源 | 描述 |
---|---|---|---|---|
EVRClientErrorDomainRecord | 10 | SDK | 未知错误 | |
EVRClientErrorDomainVAD | 20 | SDK | 语音数据处理VAD过程出错 | |
EVRClientErrorCodeVADException | 1 | SDK | 前端库VAD异常 | |
EVRClientErrorCodeNoSpeech | 2 | 用户音频流 | 用户未说话 | |
EVRClientErrorCodeShort | 3 | 用户音频流 | 用户说话声音太短 | |
EVRClientErrorDomainOnline | 30 | 用户/服务端 | 在线识别引擎出错 | |
EVRClientErrorCodeOnlineExceptioin | 1 | 用户/服务端 | 在线识别引擎异常 | |
EVRClientErrorCodeOnlineNetworkUnavailable | 2 | 用户音频流 | 网络不可用 | |
EVRClientErrorCodeOnlineTokenFailed | 3 | 用户 | 获取token失败 ,请检测appId appKey appSecret是否填写正确 | |
EVRClientErrorCodeOnlineResolveUrlFailed | 4 | 用户 | 解析url失败,请检测网络状态 | |
EVRClientErrorDomainLocalNetwork | 31 | 用户 | 连接百度服务端的网络问题,先确认联网是否正常 | |
EVRClientErrorCodeLocalTimeout | 1 | 用户 | 请检测网络状态,请求百度服务器连接超时 | |
EVRClientErrorDomainHTTP | 32 | 用户/服务端 | HTTP协议错误。或日志中出现http status不等于200而出错,这与通常的http访问一样,先检查网络状况,如果网络状况正常,可反馈 | |
EVRClientErrorDomainServer | 33 | 用户/服务端 | 服务器返回错误 。或日志中出现-300X,均是后端返回的错误,除了-3005外可尝试重试。 | |
EVRClientErrorDomainServer | -3001 | 服务端 | 后端从SDK读数据失败,可能是sdk检测到后端超时,断开了连接,重试 | |
EVRClientErrorCodeServerRecognError | -3002 | 服务端 | 识别过程出错 | |
EVRClientErrorCodeServerNoFindResult | -3003 | 服务端 | 协议参数错误 | |
EVRClientErrorCodeServerAppNameUnknownError | -3004 | 用户 | appId appKey appSecret填写错误 或流量超过限制 | |
EVRClientErrorCodeServerSpeechQualityProblem | -3005 | 用户 | 声音不符合识别要求,通常是语音质量问题或采样率设的不对 。如果确认那块(报错的句子所处的音频位置段)音频没问题,可再检查采样率和别的识别参数有误问题。 音频质量问题,自查对应位置的音频,通常忽略该问题 | |
EVRClientErrorCodeServerSpeechTooLong | -3006 | 用户 | 语音过长,确认是否开启了本地vad,以及vad门限是否过大 | |
-3007 | SDK/服务端 | 后端检测到sdk传递的数据类型不对,通常不会出现,出现则重试 | ||
EVRClientErrorCodeServerSpeechParamsUnknow | -3008 | 服务端 | 上行参数未知,(可能是gzip解压失败) 后端检测到sdk传递的json参数不对,通常不会出现,出现则重试 | |
EVRClientErrorCodeServerSpeechNoUploadLink | -3011 | 用户网络 | 上行流建立失败,可能跟网络状况或后端有关,重试 | |
-3012 | 用户网络 | 下行流建立失败,可能跟网络状况或后端有关,重试 | ||
-3013 | 服务端 | 后端错误 | ||
-3014 | 用户 | 用户自己取消,忽略之 | ||
EVRClientErrorDomainOffline | 34 | 服务端 | 未知错误 | |
EVRClientErrorCodeRecoderException | 1 | SDK | 未知错误 | |
EVRClientErrorCodeRecoderNoPermission | 2 | SDK | 未知错误 | |
EVRClientErrorCodeRecoderUnAvailable | 3 | SDK | 未知错误 | |
EVRClientErrorCodeInterruption | 4 | SDK | 未知错误 | |
EVRClientErrorDomainCommon | 40 | 其它错误 | ||
EVRClientErrorCodeServerSpeechNoUploadLink | 4095 | SDK | 识别器忙 | |
EVRClientErrorCodeCommonPropertyListInvalid | 2 | 用户 | 垂类设置有误 | |
EVRClientErrorCodeCommonEnqueueError | 3 | 用户 | 语音数据enqueue失败 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。