Видеофайл застревает на 0 % процентов при загрузке через API YouTube


Как следует из названия, видеофайл может быть загружен и обработан с помощью функции загрузки YouTube. Однако, когда я пытаюсь загрузить его программно (через OAuth2 и YouTube API v3), он всегда застревает на 0 %-процентной обработке. Есть ли какие-нибудь ютуберы на SO? Есть ли какой-то специальный форум для вопросов загрузки? (PS, есть аналогичный вопрос без результатов.)

ОБНОВЛЕННАЯ ОШИБКА: Копая глубже, похоже, это связано с метаданными видео. Я действительно получаю следующее иногда ошибка:

Не удалось запустить возобновляемую загрузку (HTTP 400:youtube.video, в метаданных запроса указан недопустимый заголовок видео.)

К сожалению, страница ошибок для API v3 YouTube на самом деле не страдает от логореи... Кто-нибудь знает, что означает эта ошибка?

ОБНОВЛЕННЫЙ КОД: На данный момент файлы загружаются по частям (что обычно работает довольно хорошо, но не всегда):

    function uploadFile($dbfile) {
        $client = $this->client;
        $youtube = new Google_Service_YouTube($client);
        $htmlBody = "";
        try {

            // Create a snippet with title, description, tags and category ID
            // Create an asset resource and set its snippet metadata and type.
            // This example sets the video's title, description, keyword tags, and
            // video category.
            $snippet = new Google_Service_YouTube_VideoSnippet();
            $snippet->setTitle($dbfile->displayname);
            // Numeric video category. See
            // https://developers.google.com/youtube/v3/docs/videoCategories/list 
            $snippet->setCategoryId("22");

            // Set the video's status to "private"
            $status = new Google_Service_YouTube_VideoStatus();
            $status->privacyStatus = "private";

            // Associate the snippet and status objects with a new video resource.
            $video = new Google_Service_YouTube_Video();
            $video->setSnippet($snippet);
            $video->setStatus($status);

            $chunkSizeBytes = 1 * 1024 * 1024;
            $client->setDefer(true);

            $insertRequest = $youtube->videos->insert("status,snippet", $video);

            // Create a MediaFileUpload object for resumable uploads.
            $media = new Google_Http_MediaFileUpload(
                $client,
                $insertRequest,
                'video/*',
                null,
                true,
                $chunkSizeBytes
            );
            $media->setFileSize(filesize($dbfile->localfile));

            // Read the media file and upload it chunk by chunk.
            $status = false;
            $handle = fopen($dbfile->localfile, "rb");
            while (!$status && !feof($handle)) {
              $chunk = fread($handle, $chunkSizeBytes);
              $status = $media->nextChunk($chunk);
            }

            fclose($handle);
            $client->setDefer(false);

            $log = array("success" => true, "snippet_id" => $status["id"]);
        } catch (Google_ServiceException $e) {
            $log = array("success" => false, "errormsg" => $e->getMessage());
        } catch (Google_Exception $e) {
            $log = array("success" => false, "errormsg" => $e->getMessage());
        }
        return $log;
    }
Author: Community, 2015-09-29

1 answers

Что ж, тогда могут быть и другие проблемы с не обрабатываемыми видео, но моя заключалась в том, что название вставляемого видео было просто слишком длинным. YouTube имеет ограничение не более 100 символов. Если вы попытаетесь вставить более длинные заголовки видео, это вызовет вышеупомянутое исключение. Возможно, им следует отметить это где-нибудь в своей документации по API.

 3
Author: Jan, 2015-10-08 18:37:43