Python中Azure认知服务异步语音识别问题排查
Azure STT 推送音频取消错误排查
核心问题分析
你收到的ResultReason.Canceled错误缺少关键诊断信息,先补全错误详情是定位问题的核心步骤。
具体排查步骤
1. 补全取消事件的错误详情
修改on_canceled方法,打印具体错误代码和原因,直接定位问题类型:
def on_canceled(self, evt): print('Canceled: {}'.format(evt)) # 新增:输出关键错误信息 if evt.reason == speechsdk.CancellationReason.Error: print(f"错误代码: {evt.error_code}") print(f"错误详情: {evt.error_details}")
2. 检查音频数据格式匹配
你指定的是8kHz、16位单声道原始PCM格式,但RTP包是经过编码的音频(如G.711、OPUS),Azure STT不支持直接接收RTP封装的数据包:
- 必须先解码RTP包,得到原始的16位小端字节序PCM数据
- 确保
send方法传入的audio_data_buffer是纯PCM字节流,而非RTP包
3. 修正识别器启动时序
start_continuous_recognition_async()是异步方法,可能会话未完全启动就推送音频,需等待异步操作完成:
# 替换原启动代码 start_task = self.speech_recognizer.start_continuous_recognition_async() start_task.wait() # 等待识别器完全启动
4. 验证订阅信息正确性
确认config_ai.json中的密钥和区域与Azure门户Speech资源完全一致,区域格式需为短代码(如eastus),不能有拼写错误或多余字符。
5. 用标准PCM数据做基础测试
排除RTP解码问题,先用本地原始PCM文件测试推送:
# 测试代码:读取本地8kHz/16位/单声道PCM文件并推送 with open("test_8k16mono.pcm", "rb") as f: data = f.read(1024) while data: azure_stt.send(data) time.sleep(0.01) data = f.read(1024)
常见错误对应场景
AuthenticationFailure:密钥无效或区域不匹配BadRequest:音频格式不匹配(推送了编码后的音频而非原始PCM)ConnectionFailure:网络阻塞或防火墙拦截了Azure服务连接
内容的提问来源于stack exchange,提问作者Sstack324
相关产品推荐
相关产品推荐

