2013-01-22 4 views
3

Я пытаюсь загружать большие видео на YouTube с помощью последней версии клиентского API Google (v3, последние проверил источник)сообщение большого видео YouTube с помощью Google PHP клиента 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")); 

Есть ли способ, чтобы получить возможность отправлять данные на куски, или поток данных каким-либо образом, чтобы избежать чтения всего файла в память?

+0

Это хороший вопрос. Я попытаюсь это выяснить. –

ответ

4

Похоже, что этот прецедент раньше не поддерживался. Вот пример, который работает с самой последней версией 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); 
} 
+0

Спасибо, что передали это, Чираг! –

+1

Я использую ваш код, но он загружает видео и загружает его в разные части, есть ли способ отправить его сразу? поэтому в конце у меня есть один файл, а не его в разных частях? – J888

+0

Я только что попробовал, он фактически загрузил только одно видео для 15 МБ файла. –

 Смежные вопросы

  • Нет связанных вопросов^_^