9

サムネイルは 1 年以上問題なく表示されていましたが、突然ぼやけてしまいました。ページの読み込み時に表示されるサムネイルは正しく見えますが、「player.cueVideoById」を使用して新しいサムネイルが表示されるたびに、非常にぼやけて見えます。

ドキュメントには、サムネイルの品質を制御する方法についての言及はありません (「setPlaybackQuality」などのビデオ品質設定のみが利用可能です)。ドキュメント: https://developers.google.com/youtube/iframe_api_reference

高品質のサムネイル画像を強制するにはどうすればよいですか?

4

1 に答える 1

13

はい、この問題は簡単に再現できます。ドキュメンテーション example を少し変更したバージョンを作成しました。ビデオをロードし、setPlaybackQuality1 秒後に呼び出します。品質が低下していることがはっきりとわかります。実際、元のサムネイルは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.jpga.ja.jAvundefined"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 プレーヤーの動作は若干異なり、同様に一貫性がありません。

于 2014-11-25T22:56:28.253 に答える