Я попробовал два способа загрузки больших файлов на YouTube, но ни один из них не работает, у каждого есть свои проблемы, и я хочу найти правильный ответ на загрузку больших файлов.
Первый метод:
Он разбивает большие файлы на разные части и вместо того, чтобы отправлять их отдельно и загружать их сразу, он загружает их отдельно. Поэтому в конце у меня есть длинный список разгружаемых различных частей файла на Youtube, а не один файл.
Код метода 1
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); }
Я нашел этот вопрос, который его код ответа похож на google_mediaFileupload, но я не уверен, как его использовать.
Второй метод
Я также пытаюсь использовать возобновляемую загрузку для их загрузки, но когда я использую следующий код, он сталкивается с следующей ошибкой:
Код метода 2
<?php require_once 'google-api-php-client/src/Google_Client.php'; require_once 'google-api-php-client/src/contrib/Google_YouTubeService.php'; require_once 'google-api-php-client/src/service/Google_MediaFileUpload.php'; session_start(); $client = new Google_Client(); $client->setApplicationName('Google+ PHP Starter Application'); $client->setClientId('My Client ID'); $client->setClientSecret('My secret code'); $client->setRedirectUri('http://localhost:8888/mymediaapp2/uploadvideo.php'); $client->setDeveloperKey('My developer key'); $client->setScopes("https://www.googleapis.com/auth/youtube.upload"); $youTubeService = new Google_YoutubeService($client); if (isset($_GET['code'])) { $client->authenticate(); $_SESSION['token'] = $client->getAccessToken(); $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); } if (isset($_SESSION['token'])) { $client->setAccessToken($_SESSION['token']); } if ($client->getAccessToken()) { echo "here"; $json = $client->getAccessToken(); $jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); $myvar = ""; foreach ($jsonIterator as $key => $val) { if($key == "access_token") echo "val is" .$val; } $service_url = 'https://www.googleapis.com/upload/youtube/v3/videos? uploadType=resumable&part=snippet,status'; $c = curl_init($service_url); $curl_post_data = array( "Authorization" => $val, "Content-Length" => '255', "Content-Type" => 'application/json; charset=UTF-8', "X-Upload-Content-Length" => '30000', "X-Upload-Content-Type" => 'video/mov' ); curl_setopt($c, CURLOPT_RETURNTRANSFER, true); curl_setopt($c, CURLOPT_POST, true); curl_setopt($c, CURLOPT_POSTFIELDS, $curl_post_data); $curl_resp = curl_exec($c); curl_close($c); echo $curl_resp; }else { $authUrl = $client->createAuthUrl(); print "<a href='$authUrl'>upload</a>"; } ?>
Ошибка метода 2
{ "error": { "errors": [ { "domain": "global", "reason": "required", "message": "Login Required", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Login Required" } }
Обратите внимание, что я дал 50 бонусов одному из ответов на решение одной из проблем кода. Хотя проблема еще не решена.
Вы забыли установить ключ API, и вы можете использовать возобновляемую загрузку.
Вы должны создать проект в своей Консоли Dev и получить свой идентификатор клиента и секрет с этой консоли.
Руководство по началу работы содержит всю информацию.
Сначала вы начнете с регистрации своего приложения .
Также вы можете посмотреть это видео для «Как это сделать».
Прямо сейчас, клиентская библиотека PHP поддерживает возобновляемые загрузки, но большая часть больших загрузок поступает от прямой загрузки в любом случае.
Должно быть просто вопрос установки параметра в конструкторе Google_MediaFileUpload .
Здесь приведен пример использования класса, соответствующая строка:
$media = new Google_MediaFileUpload('video/mp4', null, true, $chunkSizeBytes);
Для аутентификации вы можете использовать примеры, подобные этому . Попробуйте создать установленное приложение и другое, используйте этот идентификатор клиента и секрет, пока вы тестируете локально.