使用Youtube Data V3插入视频遇Unauthorized及配额超限问题求助
问题描述
我是刚接触Google Cloud的初级开发者,已完成以下操作:
- 在GCP创建项目
- 启用Youtube Data V3 API
- 为服务账号创建密钥
- 创建Youtube频道
- 按照指定指南将服务账号JSON集成到项目中
尝试从本地上传小于2MB的视频到Youtube时,未成功就因多次触发请求导致配额超限,之前还遇到过Unauthorized(未授权)问题。
附错误截图

代码片段
String localFilePath = "/home/ubuntu/video.mp4"; FileContent videoContent = new FileContent("video/*", new File(localFilePath)); final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); YouTube youTube = new YouTube.Builder(HTTP_TRANSPORT, JSON_FACTORY, new HttpCredentialsAdapter(getServiceCredential())) .setApplicationName("Game") .build(); YouTube.Videos.Insert videoInsert = youTube.videos() .insert(Collections.singletonList("snippet,statistics,status"), videoMetadata, videoContent); private InputStream getCredentialInputStream() throws IOException { InputStream in = YouTubeService.class.getResourceAsStream(CREDENTIAL_PATH); if (in == null) { throw new FileNotFoundException("Resource not found: ".concat(CREDENTIAL_PATH)); } return in; } private GoogleCredentials getServiceCredential() throws IOException { GoogleCredentials credentials = ServiceAccountCredentials.fromStream( Objects.requireNonNull(getCredentialInputStream())) .createScoped(SCOPES); return credentials; }
解决方案
先解决Unauthorized未授权问题
服务账号绑定Youtube频道
服务账号无法直接操作Youtube频道,必须将其添加为频道的所有者或管理者:- 打开Youtube工作室,进入频道设置→权限
- 点击“邀请用户”,输入服务账号的邮箱(从GCP服务账号页面获取),授予“所有者”权限
- 确认邀请后,服务账号才能获得该频道的操作权限
检查权限范围(Scopes)
确保SCOPES包含Youtube Data API的必要上传权限,代码示例:private static final List<String> SCOPES = Arrays.asList(YouTubeScopes.YOUTUBE_UPLOAD, YouTubeScopes.YOUTUBE);避免使用错误或过于宽泛的权限范围。
验证凭证文件加载
确认CREDENTIAL_PATH指向的服务账号JSON文件路径正确,也可尝试直接读取本地文件路径,规避类加载路径问题:private InputStream getCredentialInputStream() throws IOException { return new FileInputStream(new File("/path/to/your/service-account.json")); }
解决配额超限问题
优化请求逻辑,减少无效请求
- 上传前先调用
channels.list接口测试权限有效性,避免无效上传消耗配额 - 给上传请求添加针对性重试机制,仅在网络错误时重试:
videoInsert.setRetryOnServerError(true); videoInsert.setNumberOfRetries(2);
- 上传前先调用
查看并调整配额
- 登录GCP控制台,进入Youtube Data V3 API的配额页面,确认当前配额使用情况
- 测试阶段可申请临时配额提升,需明确说明使用场景
启用分片上传
即使视频小于2MB,启用分片上传也能避免单次请求失败后重复上传消耗配额:videoInsert.setChunkSize(1024 * 1024); // 设置1MB分片大小
内容的提问来源于stack exchange,提问作者Yusuf Musa
相关产品推荐
相关产品推荐

