我构建了一个应用程序,旨在通过使用“结束”事件在第一个声音完成时播放每个声音。
在我的初始版本中,每个声音都有自己的音频元素,结果如下:
function play_next_audio(){
speaker = $('audio#' + sounds[i++]).get(0);
speaker.addEventListener('ended',play_next_audio);
speaker.play();
}
这在所有桌面浏览器(包括 Safari)上都非常有效,但在 iOS 上仅适用于第一个字母。
我还尝试了一种不同的方法 - 依次加载每个声音的单个音频元素。在那里,我尝试绑定“结束”事件以及首先加载并绑定“canplaythrough”事件。在这两种情况下,即使在桌面 Safari 上也无法工作 - 这次成功播放了第一个two字母。
这是孤立的测试:
http://dev.connectfu.com:42001/app/test-sounds.html http://dev.connectfu.com:42001/app/test-sounds.html
请注意,audio.load() 在多个地方被注释掉了——将其放入或取出似乎没有什么区别。
我究竟做错了什么?如何在 iOS 上播放一系列声音?十分感谢你的帮助!
update截至 2017 年,在多种情况下,结束事件不会在 iOS 上的 Safari(或 Chrome)上触发。更多信息可以在这里找到:已经快 2017 年了,HTML5 音频在 iOS 上仍然存在问题 http://debuggerdotbreak.judahgabriel.com/2016/12/13/its-almost-2017-and-html5-audio-is-still-broken-on-ios/.
我构建了一个 HTML5 音频播放器(查瓦弥赛亚电台 https://messianicradio.com)可在 iOS 上的 Safari 上“运行”。
我所说的“有效”是指它在 Apple 残缺不全的 iOS
以下是我的发现:
-
Apple 不允许您在用户交互之前对任何音频调用 .play。对我来说,这意味着检测 iOS,然后将音乐显示为暂停状态,直到用户单击播放。他们的理由是,这会消耗数据和电池;但实际上,它只会削弱网络应用程序并扼杀网络的发展。
-
如果您想播放连续的声音(一个接一个),请使用单个元素。当需要播放下一个声音时,设置existingAudio.src,然后调用existingAudio.load(),然后调用existingAudio.play()。这将允许您播放连续的声音。
-
如果 Safari 在后台,则不会触发音频事件。。如果用户切换到其他应用程序,音频将继续播放,但 .ending 事件不会触发。这意味着构建音乐播放器应用程序实际上是不可能的。
希望这可以帮助。
<rant http://debuggerdotbreak.wordpress.com/2012/06/12/apple-please-fix-html5-on-ios/>
同时:Apple,求求你,求求你在 iOS Safari 中为我们提供更好的 HTML5 支持。 Apple,以下是您的行动项目:
- 让 HTML5 音频在后台工作。
- 支持奥格。
- 支持预加载音频。
- 支持并发音频。
- 让我们在没有用户交互的情况下播放音频。
Apple,做这些事情,你将成为移动 HTML5 音频的行业领导者,每个人都会效仿你,你将再次引领潮流,网络应用程序将在你的平台上完美运行,而在其他移动平台上会受到削弱。是的,这些功能将使用数据和电池,但本机应用程序已经这样做了。停止削弱网络应用程序并成为领导者。让 HTML5
咆哮>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)