Intereting Posts
как отображать несколько изображений (blob) из mysql с помощью php? Как изменить размер изображения без сохранения его в папке Полное имя с действующим адресом электронной почты Динамически создавать поля ввода со значениями и именами столбцов из базы данных Массив с ассоциативным массивом – удаление дубликатов вставить несколько полей, используя цикл foreach Как структурировать модульное приложение в Laravel 5? Перевод сообщений об ошибках проверки формы CodeIgniter Как анализировать источник файлов .ini как объекты Вы только запускаете htmlspecialchars () на выходе или есть другие функции, которые вы также делаете? Был запрошен псевдоним «ScnSocialAuth_ZendSessionManager», но никакая служба не найдена Использование DOMDocument для анализа HTML с помощью JS-кода Многомерные массивы PHP – создание и чтение данных PHP – конвертировать unicode в символ Получение переменной объекта с помощью строки + переменной

Опубликуйте большое видео на youtube через google php client api v3

Я пытаюсь загрузить большие видео на 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); }