GAE "The API call urlfetch.Fetch() required more quota than is available" 当可恢复上传视频文件



我的GAE应用程序从Drive by Drive API读取文件到FileStream,然后FileStream通过Youtube API v3上传到Youtube,带有" resume upload"。当文件大小变大时(例如60M), Youtube API返回此错误" API调用urlfetch.Fetch()需要比可用的更多的配额"

我也试过用"直接上传"上传60米大小的视频文件,然后错误消息将". lang。OutOfMemory: Java堆空间在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应用程序只能在一定时间内发送一定数量的请求。由于"可恢复上传"将文件流分解成块,并按请求序列发送它们,因此很容易达到极限。如果我猜对了,极限是多少?我怎么解决这个问题呢?如果我猜错了,你认为问题出在哪里?

谢谢

谢谢大家!

这里是输入&GAE中URL获取的输出带宽:https://developers.google.com/appengine/docs/quotas

默认为22M/min,启用话单功能后,上限为740M/min。因此,在22M/min的限制下,GAE任务队列可以向Youtube上传约220M的视频文件(22M * 10min)

但是这会导致使用上部代码

的问题
Video returnedVideo = videoInsert.execute();

,因为我们无法控制在该代码中每分钟发送多少块。我所做的解决方案是按照以下链接中的描述来处理我自己的每个请求。https://developers.google.com/youtube/v3/guides/using_resumable_upload_protocol通过这种方式,我们可以控制每分钟可以发送的流的大小。

相关内容

最新更新