You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:35:56