2014-11-22 12 views
9

थंबनेल एक साल से अधिक के लिए ठीक लग रहे थे, लेकिन अचानक धुंधला हो गया। पेज लोड पर दिखाई देने वाला थंबनेल सही दिखता है, लेकिन कभी भी 'player.cueVideoById' का उपयोग करके एक नया थंबनेल प्रदर्शित होता है, यह बहुत धुंधला दिखता है।YouTube प्लेयर API iframe एम्बेड करने के लिए उच्च गुणवत्ता वाले थंबनेल को कैसे बल दें?

थंबनेल गुणवत्ता को नियंत्रित करने के तरीके के दस्तावेज़ीकरण में कोई उल्लेख नहीं है (केवल 'वीडियो प्ले गुणवत्ता सेटिंग्स, जैसे' सेट प्लेबैक गुणवत्ता 'उपलब्ध हैं)। प्रलेखन: 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 द्वारा प्रतिस्थापित किया जा रहा है।

जबकि फ्लैश प्लेयर बहुत अपारदर्शी है, HTML5 प्लेयर के लिए हम (सुंदर obfuscated) 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 यहां अपराधी नहीं है। इसके बजाय, Av फ़ंक्शन undefined लौटाता है जब "default.jpg" के अलावा कुछ भी कहा जाता है क्योंकि डेटा संरचनाएं (b.La विशेष रूप से मानचित्र) पूरी तरह से प्रारंभ नहीं होती हैं। मेरे लिए, यह बस एक बग की तरह दिखता है, और ऐसा लगता है कि यह पहले से ही 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) सही URL वापसी होगी लेकिन समारोह c रिटर्न बजाय undefined अर्थ।

ध्यान दें कि उपरोक्त पाठ केवल HTML5 प्लेयर पर लागू होता है। फ्लैश प्लेयर का व्यवहार थोड़ा अलग और समान असंगत है।

संबंधित मुद्दे