はい、この問題は簡単に再現できます。ドキュメンテーション example を少し変更したバージョンを作成しました。ビデオをロードし、setPlaybackQuality
1 秒後に呼び出します。品質が低下していることがはっきりとわかります。実際、元のサムネイルはhttps://i.ytimg.com/vi/M7lc1UVf-VE/sddefault.jpg
で、 に置き換えられていhttps://i1.ytimg.com/vi/M7lc1UVf-VE/default.jpg
ます。
Flash プレーヤーはかなり不透明ですが、HTML5 プレーヤーの場合は (かなり難読化された)ソース コードを見ることができます。このコードは特に興味深いものです (読みやすくするために再フォーマットされています)。
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"));
これは、実際にはサムネイルの品質を制御することになっていないことを示しており、ビューポートのサイズに応じて設定されています。幅が 900 を超えるか、高さが 600 を超える場合は を取得maxresdefault.jpg
し、幅が 430 を超えるか高さが 320 を超えるsddefault.jpg
場合は を取得し、残りのすべての場合は を取得しますdefault.jpg
。これは確かにそのように機能します-初期ロードの場合。そして、これは意図された動作のようです。
ただし、それはあなたが得るものではありません-おそらく設定されているため、player.cueVideoById()
常に存在します(それが何であれ)。編集:実際、コードをデバッグすると、ここでの原因ではないことが示されました。代わりに、データ構造 (特に map) が完全に初期化されていないため以外の理由で呼び出された場合、関数は戻ります。私には、これは単にバグのように見えますが、Google には既に報告されているようです。default.jpg
a.j
a.j
Av
undefined
"default.jpg"
b.La
参考までに、 function のソースコード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)
は正しい URL を返しますが、関数はc
代わりに意味を返しますundefined
。
上記のテキストは、HTML5 プレーヤーにのみ適用されることに注意してください。Flash プレーヤーの動作は若干異なり、同様に一貫性がありません。