2015-09-29 11 views
9

Come si legge nel titolo, un file video può essere caricato ed elaborato tramite la funzione di caricamento di YouTube. Tuttavia, quando provo a caricarlo a livello di codice (tramite OAuth2 e YouTube API v3), viene sempre bloccato con un'elaborazione dello 0% per cento. Ci sono youtuber su SO? C'è qualche forum speciale per i problemi di caricamento? (PS, c'è un similar question senza risultati.)Il file video è bloccato allo 0% per cento quando viene caricato tramite l'API YouTube

aggiornato Errore: Scavando più profondo, sembra essere correlato ai metadati video. Faccio il seguente errore di tanto in tanto:

Impossibile avviare il caricamento resumable (HTTP 400:. Youtube.video, la richiesta dei metadati specifica un titolo del video non valida)

Purtroppo, the error page for YouTube's API v3 non lo fa soffre davvero di logorrea ... Qualcuno sa cosa significa l'errore?

codice aggiornato: Al momento i file sono caricati blocco per blocco (che di solito funziona abbastanza bene, ma non tutti i tempi):

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

È necessario pubblicare un [MCVE] (http://stackoverflow.com/help/mcve). Come lo stai facendo esattamente a livello di programmazione? – approxiblue

+0

Ho aggiornato la domanda e ho allegato il codice in questione. – Jan

+1

La tua connessione Internet è stabile? Potresti voler impostare 'chunkSizeBytes' in basso per un migliore recupero su connessioni meno affidabili. Oltre a questo, l'unico altro posto in cui posso pensare a dove potrebbe essere un problema è quando si imposta la dimensione del file. Hai provato il debug per avere un'idea migliore di dove si sta rovinando? –

risposta

3

Ebbene, ci potrebbero essere altri problemi con i video non essendo elaborato ma il mio era che il titolo del video da inserire era semplicemente troppo lungo. YouTube ha una limitazione di non più di 100 caratteri. Se si tenta di inserire titoli video più lunghi, viene generata l'eccezione di cui sopra. Forse dovrebbero annotarlo da qualche parte nella loro documentazione API.

Problemi correlati