2012-11-06 23 views
13

में ऑडियो बफरिंग रोकें मैं वर्तमान में (मोबाइल) ब्राउज़र के माध्यम से ऑडियो स्ट्रीम (24/7 रेडियो स्ट्रीम) प्रदान करने के लिए HTML5 ऑडियो प्लेयर का उपयोग करने में काम कर रहा हूं। स्ट्रीम में लोड हो रहा है और इसे खेलना ठीक काम करता है।<audio> टैग

बड़ी समस्या यह है कि HTML5 <audio> टैग सक्रिय होने पर भी (बफरिंग) सामग्री डाउनलोड करना जारी रखेगा। मोबाइल उपयोगकर्ताओं के लिए यह एक बड़ा मुद्दा हो सकता है क्योंकि उनमें से अधिकतर डेटा उपयोग के लिए भुगतान करते हैं। अब तक मैं एक सभ्य समाधान नहीं ढूंढ पाया है जो इसे रोकने के लिए क्रॉस ब्राउज़र का काम करता है।

मैं अब तक की कोशिश की:

  1. अनलोड स्रोत जब ठहराव दबाया जाता है। < यह क्रॉस ब्राउज़र
  2. ऑडियो प्लेयर तत्व को निकालें और एक नया लोड नहीं करता है। यह काम करता है लेकिन ईमानदार होने देता है, यह बेहद सरल कार्य करने का एक बहुत ही आसान तरीका है।

मैं बस अगर वहाँ कुछ मैं इस पूरे मुद्दे में अनदेखी कर रहा हूँ के बाद से मुझे विश्वास है कि मैं इस मुद्दे के साथ केवल एक ही नहीं कर रहा हूँ कर रहा हूँ है सोच रहा था।

+1

मैं अपने शीर्षक संपादित किया है। कृपया देखें, "[प्रश्नों में उनके शीर्षक में" टैग "शामिल होना चाहिए?] (Http://meta.stackexchange.com/questions/19190/)", जहां आम सहमति है "नहीं, उन्हें नहीं करना चाहिए"। –

+2

मैंने अभी देखा है कि डीओएम से तत्व को हटाने से हमेशा संसाधन को अलग नहीं किया जाता है। मतलब है कि धारा अभी भी डाउनलोड हो रही है। – Ruben

+0

@ रूबेन पूरी तरह से हाँ, भले ही वर्तमान डोम केवल 1 प्लेयर दिखा रहा हो, ब्राउज़र अभी भी संसाधनों को कैश कर रहा है। मैंने परीक्षण किया है कि अभी, एक अजाक्स शॉउटकास्ट प्लेयर को कार्यान्वित करने से मैंने अपनी स्ट्रीम को 10 गुना से अधिक लोड किया क्योंकि प्रीलोड और AJAX। यदि आप "प्रीलोड" का उपयोग नहीं करेंगे। बेहतर अगर आप ऑडियो टैग शामिल नहीं करते हैं, उदाहरण के लिए, आप कुछ क्लिक करते हैं, उदाहरण के लिए, एक छोटा सा प्लेयर बटन;) – erm3nda

उत्तर

3

मुझे ऊपर वर्णित समस्या के लिए एक व्यावहारिक समाधान मिला। एक विस्तृत वर्णन यहां पाया जा सकता:

var blob = new Blob([], {type: "audio/mp3"}); 
var url = URL.createObjectURL(blob); 
audio.src = _url; 

या, ऊपर छोटा:

audio.src = URL.createObjectURL(new Blob([], {type:"audio/mp3"}); 

अब आप लोड हो रहा है नहीं कर रहे हैं https://stackoverflow.com/a/13302599/1580615

+1

यह एक अच्छा समाधान नहीं है और वेबकिट (क्रोम, आईओएस इत्यादि) पर त्रुटियों को फेंक देगा –

2

आप क्या कर सकते हैं त्रुटियों के बिना बफरिंग लोड रोकने के लिए निम्नलिखित एक "" जो ऑडियो टैग के लिए कोशिश करने और लोड करने के लिए एक खराब यूआरएल है। आप ब्लॉब से बने वास्तविक यूआरएल को लोड कर रहे हैं जिसमें ऑडियो के लिए प्लेबैक के लिए कोई डेटा नहीं है।

+1

फ़ायरफ़ॉक्स में त्रुटि: "मीडिया संसाधन ब्लॉब: http: // localhost: 4200/c68c796c-5af0-5343-a68d-9043c4c9b9a2 को डीकोड नहीं किया जा सका।" गलती क्रोम: "ब्लॉब प्राप्त करें: http: // localhost: 4200/fec774b7-7680-48a9-927e-1926685da447 416 (अनुरोधित श्रेणी संतोषजनक नहीं)" प्रकार का उपयोग करते समय: "वीडियो/एमपी 4" –

8

<audio> तत्व में preload विशेषता शामिल है। इसे "none" या "मेटाडाटा" पर सेट किया जा सकता है जिसे ऑडियो प्रीलोडिंग को रोकना चाहिए।

स्रोत: https://developer.mozilla.org/en/docs/Web/HTML/Element/audio

+1

यह सबसे सुंदर समाधान है। "कोई भी" डाउनलोड करने के लिए कोई डेटा डाउनलोड नहीं किया गया और "मेटाडेटा" सेटिंग को 517 केबी डेटा डाउनलोड किया गया। मेरा परीक्षण एक voscast धारा के लिए था। – Rohmer

+0

यह केवल सुरुचिपूर्ण नहीं है, यह करने का तरीका है। मैं इसे नोब की तरह "झूठी" पर सेट करने की कोशिश कर रहा था :), इसे "कोई भी" काम करने के लिए सेट नहीं किया था। यू इसे "ऑटो" पर भी सेट कर सकता है। यदि आपके पास स्ट्रीम स्रोत और AJAX पृष्ठ हैं तो आपको lof ot समस्याओं का सामना करना पड़ेगा। ऑडियो ऑब्जेक्ट्स ब्राउज़र द्वारा कैश किए जा रहे हैं, और आप प्रत्येक लोड के साथ अपने बैंडविड्थ उपयोग को बढ़ाएंगे। – erm3nda