我正在尝试将google speech api配置为在公司防火墙内的项目中工作。我已将SpeechSettings配置如下:
InputStream is = this.getClass().getResourceAsStream("/my-service-account.json");
CredentialsProvider credentialsProvider = FixedCredentialsProvider.create(ServiceAccountCredentials.fromStream(is));
SpeechSettings.Builder builder = SpeechSettings.newBuilder();
builder.setTransportProvider(SpeechSettings.defaultTransportProvider());
builder.setCredentialsProvider(credentialsProvider);
SpeechSettings settings = builder.build();
SpeechClient.create(settings);
使用此功能可在代理网络外部正常工作,并启动语音识别会话。但它无法在代理身份验证的网络下转录任何内容,并且在ApiStreamObserver类中超时出现此错误 - UNAVAILABLE: Transport closed for unknown reason
。我认为由于防火墙超时,Grpc传输正在关闭。
创建语音客户端会话时是否可以使用代理身份验证凭据进行身份验证?感谢。
答案 0 :(得分:0)
您能澄清一下您使用的代理网络吗?您使用的是Google Cloud Endpoints(https://cloud.google.com/endpoints)吗?您的项目是否在Google云端平台上运行?如果是这样,具体平台是什么? App Engine Flex? App Engine标准?计算引擎?容器引擎?
答案 1 :(得分:0)
环境变量GRPC_PROXY_EXP
已被弃用,尽管当前仍可以使用,但您应该能够使用标准的Java属性https.proxyHost
和https.proxyPort
。
可以直接在当前JVM中以编程方式设置它们(不推荐):
System.setProperty("https.proxyHost", "myproxy.host.local");
System.setProperty("https.proxyPort", "8080");
或启动JVM时,例如
java .... -Dhtts.proxyHost=myproxy.host.local -Dhttps.proxyPort=8080 ...