Twilio Media Streams+Google Speech-to-Text Python转录失败求助
排查Twilio Media Streams + Google Speech-to-Text Python转录无输出问题
关键排查点
1. 音频格式解析是否匹配
- Twilio推送的是
audio/x-mulaw(8kHz单声道)格式音频,需确认Python端处理逻辑:- 对收到的base64编码音频块执行
base64.b64decode()解码,再传入Google Speech-to-Text - Google API配置需明确指定编码和采样率:
config = speech.RecognitionConfig( encoding=speech.RecognitionConfig.AudioEncoding.MULAW, sample_rate_hertz=8000, language_code="en-US" # 匹配实际通话语言 ) streaming_config = speech.StreamingRecognitionConfig(config=config, interim_results=True)
- 对收到的base64编码音频块执行
2. 流式识别会话管理是否正确
- 对比JavaScript版本的会话逻辑:
- 收到Twilio的
start事件时,初始化Google Speech-to-Text的流式识别会话 - 每个
media事件触发时,将解码后的音频块封装成StreamingRecognizeRequest并发送 - 收到
stop事件时,主动结束流式会话,确保API返回最终转录结果
- 收到Twilio的
3. WebSocket连接配置是否合规
- Twilio Media Streams依赖WebSocket传输音频,需检查:
- Python服务器的WebSocket库(如
flask-sock、websockets)是否正确配置,能正常接收Twilio的连接请求 - 处理Twilio初始POST请求时,返回正确的XML响应以启动流:
<Response> <Start> <Stream url="wss://your-server-domain/ws-endpoint"/> </Start> <Say>Go ahead, I'm listening.</Say> </Response> - 确认WebSocket连接建立后,未遗漏
media事件的监听,确保所有音频块都被捕获
- Python服务器的WebSocket库(如
4. 错误与日志排查
- 在Python代码中添加细粒度日志:记录WebSocket事件类型、音频块大小、Google API请求/响应状态
- 验证Google服务账号密钥是否正确加载,API配额是否充足,无权限或限流问题
- 检查是否有未捕获的异常:比如音频解码失败、流式会话中断等,这些异常可能未暴露但导致转录终止
5. 音频块传输时序是否一致
- 确保Python按Twilio推送的顺序发送音频块给Google API,无丢包或乱序情况
- 确认每个音频块都被正确封装到
StreamingRecognizeRequest的audio_content字段中,格式与JS版本完全对齐
内容的提问来源于stack exchange,提问作者Carlo
相关产品推荐
相关产品推荐

