问题调试及错误码
问题调试
- 日志目录
${SERVER_ROOT}/mrcp-server/log/
记录了mrcp运行的相关的日志信息,有问题时可查看mrcp_debug.log进行debug。也可查看unimrcpserver-00.log查看mrcp交付过程。 - 当前MRCP同时支持一个channel一次请求和一个channel多次请求。
log/mrcp_debug.log
中的logid形如6a373e36722811e9_2_1,其中的2表示一个channel的请求id,系统生成,不连续。可使用6a373e36722811e9搜索一个channel的全部日志。 ${SERVER_ROOT}/mrcp-server/audio
目录保存了语音识别时上传的用户话音以及语音合成时下发的合成语音,以日志中本次请求的logid或sn的名字命名。可与日志文件中的logid进行关联排查错误。- 本程序默认sip端口为5060,在
${SERVER_ROOT}/mrcp-server/conf/unimrcpserver.xml
中配置。如果用户修改该端口,则在程序验证时,需修改${SERVER_ROOT}/mrcp-server/conf/client-profiles/unimrcp.xml
中的端口为相应的值。 - 通过
unimrcpserver_control
脚本启动服务失败时,则在${SERVER_ROOT}/mrcp-server/
目录下,使用./bin/unimrcpserver -r . &
命令启动,以便查看打印的错误信息。 ./bin/unimrcpserver -r . &
启动时报错:
bash: ./bin/unimrcpserver: /opt/compiler/gcc-8.2/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
则说明bootstrap.sh没有执行,或执行失败。请参考README文件,进行gcc-8.2手动配置
- 通过
unimrcpserver_control
脚本启动,正常情况下等待5秒左右即可完成。如长时间打印验证信息,则很可能启动失败。请检查日志文件,unimrcpserver-00.log
中出现[asr_engine_open] init ConfigManager failed
字样时,可能是mrcp-xxx.conf配置文件格式书写错误。 - 高并发情形下,
${SERVER_ROOT}/mrcp-server/conf/unimrcpserver.xml
中的配置需要做相应修改,详见程序内README文件。 - 高并发情形下,需要调大系统最大允许打开句柄数。在root账户下执行:
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
- 高并发情况下,出现
No buffer space available
时,请调大相应内核参数:
echo "65535" > /proc/sys/net/ipv4/xfrm4_gc_thresh
错误码
当识别或合成出错时,日志中会打印相应错误码,它们的含义如下:
err_no | 含义 |
---|---|
0 | 正确 |
-1 | 用户挂断 |
-2 | 音频质量问题,可能全是静音 |
-3 | 音频过长(超过默认55秒) |
-10 | 语音识别/合成后端未知错误 |
-11 | 等待用户语音超时 |
-12 | 语音解码器错误 |
-13 | 与后端连接被关闭 |
-14 | 等待后端结果超时 |
-15 | 连接百度服务鉴权失败 |
-16 | 连接百度服务失败 |
-17 | 语音识别失败 |
-20 | 语音合成文本为空 |
-21 | 语音合成文本过长 |
-22 | 从服务器拉取合成文本失败 |
-23 | 语音合成文本格式错误 |
-24 | 语音合成传递参数错误 |
常见问题
配置或网络问题:
Q:用户侧呼叫软件提示“407 COMPLETE”错误信息
A:检查log/mrcp_debug.log日志。看是否存在连接超时、请求参数不正确等错误。
Q:mrcp服务端口号如何配置?
A:在conf/unimrcpserver.xml进行配置,默认SIP端口5060。如果公司有防火墙限制,请记得打开相应端口。
Q:提示service unavailiable,MRCP session错误等
A:可能是mrcp server没有启动成功、网络不通等。如果使用MRCP自带测试工具测试正常,则可能是用户前端配置错误。
Q:提示“MRCP session has not opened after 5000 ms”错误
A:检查log/mrcp_debug.log日志。若无错误信息,则需检查FreeSWITCH配置。
Q:是否可以使用${SERVER_ROOT}/mrcp-server/bin中的asrclient进行识别?
A:asrclient仅为辅助测试验证工具,如果用来识别较长的音频,则可能会因说话停顿被VAD截断导致不能完全识别。
Q:是否有VAD功能?
A:系统自带VAD功能。
Q:语音识别时,日志中出现err_no:-2错误
A:音频不够清晰或者有环境噪声被误识别。可检查audio目录下相应音频是否清晰。相关错误码可查看错误码
部分。
Q:是否可通过发送超时时间参数,用户在该时间内不说话则认为超时?
A:conf/mrcp-asr.conf中NO_INPUT_TIMEOUT_MS为全局默认超时时间,每次请求都有效。用户也可通过发送RECOGNIZER_HEADER_NO_INPUT_TIMEOUT自行设置单次请求超时时间,默认请求开始时开始计时。用户可通过在请求时发送RECOGNIZER_HEADER_START_INPUT_TIMERS为false设定开始时不计时,然后在合适的时机,发送RECOGNIZER_START_INPUT_TIMERS事件开始计时。
Q:是否有办法使用asrclient 批量识别多个文件 ?
A:不支持,请自行开发前端呼叫软件。
Q:合成日志出现“not supported voice name”错误
A:合成目前仅支持conf/mrcp-proxy.conf里默认配置的发音人。请不要在请求时设置SYNTHESIZER_HEADER_VOICE_NAME,或者设置为与配置中相同的发音人 fduxiaowen
Q:使用FreeSWITCH软电话听不到TTS声音
A:检查MRCP服务器audio目录下的pcm是否有生成的TTS音频。若存在正确音频,则MRCP TTS功能正常。需检查FreeSWITCH相关配置。
Q:在mrcp_debug.log里出现unsupportedcontent_type:application/xml是什么原因?
A:根据标准,识别请求content_type要写成application/srgs+xml、text/uri-list等。
Q:unimrcpserver.xml里面的sip-ip和sip-ext-ip应该怎么填写?sip-ip是本地ip,那sip-ext-ip呢?
A:sip-ext-ip文档中未要求填写,不用填写。
Q:mrcp server是在检测800ms无用户说话语音输入时,就认为一段话结束,执行asr吗?还是用户边说话边asr吗?
A:根据传送的语音流实时识别,默认识别时长55秒,说话间隔超过800ms截断。
Q:请问你们MRCP server返回的格式支持 NLSML 数据格式吗?
A:现在返回的识别结果,content-type就是application/nlsml+xml的。
Q:MRCP返回检测到说话得消息比较灵敏,噪声误识别有什么办法优化嘛?
A:可以在mrcp-asr.conf中DETECT_START_OF_INPUT_BY_VAD参数设置为0。参数改为0后,单字识别结果将会被忽略,只有SINGLE_WORD_WHTIL_LIST白名单中的单字可以被识别。
Q:遇到问题如何求助
A:可以将audio下相应logid的所有音频及log/mrcp_debug.log日志文件发送至bsic-support@baidu.com。
问题反馈
问题反馈及商务沟通请联系:
邮箱:bsic-support@baidu.com