2012-10-09 40 views
11

मैं इस सरल कोड के साथ HTML5 ऑडियो टैग के साथ काम कर रहा हूँ ऑडियो टैग के साथ सफारी:काम नहीं कर रहा

एचटीएमएल

<audio id="audioFrenata"> 
<source src="sounds/frenata.ogg"> 
<source src="sounds/frenata.mp3"></audio> 

जे एस

$('#audioFrenata').on('ended', function() { 
     manageImageObjectsLevel(); 
    }).get(0).play(); 

क्रोम के साथ इस उम्मीद के रूप में काम करता है, सफारी के साथ 5.1.7 आईपैड 3 पर विंडोज और सफारी पर मुझे यह मिलता है:

'undefined' is not a function (evaluating '$('#audioFrenata').on('ended', function() { 
manageImageObjectsLevel(); 
}).get(0).play()') 

किसी को भी इसका विचार क्यों है?

+0

सोचें कि 'अपरिभाषित' का अर्थ 'स्टॉप()' है, क्योंकि स्टॉप आपके डोमोडोड '# ऑडियोवेल 'पर एक फ़ंक्शन नहीं है। ('document.getElementById (" audioLevel ")। stop === अपरिभाषित') – andlrc

+0

कहां रुक गया है ?? क्या आप 'एंडेड' ईवेंट का संदर्भ लेते हैं, भले ही मैं इसे खत्म कर दूं और केवल कॉल करने का प्रयास करें, यह वही देगा त्रुटि .. –

+0

@Matteo, क्या आपको इस प्रश्न का समाधान मिला? –

उत्तर

0

जांचें कि क्या आप चाहते हैं कि HTML5 कार्यक्षमता आपके द्वारा वर्णित ब्राउज़र में समर्थित है। आप इसे here देख सकते हैं। आशा है कि यह आपकी मदद करेगा।

0

आईडी गलत लगता है।

$('#audioLevel').on('ended', function() { 
    manageImageObjectsLevel(); 
}).get(0).play(); 

यह

$('#audioFrenata').on('ended', function() { 
    manageImageObjectsLevel(); 
}).get(0).play(); 

एचटीएमएल नीचे का प्रयोग करें

<audio id="audioFrenata" controls="controls"> 
    <source src="sounds/frenata.ogg" type="audio/ogg"> 
    <source src="sounds/frenata.mp3" type="audio/mpeg"> 
</audio>​ 

देखें LIVE DEMO

+0

हाँ यह सही है लेकिन यह गलत कोड और मेरे कोड से पेस्ट के कारण केवल एक टाइपो था .. –

+1

यह प्रश्न (गलत आईडी) के साथ पहली समस्या हल करता है - हालांकि, जेएसएफडल पर जाकर यह आईपैड स्वचालित रूप से ऑडियो प्लेबैक नहीं करेगा - स्पष्टीकरण के लिए मेरी पोस्ट देखें (मैंने आईपैड पर क्रॉस चेक किया है ताकि यह सुनिश्चित किया जा सके कि यह '.play() '- के रूप में स्वचालित रूप से प्लेबैक नहीं होता है। मेरी पोस्ट में उल्लेख करें, उपयोगकर्ता को प्लेबैक शुरू करना होगा;) –

10

मैं ठीक उसी समस्या पड़ा है होना करने के लिए लगता है, और मैंने पाया है कि सफारी में निम्नलिखित प्रतिबंधों के कारण:

सफारी में iOS पर है, जहां उपयोगकर्ता एक सेलुलर नेटवर्क पर हो सकता है और प्रति डेटा इकाई शुल्क लिया, प्रीलोड और ऑटोप्ले विकलांग कर रहे हैं (, आईपैड सहित सभी उपकरणों के लिए)। जब तक उपयोगकर्ता इसे शुरू नहीं करता तब तक कोई डेटा लोड नहीं होता है। इसका अर्थ यह है कि जब तक उपयोगकर्ता प्लेबैक शुरू नहीं करता तब तक जावास्क्रिप्ट प्ले() और लोड() विधियां भी निष्क्रिय होती हैं, जब तक कि प्ले() या लोड() विधि उपयोगकर्ता क्रिया द्वारा ट्रिगर नहीं की जाती। दूसरे शब्दों में, उपयोगकर्ता द्वारा शुरू किया गया प्ले बटन काम करता है, लेकिन एक ऑनलोड = "play()" ईवेंट नहीं करता है।

संदर्भ: इसे हल करने http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html

एक तरह से, डिफ़ॉल्ट रूप से ऑडियो म्यूट करने के आप एक HTML5 ऑडियो वस्तु का उदाहरण बना सकते हैं और स्टोर है कि एक में कर सकते हैं, और जब उपयोगकर्ता "गैर-म्यूट" "स्थिर"/"वैश्विक" variabel और आगे प्लेबैक के लिए उपयोग करें।

- अद्यतन

यहाँ एक ऐसे ब्लॉग पोस्ट समस्या का वर्णन करते है और यह कैसे से निपटने के लिए: Autoplay audio files on an iPad with HTML5

और यहाँ एक इस प्रकार है: http://blog.gopherwoodstudios.com/2012/07/enabling-html5-audio-playback-on-ios.html

यहाँ एक समान stackoverflow सवाल एक ही बात पर चर्चा है जावास्क्रिप्ट "मॉड्यूल" मैंने एचटीएमएल 5 में ऑडियो के प्लेबैक को संभालने के लिए उपयोग किया है:

NS.modules.html5.audio = (function() { 

    var _snd = false; 

    function playAudio(src) { 
     if (!_snd) 
      _snd = new Audio(); 
     else 
      $(_snd).empty(); 

     for (var i = 0; i < src.length; i++) { 
      var source = document.createElement('source'); 
      source.type = src[i].type; 
      source.src = src[i].src; 
      _snd.appendChild(source); 
     } 

     _snd.load(); // Needed on safari/idevice 
     _snd.play(); 
    }; 

    var playAudio = function() { 
     var src = [ 
      { src: "/path/to/audio.wav", type: "audio/vnd.wave" }, 
      { src: "/path/to/audio.ogg", type: "application/ogg; codecs=vorbis" }, 
      { src: "/path/to/audio.mp3", type: "audio/mpeg" } 
     ]; 
     playAudio(src); 
    }; 

    return { 
     playAudio: playAudio, 
     // more play functions here 
    }; 
})(); 
+0

वाह !!! अच्छा, हाँ मोबाइल ब्राउज़र स्वचालित रूप से ऑडियो फ़ाइलों को डाउनलोड/चलाएं नहीं। मैंने बनाए गए मेट्रोनोम ऐप के लिए, मुझे ध्वनि बंद करना शुरू किया था, और जब उपयोगकर्ता ने ध्वनि आइकन पर क्लिक किया/दबाया (जिसे मुझे प्रारंभ में अक्षम करना था) तो यह लोड और प्ले होगा! –

2

मेरे मामले में समस्या HTML प्रारूप के कारण हुई थी, मैंने निम्न प्रारूप में स्विच किया और यह काम किया। उम्मीद है कि यह किसी को मदद मिलती है:

<audio id="audioFrenata" src="sounds/frenata.ogg"></audio> 

नोट ऊपर लेआउट में <source> तत्व की कमी है।

+0

यह मेरे लिए फ़ायरफ़ॉक्स, क्रोम और सफारी में काम करता है (अब और परीक्षण नहीं किया गया है)। हालांकि मुझे यह अजीब लगता है, यह प्रारूप नहीं है जिसे मैंने देखा है। – guival

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