html5 <audio>无法在IOS Safari上播放</audio>

时间:2011-06-09 04:33:09

标签: html ios ipad html5 safari

我有一个可以通过旧版浏览器中的embed标签正常播放的mp3,但对于iPad,当我尝试通过<audio>播放相同的mp3时,它说电影不受支持。这是MIME类型问题吗?此方法适用于桌面Safari。

如何在IOS4.3下在Safari上播放?

这是我的代码:

var audio = document.createElement('audio');  
audio.type = "audio/mpeg";     
audio.src = audioUrl;              
x.appendChild(audio);     
audio.load(); 
audio.play(); 

5 个答案:

答案 0 :(得分:10)

从4.x iOS开始,不再支持html5音频对象的自动播放。 请参阅:Autoplay audio files on an iPad with HTML5

edit(2011-10-04):这是关于如何呈现原始海报代码片段的。如果未通过用户操作(f.ex单击)触发的事件执行给定代码,则不会播放音频。如果你在一个函数内部有这个代码,该函数被绑定到某个按钮上的click事件,那么它应该可以工作(尚未测试)。

答案 1 :(得分:4)

问题是负载必须在用户触发的事件中发生(按钮点击等)。我不确定这是哪个iOS版本,但我在4.3.5中确认了它。我在这里写了更多细节和可能的解决方法:

Autoplay audio files on an iPad with HTML5

编辑:Apple的解释: http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html

所以问题是iOS 4 +

答案 2 :(得分:3)

我必须通过kinakuta

添加一些答案

我在评论中尝试了回答apples html5 showcase的链接 如果你将Opera视为firefox,音乐将与Firefox 16,Internet Explorer 9,Google Chrome 22和Opera一起播放。

但Apples OWN Demo在我的机器上无法使用Apple Safari 5.1.7,因为我的机器上没有Quicktime。 HTML5音频与Safari无法很好地协作,其他人也遇到了麻烦。 这可能是开发过程中的烦恼如果不想在计算机上安装quicktime。

答案 3 :(得分:1)

请注意,如果您通过https提供内容,则需要拥有有效的证书,否则它将无法在iOS设备上播放(或在Mac上的Safari上播放)。您不会收到SSL错误或任何明显的SSL相关消息 - 它只能在iOS设备和Mac上使用Safari,但适用于Mac上的Chrome和Firefox(例如)。

有关SSL存在问题的相关问题,请参阅here

答案 4 :(得分:0)

大家好消息

我在某处读到,一旦您在用户交互中播放了一次声音, 然后您无需进一步互动即可再次播放。

因此将音量设置为零并在开始时一次性播放所有加载的声音。

我有一个带有单个实例化函数的“touchstart”监听器 一旦用户触摸屏幕,就会播放所有声音。

这是我在 REACT componentDidMount() 中的做法

componentDidMount() 
{
    
    let that = this;
    document.body.addEventListener('touchstart', function(evt) //First touch event on the screen will trigger this
        { 
            console.log("Audio Setup for iOS:", that.state.allow_sound);
            if(!that.state.allow_sound) //False on initial load
            {
                var Audio1 = document.getElementById("ping");
                Audio1.load();  
                Audio1.volume = 0;
                Audio1.play();          
                
                var Audio2 = document.getElementById("boom");
                Audio2.load();  
                Audio2.volume = 0;
                Audio2.play();  
                        
                var Audio3 = document.getElementById("splash");
                Audio3.load();  
                Audio3.volume = 0;
                Audio3.play();          
                
                var Audio4 = document.getElementById("hit");
                Audio4.load();  
                Audio4.volume = 0;
                Audio4.play();                          

                that.setState({allow_sound : true})
            }
    });
}

Then you can call these sounds dynamically from within the code.