2015-05-26 21 views
5

Attualmente, abbiamo una configurazione API di YouTube iFrame con il seguente codice (abbastanza boilerplate):Loading Youtube iFrame il video API ad una qualità inferiore

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://www.youtube.com/iframe_api"></script> 
 
<script> 
 
    var player; 
 
    YT.ready(function() { 
 
    player = new YT.Player('player', { 
 
     videoId: 'iyBaInK2TsI', 
 
     width: 200, 
 
     height: 200, 
 
     events: { 
 
     onReady: "onReady", 
 
     onStateChange: "onStateChange", 
 
     onPlaybackQualityChange: "onPlaybackQualityChange", 
 
     onError: "onPlayerError" 
 
     }, 
 
     playerVars: { 
 
     fs: 0, // hide fullscreen button by default 
 
     playsinline: 1, // make the player not go fullscreen when playing on ios 
 
     modestbranding: 1, // hide youtube logo by default - we say 'powered by youtube' 
 
     controls: 0, // hide controls by default 
 
     showinfo: 0, // hide video title by default 
 
     iv_load_policy: 3, // hide annotations by default 
 
     rel: 0 
 
     } 
 
    }); 
 

 
    console.log('available quality levels after create = ' + player.getAvailableQualityLevels()); 
 
    }); 
 
    // onReady, onStateChange, onPlaybackQualityChange, onPlayerError handlers... 
 
</script>

Il lungo e breve di esso è che carica sempre il video con qualità 'media'. Chiamare setPlaybackQuality('small') non influisce sulla qualità del video, sia che io sia sul desktop o sul cellulare.

Ho provato a chiamare setPlaybackQuality('small') in onReady, onStateChange quando lo stato diventa BUFFERING o PLAYING e completamente separatamente nella console JavaScript quando il video è in riproduzione, non riprodotto o in pausa.

Questo presenta un grosso problema quando gli utenti tentano di caricare il lettore su una connessione 3G/4G. Capisco che il 3G venga gradualmente eliminato per lo streaming video, ma una quantità significativa di utenti opera ancora su connessioni 3G e la possibilità di trasmettere a 144p rende effettivamente il video tenable su 3G ea 240p rende il video tenable su 4G (non-LTE).

Quando scelgo un video con hd720 come opzione di qualità, posso chiamare setPlaybackQuality ('hd720') e funziona correttamente.

mio specifica domanda è, c'è qualcosa nella mia configurazione che potrebbe precludere il passaggio a qualità inferiore, e v'è un certo insieme di comandi che avrebbe aggirare questa limitazione e innescare la qualità di riproduzione in realtà cambiando?

risposta

3

La soluzione che ho trovato è quello di creare il giocatore con nessun videoId, mai chiamare setPlaybackQuality altrove, ma chiamare loadVideoById(videoId, 0, 'small') all'interno della vostra onReady gestore. Questo è stato rispettato su Android e iOS quando testato, chiamando onPlaybackQualityChanged con 'small' una volta su Android e Desktop e due volte su iOS, senza mai forzare la qualità media.

Sfortunatamente, se si passa 'tiny', non sembra funzionare. Nella maggior parte dei video, esso imporrà 'small'; nella mia esperienza, tuttavia, è forzato 'medium' prima. Sii consapevole di ciò.

Problemi correlati