You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:58:35