Я пытаюсь загрузить большие видео на youtube через последнюю версию клиента google api (v3, последний проверенный источник)
У меня есть публикация видео, но единственный способ заставить его работать – это прочитать все видео в строку, а затем передать его через параметр данных.
Я, конечно, не хочу читать гигантские файлы в памяти, но api, похоже, не предлагает другого способа сделать это. Кажется, в качестве параметра data
ожидается строка. Ниже приведен код, который я использую для публикации видео.
$snippet = new Google_VideoSnippet(); $snippet->setTitle("Test title2"); $snippet->setDescription("Test descrition"); $snippet->setTags(array("tag1", "tag2")); $snippet->setCategoryId("22"); $status = new Google_VideoStatus(); $status->privacyStatus = "private"; $video = new Google_Video(); $video->setSnippet($snippet); $video->setStatus($status); $videoData = file_get_contents($pathToMyFile); $youtubeService->videos->insert("status,snippet", $video, array("data" => $videoData, "mimeType" => "video/mp4"));
Есть ли способ опубликовать данные в кусках или каким-то образом передать данные, чтобы избежать чтения всего файла в память?
Похоже, этот прецедент раньше не поддерживался. Вот пример, который работает с самой последней версией PHP-клиента API Google API (с https://code.google.com/p/google-api-php-client/source/checkout ).
if ($client->getAccessToken()) { $videoPath = "path/to/foo.mp4"; $snippet = new Google_VideoSnippet(); $snippet->setTitle("Test title2"); $snippet->setDescription("Test descrition"); $snippet->setTags(array("tag1", "tag2")); $snippet->setCategoryId("22"); $status = new Google_VideoStatus(); $status->privacyStatus = "private"; $video = new Google_Video(); $video->setSnippet($snippet); $video->setStatus($status); $chunkSizeBytes = 1 * 1024 * 1024; $media = new Google_MediaFileUpload('video/mp4', null, true, $chunkSizeBytes); $media->setFileSize(filesize($videoPath)); $result = $youtube->videos->insert("status,snippet", $video, array('mediaUpload' => $media)); $status = false; $handle = fopen($videoPath, "rb"); while (!$status && !feof($handle)) { $chunk = fread($handle, $chunkSizeBytes); $uploadStatus = $media->nextChunk($result, $chunk); } fclose($handle); }