2012-03-26 25 views
6

तक लोड नहीं होता है मेरे पास एक HTML5 वीडियो है जिसे मैं प्लेबैक के दौरान कुछ अंतराल पर कॉलबैक सेट अप करने का प्रयास कर रहा हूं। वीडियो video.play() के साथ जावास्क्रिप्ट से खेलना शुरू कर देता है। अभी मेरा कोड 'loadedmetadata' ईवेंट के लिए सुनता है, फिर अवधि की क्वेरी करता है और उन कॉलबैक को सेट करता है। मोबाइल सफारी पर ठीक काम करता है, लेकिन एंड्रॉइड पर नहीं (2.3.4 और 2.3.7)।Android video.duration वीडियो.प्ले()

एंड्रॉइड पर, 'loadedmetadata' अवधि वास्तव में उपलब्ध होने से पहले उत्सर्जित प्रतीत होता है। इसका परीक्षण करने के लिए, मैंने अपने कोड में लोडिंग प्रक्रिया के प्रत्येक चरण में अवधि को लॉग इन किया ताकि यह देखने के लिए कि इसे वास्तव में कहां पढ़ा जा सकता है। video.play() तक और 'timeupdate' ईवेंट के बाद, video.duration संपत्ति 6000 है, भले ही वीडियो का उपयोग किया जा रहा हो। मैंने इसे एक एमपी 4 फ़ाइल और एक 3 जीपी फ़ाइल के साथ परीक्षण किया। एक बार उन शर्तों को पूरा करने के बाद, वास्तविक अवधि उपलब्ध है।

मुझे इसी तरह के अन्य मुद्दों के साथ यह अन्य पोस्ट मिला [1]। सबसे ज्यादा वोट दिया गया उत्तर जिसे स्वीकार नहीं किया गया था यह है कि मैं मूल रूप से इसे कैसे सेट अप करता हूं, और यह आईओएस पर ठीक काम करता है। स्वीकृत उत्तर भी काम नहीं करता है, और सुझाव देता है कि यह एक वेबकिट मुद्दा है। मैं video.readyState संपत्ति लॉग करता हूं और देखता हूं कि यह वीडियो शुरू होने से पहले '4' है, लेकिन अवधि तब भी उपलब्ध नहीं है जब तक कि यह खेलना शुरू नहीं हो जाता है, और पहले 'timeupdate' ईवेंट।

हमारा वर्तमान कार्यप्रणाली video.duration मान क्वेरी कर रही है, और केवल video.duration !== 6000 पर ईवेंट कॉलबैक सेट कर रही है। यह बहुत बदसूरत है और मैं इसके नीचे जाना चाहता हूं, ऐसा न हो कि यह हैक वापस काटने के लिए वापस आ जाए। यहां एक चर्चा [2] यह सुझाव दे रही थी कि यह मुद्दा एन्कोडिंग से संबंधित हो सकता है। यानी, ठीक से एन्कोड नहीं किया गया है, एंड्रॉइड मेटाडेटा को तब तक सही ढंग से नहीं पढ़ता जब तक फ़ाइल लोड नहीं हो जाती है, या शायद बिल्कुल और यह अवधि को दूसरी तरह की गणना करता है।

क्या इस क्लीनर को बनाने के लिए मैं कुछ भी कर सकता हूं, या अब मैं हैक के साथ फंस गया हूं?

[1] Problem retrieving HTML5 video duration

[2] http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/

+2

मैंने 'v.addEventListener (' durationchange ', repos, false) का उपयोग किया है; परिवर्तन को ट्रैक करने के लिए श्रोता, लेकिन हाँ ... ऐसा लगता है कि यह बहुत सारे एंड्रॉइड पर एक वेबव्यू/वीडियो समस्या है – Offbeatmammal

+1

मोबाइल डिवाइस की अपनी सीमाएं हैं, इसलिए वे एंड्रॉइड ब्राउजर में डेस्कटॉप ब्राउज़र क्या करते हैं, सब कुछ लोड नहीं करते हैं, वीडियो को तब तक नहीं बुलाया जाता है जब तक कि आप बैंडविड्थ को सहेज लें और मेमोरी/बफर का उपयोग कम करें .. मुझे लगता है कि आप वहां कर सकते हैं यह डिफ़ॉल्ट रूप से खेलते हैं और फिर एक स्क्रिप्ट का उपयोग करते हैं जो 1-2 सेकंड के बाद वीडियो को रोक देगा ... जो आपके उद्देश्य को पूरा करना चाहिए .. – MarmiK

उत्तर

0

आईडी एक setTimeout जो चाहे अवधि रिकर्सिवली उपलब्ध है की जाँच करने के लिए एक समारोह कॉल का उपयोग करें।

इस तरह फ़ंक्शन जैसे ही कोई जानकारी उपलब्ध हो, प्रदर्शन आदि हो सकती है।