2012-09-07 12 views
21

मैं इस प्रकार एक साधारण पाशन सुविधा HTML5 ऑडियो का उपयोग कर एक बहुत ही आदिम समाधान बना सकते हैं और कोशिश कर रहा हूँ के विवरण के स्तर को निर्धारित करना:HTML5 ऑडियो घटना 'timeupdate'

$(audio).bind('timeupdate', function() { 
    if (audio.currentTime >= 26){ 
    var blah = audio.currentTime; 
    audio.currentTime = 23; 
    console.log(blah); 
    } 
}) 

यह ठीक काम करता है, लेकिन केवल गड़बड़ यहां यह है कि टाइमअपडेट घटना बहुत लगातार ट्रिगर नहीं होती है। उदाहरण के लिए, console.log ऊपर दिखाई: 26,14031982421875

26,229642868041992

26,13462257385254

26,21796226501465

... आदि। (आपको विचार मिलता है ..inconsistent times)

स्पष्ट रूप से यह उस एप्लिकेशन के लिए काम नहीं करेगा जहां समय महत्वपूर्ण है (संगीत अनुप्रयोग)। तो मेरे लिए स्पष्ट समाधान ग्रैन्युलरिटी को बढ़ाना होगा जिसके साथ टाइमअपडेट ईवेंट ट्रिगर होता है। मैं किसी भी एपीआई दस्तावेज़ खोजने में सक्षम हूं ... लेकिन यह जानना अच्छा लगेगा कि ऐसा करने का कोई तरीका है या नहीं।

+0

यह भी देखें http://stackoverflow.com/questions/24827929/get-frame-numbers-in-html5- वीडियो – rogerdpack

+0

बेशक यह काम करेगा। बस उस स्थिति में अपने स्क्रबर को अद्यतन करें। –

उत्तर

27

मुझे खेद है, लेकिन यह वही तरीका है जो काम करता है। html5 specs से:

हर 15 250ms के लिए, या MediaController के मीडिया नियंत्रक स्थिति में परिवर्तन, इनमें से जो भी होता कम से कम अक्सर, उपयोगकर्ता एजेंट एक कार्य कतार चाहिए MediaController पर timeupdate नाम के एक साधारण घटना आग जब भी।

इसके अलावा,

घटना इस प्रकार (ईवेंट हैंडलर्स संभालने 250ms से अधिक समय नहीं लेते हैं चलाने के लिए) 4Hz से 66Hz के बारे में की तुलना में तेजी या धीमी निकाल दिया जा करने के लिए नहीं है। उपयोगकर्ता एजेंटों को सिस्टम लोड के आधार पर घटना की आवृत्ति और प्रत्येक बार घटना को संसाधित करने की औसत लागत को बदलने के लिए प्रोत्साहित किया जाता है, ताकि यूआई अपडेट वीडियो एजेंट को डीकोड करते समय आसानी से संभाल सकें।

यदि आप विनिर्देशन के माध्यम से पढ़ते हैं, तो आप यह विचार प्राप्त कर सकते हैं कि timeupdate ईवेंट "सर्वोत्तम प्रयास" प्रकार का आयोजन है। यह तब तक आग लग जाएगा जब तक यह प्रदर्शन और प्रभाव को प्रभावित न करे।

आप आने वाले समय को सुचारू बनाने के लिए कुछ समय-समय पर घटनाओं को फ़िल्टर कर सकते हैं, लेकिन मुझे डर है कि विपरीत करना संभव नहीं है।

+1

मैंने वर्तमान समय लॉग किया और अंतराल 500 एमएस से अधिक समय पर है। कम प्रदर्शन वाले उपकरणों के लिए यह अंतराल अधिक है? – Foreever

+0

कई कारणों से 250ms पसंद करते हैं – rogerdpack

33

यह ध्यान दिया जाना चाहिए कि आप एक वीडियो की वर्तमान समय संपत्ति को और अधिक बार पढ़ सकते हैं। यदि समय वास्तव में महत्वपूर्ण है, और आप थोड़ी सी अनिश्चितता के साथ जी सकते हैं, तो आप इसके बजाय कोशिश कर सकते हैं।

हालांकि, यह टैग के अपने timeupdate ईवेंट का उपयोग करने से बहुत कम सुरुचिपूर्ण है।

setInterval(function() { 
    console.log(audio.currentTime); // will get you a lot more updates. 
}, 30); 

इस मामले में, आप, अंतराल का प्रबंधन स्वयं करना होगा यकीन है कि तुम यह null से पहले स्पष्ट ऑडियो तत्व ing बनाते हैं। लेकिन यह एक संभावना है।

मैं इस वीडियो का उपयोग वीडियो तत्व पर कर रहा हूं, लेकिन इसे यहां भी लागू होना चाहिए।

+0

मुझे आश्चर्य है कि यह प्रदर्शन को बुरी तरह प्रभावित करेगा। – Foreever

+5

हम इसे कॉर्डोवा प्रोजेक्ट के अंदर उपयोग करते हैं जो उपयोगकर्ता को नियंत्रित करने वाली सामग्री-परत के साथ एक वीडियो को चलाता/रोकता है। उस स्थिति में, हमारे पास इसके साथ कोई प्रदर्शन समस्या नहीं थी। लेकिन यह सच है, अब आपके पास हर कुछ मिलीसेकंड करने के लिए _ और अधिक चीज़ है। सेट इंटरवल के बजाय, जब भी कोई अन्य घटना होती है (उपयोगकर्ता इंटरैक्शन की तरह) आप '.currentTime' भी पढ़ सकते हैं)। या यदि आप वीडियो स्थिति की परवाह करते हैं, तो आप "सुरक्षित मार्जिन" की गणना कर सकते हैं, लेकिन केवल 1 मिनट के निशान के आसपास "चारों ओर" - 59 सेकंड के लिए टाइमआउट सेट करें और उन 59 सेकंड के बाद एक कठिन अंतराल शुरू करें। – amenthes

+0

छोटे ऑडियो क्लिप के लिए, यह विधि लगभग अदृश्य – August

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