Google Cloud Speech-to-Text无限流转写报Long duration elapsed without audio如何解决
Google Cloud Speech-to-Text 无限流音频超时报错优化方案
报错google.api_core.exceptions.OutOfRange: 400 Audio Timeout Error的核心触发条件是服务端连续10秒未收到客户端发送的音频数据,结合多设备同步报错的特征,可按以下优先级优化:
网络层优化(优先排查)
- 替换WiFi连接为有线以太网连接,避免WiFi信号干扰、漫游丢包导致的上行数据阻塞;如果必须使用WiFi,固定2.4G/5G信道,避开周边同信道干扰,同时在路由器配置中为3台树莓派设置上行带宽QoS优先级。
- 验证上行网络稳定性,单路语音流要求至少16kbps的稳定上行带宽,可在树莓派中运行
speedtest-cli定时检测上行丢包率,丢包率超过2%时会大概率触发该超时错误。
代码层适配优化
- 新增静默帧自动填充逻辑:预先生成16kHz采样率、16bit位深的静音PCM帧(100ms长度对应1600个全0字节),当麦克风无有效音频采集时,每100ms向服务端发送一帧静音数据,避免服务端判定长时间无音频输入。
- 调整gRPC通道保活参数:创建流式识别请求时,新增gRPC通道配置
keepalive_time_ms=30000、keepalive_timeout_ms=5000,主动发送心跳包维持连接存活,同时确认StreamingRecognitionConfig中single_utterance设置为False。 - 新增异常自动重连逻辑:在程序入口外层增加异常捕获,触发超时错误时自动销毁当前流和gRPC连接,重启采集和推流流程,无需手动重启系统,示例代码如下:
import time import google.api_core.exceptions if __name__ == "__main__": while True: try: main() except google.api_core.exceptions.OutOfRange: time.sleep(1) continue
- 调整音频块发送策略:固定每100ms发送一次音频块,不要攒大块数据发送,同时增加发送队列长度监控,队列积压超过5个音频块时主动丢弃最老的块,避免累计延迟超过10秒。
树莓派设备优化
- 调高Python进程优先级,启动程序时使用命令
sudo nice -n -20 python3 mugenstreaming.py,避免其他后台进程抢占CPU导致音频采集阻塞。 - 关闭树莓派无用后台服务,包括蓝牙、自动更新、桌面环境等,降低系统资源占用。
内容的提问来源于stack exchange,提问作者camellia0216
相关产品推荐
相关产品推荐

