2015-09-29 13 views
9

Jak głosi tytuł, plik wideo można przesłać i przetworzyć za pomocą funkcji przesyłania na YouTube. Jednak gdy próbuję przesłać go programowo (przez OAuth2 i YouTube API v3), zawsze utknie przy 0% przetwarzaniu procentowym. Czy są jakieś youtubery na SO? Czy istnieje specjalne forum do przesyłania problemów? (PS, istnieje similar question bez rezultatów.)Plik wideo utknął w 0% procencie podczas przesyłania za pośrednictwem interfejsu API YouTube

AKTUALIZACJA ERROR: Kopanie głębiej, wydaje się być związane z metadanych wideo. Robię się następujący błąd sporadycznie:

udało się uruchomić wysyłania możliwego do wznowienia (HTTP 400:. Youtube.video The żądanie metadanych określa niepoprawny tytuł wideo)

Niestety, nie the error page for YouTube's API v3 naprawdę cierpią z powodu logorrhoea ... Czy ktoś wie, co oznacza błąd?

zaktualizowany kod: Obecnie pliki są przesyłane kawałek po kawałku (który zwykle działa całkiem dobrze, ale nie wszystkie czasy):

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; 
    } 
+0

Powinieneś opublikować [MCVE] (http://stackoverflow.com/help/mcve). Jak dokładnie robisz to programowo? – approxiblue

+0

Mam zaktualizowane pytanie i załączyłem kwestionowany kod. – Jan

+1

Czy Twoje połączenie internetowe jest stabilne? Można ustawić niższą wartość "chunkSizeBytes", aby uzyskać lepsze odtwarzanie na mniej niezawodnych połączeniach. Poza tym jedynym miejscem, w którym mogę myśleć o tym, gdzie mogą występować problemy, jest ustawienie rozmiaru pliku. Czy próbowałeś debugowania, aby uzyskać lepszy obraz miejsca, w którym to się psuje? –

Odpowiedz

3

Dobrze więc, że może być inne problemy z filmami nie były przetwarzane, ale moje było to, że tytuł filmu do wstawienia był po prostu zbyt długi. YouTube ma ograniczenie nie więcej niż 100 znaków. Jeśli spróbujesz wstawić dłuższe tytuły wideo, zgłasza powyższy wyjątek. Być może powinni to zanotować gdzieś w dokumentacji API.

Powiązane problemy