Java客户端实时语音转文本V1迁V2:StreamingRecognizeRequest实现求助
Google Speech-to-Text V2 API 实时流识别迁移实现指南
核心变更点
- 包路径替换:将
com.google.cloud.speech.v1p1beta1.*替换为com.google.cloud.speech.v2.* - 移除
StreamingRecognitionConfig:V2直接将RecognitionConfig嵌入初始请求,无需单独构建流式配置对象 - 请求字段调整:音频数据从
setAudioContent改为setAudio,配置从setStreamingConfig改为setRecognizeConfig
完整迁移代码示例
import com.google.cloud.speech.v2.*; import com.google.protobuf.ByteString; import io.grpc.stub.StreamObserver; import java.io.IOException; public class SpeechV2StreamingExample { public static void main(String[] args) throws IOException { // 使用try-with-resources自动管理客户端生命周期 try (SpeechClient speechClient = SpeechClient.create()) { // 定义响应观察者,处理识别结果 StreamObserver<StreamingRecognizeResponse> responseObserver = new StreamObserver<>() { @Override public void onNext(StreamingRecognizeResponse response) { for (StreamingRecognitionResult result : response.getResultsList()) { String transcript = result.getAlternatives(0).getTranscript(); if (result.getIsFinal()) { System.out.printf("最终识别结果: %s%n", transcript); } else { System.out.printf("临时识别结果: %s%n", transcript); } } } @Override public void onError(Throwable t) { System.err.println("识别流发生错误: " + t.getMessage()); } @Override public void onCompleted() { System.out.println("识别流已结束"); } }; // 创建双向流客户端 StreamObserver<StreamingRecognizeRequest> clientStream = speechClient.streamingRecognizeCallable().splitCall(responseObserver); // 构建基础识别配置 RecognitionConfig recognitionConfig = RecognitionConfig.newBuilder() .setEncoding(RecognitionConfig.AudioEncoding.LINEAR16) .setLanguageCode("en-US") .setSampleRateHertz(16000) .build(); // 发送初始配置请求 StreamingRecognizeRequest configRequest = StreamingRecognizeRequest.newBuilder() .setRecognizeConfig(recognitionConfig) .build(); clientStream.onNext(configRequest); // 模拟连续发送音频数据(实际场景中需从麦克风/音频流读取数据循环发送) byte[] audioChunk = ...; // 替换为实际的音频字节数据 StreamingRecognizeRequest audioRequest = StreamingRecognizeRequest.newBuilder() .setAudio(ByteString.copyFrom(audioChunk)) .build(); clientStream.onNext(audioRequest); // 音频发送完毕后关闭流 clientStream.onCompleted(); } } }
注意事项
- 依赖仅需保留
google-cloud-speech:4.18.0,新版本已内置兼容的Protobuf依赖,无需单独引入 - 确保音频编码、采样率、语言码与配置完全匹配,否则会导致识别失败或结果异常
- 生产环境中需添加音频读取的异常处理,以及流中断后的重连逻辑
内容的提问来源于stack exchange,提问作者Sushant Prasad
相关产品推荐
相关产品推荐

