2012-04-16 14 views
10

क्या यूट्यूब एपीआई एक घटना को आग लगाना संभव है जब वीडियो निर्दिष्ट समय तक पहुंच जाए? जैसे जब वीडियो 20 सेकंड तक पहुंचता है। घटना को आग लगानानिर्दिष्ट समय पर यूट्यूब एपीआई ईवेंट

धन्यवाद,
मौरो

उत्तर

12

यकीन नहीं करता है, तो आप अभी भी इस का उत्तर चाहने वाले (के रूप में मैं इसे 4 महीने बाद लग रहा हूँ), लेकिन यहाँ है मैं कैसे यूट्यूब के iframe एम्बेड एपीआई के साथ इस पूरा किया। यह बदसूरत है कि इसे एक सेट इंटरवल की आवश्यकता है, लेकिन वास्तव में यूट्यूब एपीआई (कम से कम आईफ्रेम एपीआई में नहीं) में "टाइमअपडेट" घटना का कोई भी प्रकार नहीं है, इसलिए आपको वीडियो समय की जांच करके नकली करना होगा इतनी बार। ऐसा लगता है कि ठीक है।

मान लीजिए कि आप YT.Player() के साथ अपने खिलाड़ी as shown here शुरू करना चाहते हैं, और आप अपने खुद के onProgress() समारोह को लागू करने कि कहा जाता है चाहता हूँ जब भी वीडियो समय परिवर्तन:

HTML में:

<div id="myPlayer"></div> 

जे एस में:

// first, load the YouTube Iframe API: 
var tag = document.createElement('script'); 
tag.src = "//www.youtube.com/iframe_api"; 
var firstScriptTag = document.getElementsByTagName('script')[0]; 
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 

// some variables (global here, but they don't have to be) 
var player; 
var videoId = 'SomeYoutubeIdHere'; 
var videotime = 0; 
var timeupdater = null; 

// load your player when the API becomes ready 
function onYoutubeIframeAPIReady() { 
    player = new YT.Player('myPlayer', { 
    width: '640', 
    height: '390', 
    videoId: videoId, 
    events: { 
     'onReady': onPlayerReady 
    } 
    }); 
} 

// when the player is ready, start checking the current time every 100 ms. 
function onPlayerReady() { 
    function updateTime() { 
    var oldTime = videotime; 
    if(player && player.getCurrentTime) { 
     videotime = player.getCurrentTime(); 
    } 
    if(videotime !== oldTime) { 
     onProgress(videotime); 
    } 
    } 
    timeupdater = setInterval(updateTime, 100); 
} 

// when the time changes, this will be called. 
function onProgress(currentTime) { 
    if(currentTime > 20) { 
    console.log("the video reached 20 seconds!"); 
    } 
} 

यह थोड़ा लापरवाह, कुछ वैश्विक चर की आवश्यकता होती है, लेकिन आप आसानी से इसे refactor सकता है एक बंद करने और/या अंतराल को रोकें और प्ले/पॉज़ पर खुद को शुरू करें, जब आप खिलाड़ी को प्रारंभ करते हैं, और प्लेप्लेस्टेट चेंज फ़ंक्शन लिखते हैं जो प्ले और पॉज़ के लिए जांच करता है। आपको केवल PlayTime() फ़ंक्शन को PlayPlayerReady से अलग करना होगा, और रणनीतिक रूप से timeupdater = setInterval(updateTime, 100); और clearInterval(timeupdater); को सही ईवेंट हैंडलर में कॉल करना होगा। YouTube के साथ ईवेंट का उपयोग करने के लिए See here अधिक के लिए।

1

मुझे लगता है कि आप popcorn.js पर एक नज़र डाल सकते हैं। यह एक दिलचस्प मोज़िला प्रोजेक्ट है और ऐसा लगता है कि आपकी समस्या हल हो रही है।

+0

यह अब मोज़िला द्वारा बनाए रखा नहीं गया है – Gibolt

0

सुनिश्चित नहीं हैं कि किसी को भी यहाँ इस बात से सहमत है, तो लेकिन मैं setTimeout का उपयोग करने के लिए पसंद कर सकते हैं() setInterval() के रूप में यह घटना श्रोताओं का उपयोग कर बचा जाता है, उदाहरण के लिए खत्म हो गया:

function checkTime(){ 
    setTimeout(function(){ 
     videotime = getVideoTime(); 
     if(videotime !== requiredTime) { 
      checkTime();//Recursive call. 
     }else{ 
      //run stuff you want to at a particular time. 
      //do not call checkTime() again. 
     } 
    },100); 
} 

इसका एक बुनियादी स्यूडोकोड लेकिन उम्मीद है कि विचार बता देते हैं।

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