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

Google Speech-to-Text实时转录超时配置报错499排查

问题分析与解决方案

你的超时配置存在几个潜在问题,结合报错499 The operation was cancelled,可以从以下几点排查修复:

1. 确认Duration的正确导入

首先确保你已经正确导入Protobuf的Duration类型,否则speech_start_timeout的赋值会无效,间接导致服务端异常:

from google.protobuf.duration_pb2 import Duration

2. 规范VoiceActivityTimeout的构造方式

虽然你的写法语法上没问题,但更推荐直接在StreamingRecognitionConfig中嵌套构造VoiceActivityTimeout,避免对象赋值可能带来的隐式问题:

streaming_config = speech.StreamingRecognitionConfig(
    config=config,
    interim_results=False,
    enable_voice_activity_events=True,
    voice_activity_timeout=speech.StreamingRecognitionConfig.VoiceActivityTimeout(
        speech_start_timeout=Duration(seconds=60)
    )
)

3. 调整客户端GRPC超时设置

报错的核心原因大概率是客户端GRPC默认超时短于你设置的60秒语音启动超时,导致客户端主动取消了请求。你需要在调用streaming_recognize时显式设置更长的客户端超时:

# 假设requests是你的音频流生成器
responses = client.streaming_recognize(
    streaming_config,
    requests,
    timeout=3600  # 设置为比speech_start_timeout更长的值,比如1小时
)

4. 确保音频流持续发送(关键)

即使麦克风没有采集到有效语音,也要持续发送静音帧或符合格式的空音频数据,保持GRPC连接活跃。如果流中断,服务端会直接取消操作并返回499错误。比如在音频采集循环中,即使没有声音也要定时发送数据块。

验证逻辑

设置完成后,测试时:

  • 如果60秒内没有检测到语音,服务端会返回speech_start_timeout触发的错误(而非499),这是预期行为
  • 如果在60秒内检测到语音,转录会正常进行

内容的提问来源于stack exchange,提问作者Avanst

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:35:37