使用RecognitionAudio.fromStream调用谷歌语音转文本API遇权限错误求助
谷歌Speech-to-Text API fromStream权限问题解决方案
问题背景
使用谷歌Speech-to-Text API时,以下两种方式均可正常转录音频文件:
使用fetchFromUri的代码示例:
var file = RecognitionAudio.fetchFromUri(fileUri); var longRunningRecognizeOperation = speech.LongRunningRecognize(config, file);
使用fetchFromStorageUri的代码示例:
var storageFile = RecognitionAudio.fetchFromStorageUri(gsStorageUri); var longRunningRecognizeOperation = speech.LongRunningRecognize(config, storageFile);
但使用fromStream方式时:
var audioStream = RecognitionAudio.fromStream(fileStream); var longRunningRecognizeOperation = speech.LongRunningRecognize(config, audioStream);
收到错误提示:
"The caller does not have permission"
项目已使用服务账号密钥JSON文件,需配置额外权限让RecognitionAudio.fromStream正常工作。
解决方案
- 确认服务账号的角色权限:
确保服务账号已分配roles/speech.speechRecognitionUser角色,该角色允许调用Speech-to-Text API的所有识别操作(包括流式识别)。如果之前仅配置了云存储相关角色(如roles/storage.objectViewer),仅能支持从存储URI调用,无法覆盖流式识别的权限需求。 - 验证服务账号密钥的有效性:
检查代码中是否正确加载了目标服务账号的密钥文件:- 可通过设置环境变量
GOOGLE_APPLICATION_CREDENTIALS指向密钥文件绝对路径; - 或在代码中显式加载密钥内容,确保使用的密钥对应已配置正确角色的服务账号,避免密钥与服务账号不匹配。
- 可通过设置环境变量
- 检查API访问限制:
登录谷歌云控制台,进入「API和服务」→「凭据」,查看对应服务账号的API访问限制,确认未限制Speech-to-Text API的访问权限,确保流式识别端点可正常调用。 - 排查音频流格式匹配性:
虽然错误提示为权限问题,但音频流格式与RecognitionConfig配置不匹配时,也可能触发异常。确认流的编码格式(如LINEAR16)、采样率、声道数等参数与配置完全一致。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

