我尝试使用Speech API客户端API将音频文件转换为文本。
到目前为止,我已经成功转换了一个简短的音频片段,但现在有了更长的文件(10分钟),我收到了这个错误:
Retry total timeout exceeded before anyresponse was received
我已在docs中读到,通过异步通话,每次通话的最大分钟数为60,我已将文件上传到Google云端存储,因为文件需要超过1分钟。
所以我真的不明白为什么我会收到这个错误,有什么帮助?
答案 0 :(得分:1)
默认情况下,系统超时为10分钟。 This is a known issue for other Google Cloud services,但是修复建议不适用于我,我认为在运行代码并开始连接时需要设置其他内容。
无论如何,有一个解决方法!您获得长时间运行的操作名称,然后停止您的程序。该操作将在谷歌服务器上继续,稍后您将获取结果!
异步语音识别启动长时间运行的音频处理操作。
我将在这里引用node.js
示例,类似的概念将适用于其他人。
因此,当您收到回复时(请勿使用承诺版本),请将回调传递给like explained here,而不是
operation
.on('error', function(err) {})
.on('complete', function(transcript) {
// transcript = "how old is the Brooklyn Bridge"
});
做一些像
这样的事情console.log(operation)
记下操作名称,稍后使用the operation method
答案 1 :(得分:1)
对于遇到此问题的其他人,Google现在已通过删除超时值修复了此错误。见https://github.com/googleapis/gax-nodejs/pull/140/files 在更新到最新的google-gax npm软件包之后,我的语音api请求现在可以成功运行。
答案 2 :(得分:0)
我没有找到将超时设置为超过10分钟的正确方法,因此我直接修改了node_modules/google-gax/lib/longrunning.js
。
有一个名为backoffSettings
的变量保存超时值,它是对createBackoffSettings
中函数node_modules/google-gax/lib/gax.js
的调用。
在我修改该变量之前,它是这样的:
backoffSettings =
createBackoffSettings(100, 1.3, 60000, null, null, null, 600000);
我将其更改为处理1小时超时:
backoffSettings =
createBackoffSettings(100, 1.3, 60000, null, null, null, 3600000);
createBackoffSettings
函数调用中的最后一个参数是totalTimeoutMillis
,如您所见默认为10分钟。
如果有人知道更好的处理方式,请分享。 希望它有所帮助。