2014-11-22 123 views
9

縮略圖看起來很好,但一下子變得模糊不清。 頁面加載時顯示的縮略圖看起來正確,但每次使用'player.cueVideoById'顯示新的縮略圖時,它看起來都非常模糊。如何強制YouTube播放器API嵌入iframe的高質量縮略圖?

在文檔中沒有提及如何控制縮略圖質量(只有視頻質量設置,如'setPlaybackQuality'可用)。該文檔:https://developers.google.com/youtube/iframe_api_reference

如何強制高品質的縮略圖圖像?

回答

13

是的,這個問題很容易重現。我創建了一個slightly modified version of the documentation example,它加載視頻,並在稍後調用setPlaybackQuality。清晰可見,質量下降。實際上,原始縮略圖是https://i.ytimg.com/vi/M7lc1UVf-VE/sddefault.jpg,它正在被替換爲https://i1.ytimg.com/vi/M7lc1UVf-VE/default.jpg

儘管Flash播放器非常不透明,但對於HTML5播放器,我們可以看看(漂亮模糊的)source code。這段代碼是特別有趣(重新格式化爲可讀性):

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() - 有它總是default.jpg 大概是因爲 a.j設置(不管這可能是) 編輯:實際上,調試代碼表明a.j不是這裏的罪魁禍首。如果調用"default.jpg"以外的任何值,則Av函數將返回undefined,因爲數據結構(特別是b.La圖)未完全初始化。對我而言,這看起來像一個bug,看起來它已經是reported to Google

僅供參考,功能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)將返回正確的網址,但該函數返回c,而不是意undefined

請注意,上述文本僅適用於HTML5播放器。 Flash播放器的行爲略有不同,同樣不一致。

相關問題