我的 GAE 应用程序通过 Drive API 将 Drive 中的文件读取到 FileStream 中,然后通过 Youtube API v3 将 FileStream 上传到 Youtube,并带有“可恢复上传”。当文件大小变大(例如 60M )时,Youtube API 返回此错误“ API 调用 urlfetch.Fetch() 需要的配额比可用的多”
我也尝试使用“直接上传”来上传 60M 大小的视频文件,然后错误消息将是“java.lang.OutOfMemory: Java heap space at com.google.protobuf.ByteString.copyFrom (ByteString.java:178)”。
这是我的代码的简短版本:
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(YouTubeScopes.YOUTUBE)
.setServiceAccountPrivateKeyFromP12File(new File(P12))
.setServiceAccountUser(account).build();
YouTube service = new YouTube.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName("VSP").build();
Video videoObjectDefiningMetadata = new Video();
VideoSnippet snippet = new VideoSnippet();
snippet.setTitle(title);
videoObjectDefiningMetadata.setSnippet(snippet);
InputStreamContent mediaContent = new InputStreamContent(VIDEO_FILE_FORMAT, new BufferedInputStream(filestream));
mediaContent.setLength(filesize);
YouTube.Videos.Insert videoInsert = service.videos().insert("snippet,statistics,status", videoObjectDefiningMetadata, mediaContent);
MediaHttpUploader uploader = videoInsert.getMediaHttpUploader();
uploader.setDirectUploadEnabled(false);
uploader.setChunkSize(7864320);
Video returnedVideo = videoInsert.execute();
错误消息“API 调用 urlfetch.Fetch() 需要的配额超过可用配额”出现在代码的最后一行。有时通过设置不同的ChunkSize可以成功完成上传并显示错误消息,有时则不会。
我找不到有关此错误消息的任何有用信息。但我的猜测是,GAE 应用程序只能在一定时间内发送一定数量的请求。由于“可恢复上传”将文件流分成块,并按一系列请求发送它们,因此很容易达到限制。如果我的猜测是正确的,那么限制是多少?我该如何解决这个问题?如果我的猜测是错误的,您认为问题出在哪里?
谢谢