Sì, questo problema è facilmente riproducibile. Ho creato un slightly modified version of the documentation example, carica un video e chiama setPlaybackQuality
un secondo dopo. È chiaramente visibile che la qualità diminuisce. Infatti, la miniatura originale è https://i.ytimg.com/vi/M7lc1UVf-VE/sddefault.jpg
, è stata sostituita da https://i1.ytimg.com/vi/M7lc1UVf-VE/default.jpg
.
Mentre il lettore Flash è piuttosto opaco, per il lettore HTML5 possiamo dare un'occhiata al (piuttosto offuscato) source code. Questo pezzo di codice è particolarmente interessante (riformattato per migliorare la leggibilità):
var c;
if (!a.j)
{
var d = a.element.clientWidth,
e=a.element.clientHeight;
if (900 < d || 600 < e)
c = Av(b, "maxresdefault.jpg");
!c && (430 < d||320 < e) && (c = Av(b, "sddefault.jpg"))
}
c || (c = Av(b, "default.jpg"));
Questo indica che si sta effettivamente non suppone di controllare la qualità delle miniature, è piuttosto impostato in base alle dimensioni della finestra. Se la larghezza supera i 900 o l'altezza supera i 600, si ottiene maxresdefault.jpg
, se la larghezza supera i 430 o l'altezza supera i 320 si ottiene sddefault.jpg
e in tutti i casi rimanenti si ottiene default.jpg
. Funziona così davvero - per il carico iniziale. E questo sembra essere il comportamento previsto.
Tuttavia, questo non è quello che si ottiene per player.cueVideoById()
- c'è sempre default.jpg
,
presumibilmente perché
a.j
è impostato (qualunque essa sia)
. Modifica: In realtà, il debug del codice ha dimostrato che a.j
non è il colpevole qui. Invece, la funzione Av
restituisce undefined
quando viene richiesto un valore diverso da "default.jpg"
perché le strutture di dati (in particolare la mappa b.La
) non sono inizializzate completamente. Per me, questo sembra semplicemente un bug, e sembra che fosse già reported to Google.
Per riferimento, il codice sorgente della funzione Av
:
function Av(a,b)
{
if (30 == a.O)
{
// This branch isn't being entered
var c = a.La["default.jpg"];
return c?c:a.videoId?de("//docs.google.com/vt",{id:a.videoId,authuser:a.Wa,authkey:a.Kb}):"//docs.google.com/images/doclist/cleardot.gif"
}
b || (b="hqdefault.jpg");
return (c = a.La[b]) || "sddefault.jpg" == b || "maxresdefault.jpg" == b ?
c :
Mt(a.videoId, b)
}
Mt(a.videoId, b)
sarebbero ritornati l'URL corretto, ma la funzione restituisce c
invece significa undefined
.
Si noti che il testo sopra si applica solo al lettore HTML5. Il comportamento del lettore Flash è leggermente diverso e allo stesso modo incoerente.