2012-03-25 20 views
3

Ich habe einen chromfreien YouTube-Player, in den ich Videos laden möchte, aber nur einige Videos funktionieren - nicht alle. Wenn ich mich nicht irre, sind diejenigen, die nicht geladen werden, aufgrund einer Urheberrechtsverletzung (z. B. wird eine Episode eines Zeichentrickfilms nicht geladen, sondern ein Heimfilm eines Kindes, der einen Rückwärtssalto macht). Was ich versuche, ist entweder herauszufinden, ob diese Videos geladen werden können oder nicht, entweder nachdem wir sie geladen haben oder vorher.Wie kann ich feststellen, ob ein YouTube-Video eingebettet werden kann, bevor ich es versuche und lade?

Als Beispiel, hier sind zwei Videos von Nataly Dawn. Der eine lädt, der andere nicht.

// loads and plays the video 
ytplayer.loadVideoById("GhDGdT33K0k"); 

// doesn't load/play the video 
ytplayer.loadVideoById("-KYUPJIzCyM"); 

von beiden the working video bei den Daten suchen und die non-working video, kann ich nicht scheinen, nichts zu sehen, dass dieser nicht-integrierbare anzeigen würde. [Ich suche nach <yt:accessControl> Tags oder eine fehlende yt:format='5' (vgl How do I use the Youtube API to check if a video is embeddable?), aber ohne Erfolg.]

Von dem, was ich in der Konsole versucht haben, loadVideoByIdimmer kehrt undefined, unabhängig davon, ob Nicht das Video lädt tatsächlich. Ich kann anscheinend keine API-Methode finden, um zu bestimmen, ob das Video dies getan hat oder nicht.

+0

Beide Videos, die Sie zu sein scheinen belastbar und spielbar erwähnt. Verwenden Sie zum Beispiel: http://code.google.com/apis/ajax/playground/#change_the_playing_video – mjhm

+0

Google Playground spielt manchmal Videos, die nicht eingebettet werden können, z. B. qvr6K02dglc. Sie können versuchen, es in eine lokale HTML-Datei auf Ihrer Festplatte einzubetten. –

Antwort

3

Beide Videos, die du erwähnt hast, scheinen für mich ladbar und spielbar zu sein. Verwenden Sie zum Beispiel: google code playground und fügen Sie Ihre Videos in die Optionstags des HTML ein.

Hier sind ein paar Tipps.

  • Verwenden Sie den Parameter "v = 2" in Ihrer gdata-Anforderung, um die aktuelle YT-Daten-API zu verwenden.
  • This blog post lists several additional restrictions that you may need to check for to determine if a video playable or embeddable.
  • Einige Videos können eingebettet werden, aber nicht abgespielt werden. In diesem Fall können Sie nur mit dem JavaScript PlayerAPI nach einem stateChange Ereignis suchen, das besagt, dass es abgespielt wird. Verwenden Sie dann eine setInterval, um das Video über getCurrentTime abzufragen, um herauszufinden, ob es tatsächlich abgespielt wird. Dies ist ein wenig verrückt für die meisten Anwendungen.
  • +0

    Aus dem Blogpost "Es kommen gelegentlich noch subtilere Einschränkungen ins Spiel. Nicht alle sind derzeit über die API abfragbar. Manche Videos sind zum Beispiel nur auf bestimmten Domains abspielbar. Wie ich bereits erwähnt habe, sind die Nur ein narrensicherer Weg, um zu wissen, ob ein Benutzer Zugriff auf ein Video hat, ist, dass es versucht wird, es anzuschauen. " Ich schaue mir dann deine letzte Option an.:) –

    +0

    Ich fand schließlich heraus, dass ich vorher nicht herausfinden konnte, ob das Video geladen würde; Nachdem ich jedoch einen Handler für die onError-Ereignisse gesetzt hatte, konnte ich den Fehlercode "150", "Broadcast" erhalten, wenn das angeforderte Video die Wiedergabe in den eingebetteten Playern nicht zulässt. Warum das in den Code-Spielplatz geladen und nicht in meinem speziellen Code, wer weiß. –

    +0

    anscheinend gibt es einige Videos, die nicht eingebettet werden dürfen, aber im Spielplatz können Sie sie sehen, wie qvr6K02dglc –

    0

    Heutzutage können Sie das onError-Ereignis der eingebetteten API anschließen und nach den Fehlercodes 101 und 150 (sie sind identisch) suchen, die angeben, dass das Video vom eingebetteten Spiel blockiert wurde. Wenn Sie es auf diese Weise tun, können Sie sich anders verhalten, wenn andere Fehler auftreten (schlechte Anfrage, HTML 5 Probleme, usw.).

    function onError(event){ 
        switch(event.data){ 
         case 2: 
          console.log('request contains an invalid parameter value') 
          break 
         case 5: 
          console.log('The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.') 
          break 
         case 100: 
          console.log('The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.') 
          break 
         case 101: 
         case 150: 
          console.log('Uploader has blocked this content from embedded playback') 
          break 
         default: 
          console.log('error code: '+event.data) 
    
        } 
    } 
    

    Wenn Sie nur integrierbare Videoergebnisse durch die Suche api zurückgegeben werden, umfassen videoEmbeddable:"true" in Ihrem request