2014-12-19 11 views
14

Ich versuche, YouTube Iframe API zu einem FullHD-Video mit einer niedrigeren Qualität zu spielen. Mein Ziel ist es, Bandbreite auf mobilen Geräten zu sparen und die Ladezeit zu reduzieren. Meine HTML-Struktur ist das klassische Player-Div sowie ein Debug-Div für Nachrichten.Youtube iFrame API setPlaybackQuality auf Mobilgerät ignoriert

HTML

<div id="debug"></div> 

<div id="your_video_id"> 
    <div id="player"></div> 
</div> 

Ich habe versucht setPlaybackQuality so schnell aufzurufen, da der Spieler bereit ist, mobile Anwender zu vermeiden Zeit in Puffer verschwenden (wie in diesem post vorgeschlagen). Ich habe es auch in den Zuständen "BUFFERING" und "PLAYING" aufgerufen. Wenn sich die Qualität ändert, wird der Debug-Inhalt mit der tatsächlichen Wiedergabequalität aktualisiert.

JAVASCRIPT

/* Trigger player ready */ 
function onPlayerReady(event) 
{ 
    player.setPlaybackQuality("small"); 
} 

/* Detect playback quality changes */ 
function onQualityChange(event) 
{ 
    document.getElementById("debug").innerHTML = event.data; 
} 

/* Trigger player events */ 
function onPlayerStateChange(event) 
{ 
    if (event.data == YT.PlayerState.BUFFERING) 
    { 
     player.setPlaybackQuality("small"); 
    } 

    if (event.data == YT.PlayerState.PLAYING) 
    { 
     player.setPlaybackQuality("small"); 
    } 
} 

Der Code scheint auf dem Desktop (Debug zu "klein" richtig eingestellt ist) zu arbeiten, aber es auf mobilen (Debug auf "groß", getestet mit Android 4.2 ignoriert wird. 2). Gibt es dafür eine Lösung?

+2

+1. Ich bekomme das gleiche Problem, habe es in onReady, onStateChange mit BUFFERING und PLAYING versucht, alles einzeln und in verschiedenen Kombinationen - nichts davon funktioniert. Ich habe dieses Problem eingereicht: https://code.google.com/p/gdata-issues/issues/detail?id=7191&thanks=7191&ts=1432253375 –

+0

Bei iOS wird die Videoqualität direkt basierend auf der Größe des iFrame-Players festgelegt. Egal, welche Größe Sie einstellen, der mobile Player überschreibt Ihre Einstellung immer, um der nächstgrößeren Größe der Player-Größe zu entsprechen. Dies ist ein großes Problem mit der Player-Funktion, die YouTube den iOS-Entwicklern zur Verfügung stellt (das ist in Wirklichkeit nur der iFrame-Player in einer Web-Ansicht). YouTube behauptet, dies sei absichtlich getan, um unnötige Datennutzung auf dem Handy zu vermeiden. – JAL

+0

@ JAL: Hm. Also, dann habe ich es in der Nähe der angegebenen Mindestgröße - etwa 350 x 200. Sollte es nicht versuchen, es auf 240p zu setzen? Und da es tatsächlich 175 x 100 \ @ 2x ist, wäre es nicht näher bei 144p? Ich denke, das ist ein Problem auf der YT iFrame API-Seite, weil ich auch bemerkt habe, dass [auf dem Desktop, der nach niedrigerer Qualität sucht, nicht funktioniert, sondern nach höherer Qualität sucht.] (Http://stackoverflow.com/questions/30468161/ loading-youtube-iframe-api-video-at-a-lower-quality) –

Antwort

6

Die Abhilfe, die ich gefunden ist, die Spieler ohne videoId zu schaffen, nie setPlaybackQuality nennen anderswo, aber loadVideoById(videoId, 0, desiredQuality) innerhalb Ihrer onReady Handler aufrufen. Dies wurde beim Testen sowohl auf Android als auch auf iOS respektiert, wobei onPlaybackQualityChanged mit der korrekten Qualität einmal auf Android und Desktop und zweimal auf iOS aufgerufen wurde, wobei niemals die Qualität auf etwas höher oder niedriger geändert wurde.

Wenn Sie eine Qualität übergeben, die auf dem Video nicht verfügbar ist, wird es leider "mittel" erzwingen. Sei dir dessen bewusst. Außerdem ist es unwahrscheinlich, dass dadurch Qualitätsüberschreibungen, die die API unter iOS durchführt, verhindert werden, um eine unnötige Datennutzung in 3G/4G/LTE-Netzwerken zu verhindern.

+0

Ich folgte deinen Schritten, aber es funktioniert nicht für mich. Wissen Sie, ob sich das Verhalten der API seit Ihrer Antwort geändert hat? – kakhkAtion

+0

In letzter Zeit nicht überprüft. Auf welcher Plattform hast du Probleme, und bist du dir absolut sicher, dass du loadVideoById (nicht cueVideoById o.ä.) mit den 3 Argumenten verwendest, nie setPlaybackQuality aufruft und das Video, das du spielst, tatsächlich die gewünschte Wiedergabequalität hat? Welche Qualität setzt es eigentlich? –

+0

Ja, ich benutze loadVideoById. Ich versuche Chrome sowohl auf Android als auch auf iOS. Egal, was ich tue, ich bekomme immer ein qualitativ hochwertiges Medium auf meinem iPhone 5 und ein großes auf meinem Nexus 5. Der exakt gleiche Code funktioniert gut auf Desktop-Browsern und ich kann die Qualität ändern. – kakhkAtion

Verwandte Themen