Safari with audio tag not working

后端 未结 4 746
醉话见心
醉话见心 2020-12-01 13:09

I am working with HTML5 audio tag with this simple code:

HTML

相关标签:
4条回答
  • 2020-12-01 13:19

    Check whether the HTML5 functionality you want is supported in the browsers that you mentioned. You can check it here. Hope this will help you.

    0 讨论(0)
  • 2020-12-01 13:28

    In my case the problem was caused due to HTML format, I switched to the following format and it worked. Hope this helps somebody :

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

    Note the lack of <source> element in the above layout.

    0 讨论(0)
  • 2020-12-01 13:28

    ID seems to be wrong.

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

    It suppose to be

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

    Use below HTML

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

    Refer LIVE DEMO

    0 讨论(0)
  • 2020-12-01 13:37

    I have had the exact same problem, and I found that it is due to the following restriction in Safari:

    In Safari on iOS (for all devices, including iPad), where the user may be on a cellular network and be charged per data unit, preload and autoplay are disabled. No data is loaded until the user initiates it. This means the JavaScript play() and load() methods are also inactive until the user initiates playback, unless the play() or load() method is triggered by user action. In other words, a user-initiated Play button works, but an onLoad="play()" event does not.

    Reference: http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html

    One way to solve it, is to mute audio by default, and when the user "un-mutes" you can create the instance of an HTML5 Audio object and store that in a "static" / "global" variabel and use that for further playback.

    -- UPDATE

    Here is a blogpost describing the issue and how to deal with it: http://blog.gopherwoodstudios.com/2012/07/enabling-html5-audio-playback-on-ios.html

    Here is a similar stackoverflow question discussing the same thing: Autoplay audio files on an iPad with HTML5

    And here follows a JavaScript "module" I have written to use for handling playback of audio in HTML5:

    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 讨论(0)
提交回复
热议问题