调用IBM Watson speech to text的recognize方法返回StreamResetException错误如何解决
错误原因排查与解决方案
这个okhttp3.internal.http2.StreamResetException: stream was reset: INTERNAL_ERROR错误是HTTP/2协议下服务端主动断开请求流抛出的异常,和你提到的两个可能性都有关联,可按以下优先级排查:
1. 优先排查请求时长/音频参数问题
- IBM Watson Speech to Text的同步
recognize接口仅支持最长5分钟的音频转写,如果传入的音频时长超过限制,服务端会主动中断连接抛出该错误,这是该报错最常见的诱因。如果你的音频时长超过5分钟,必须切换为异步转写接口使用。 - 核对
options中指定的音频Content-Type和实际传入的音频格式是否完全匹配,比如实际为MP3格式却标注为audio/wav、采样率参数填写错误,都会导致服务端解析音频失败主动断连。 - 可直接使用同一份音频在Watson官方在线测试工具发起转写请求,先排除音频本身损坏、参数配置错误的问题。
2. 排查客户端配置问题
- 检查你使用的IBM Watson Java SDK版本,旧版本SDK依赖的okhttp组件存在HTTP/2兼容问题,可先将SDK升级到最新稳定版,同时排查项目依赖中是否存在低版本okhttp的版本冲突。
- 显式配置客户端超时参数,避免客户端主动断连,示例配置如下:
// 初始化service后添加超时配置 HttpConfigOptions config = new HttpConfigOptions.Builder() .connectTimeout(60, TimeUnit.SECONDS) .writeTimeout(120, TimeUnit.SECONDS) .readTimeout(300, TimeUnit.SECONDS) // 若升级后仍报错,可添加以下配置强制使用HTTP/1.1绕过HTTP/2兼容问题 // .disableHttp2() .build(); service.configureClient(config); SpeechRecognitionResults transcript = service.recognize(options).execute();
- 可添加指数退避重试机制,针对该类连接中断错误做2-3次重试,排除偶发的网络波动影响。
3. 排查服务端异常
如果以上配置都正常,可确认你所用的Watson服务实例对应区域是否存在服务故障公告,临时服务端故障也会触发该类报错,可更换区域实例或延后重试验证。
内容的提问来源于stack exchange,提问作者Alvina Lakhani
相关产品推荐
相关产品推荐

