gpt4 book ai didi

ios - HTML5 音频回调在 safari/iOS 上失败

转载 作者:太空狗 更新时间:2023-10-29 15:28:55 26 4
gpt4 key购买 nike

我构建了一个应用程序,旨在通过使用“结束”事件在第一个声音结束时播放每个声音。

在我的初始版本中,每个声音都有自己的音频元素,结果如下:

   function play_next_audio(){
speaker = $('audio#' + sounds[i++]).get(0);
speaker.addEventListener('ended',play_next_audio);
speaker.play();
}

这适用于所有桌面浏览器,包括 Safari,但不会超出 iOS 上的第一个字母。

我还尝试了一种不同的方法 - 一个音频元素依次加载每个声音。在那里,我尝试绑定(bind)“结束”事件以及先加载并绑定(bind)“canplaythrough”事件。在这两种情况下,它甚至无法在桌面 Safari 上运行 - 这次成功播放了前两个字母。

这是独立的测试:

http://dev.connectfu.com:42001/app/test-sounds.html

请注意 audio.load() 被注释掉了几个地方 - 加入或退出似乎没有什么区别。

我做错了什么?如何在 iOS 上播放一系列声音?非常感谢您的帮助!

最佳答案

更新 自 2017 年起,已结束的事件在多种情况下不会在 iOS 上的 Safari(或 Chrome)上触发。可以在此处找到更多信息:It's almost 2017, and HTML5 audio is still broken on iOS .


我构建了一个 HTML5 音频播放器 ( Chavah Messianic Radio ),它可以在 iOS 上的 Safari 上“运行”。

我所说的“有效”是指,它在 Apple 残缺的 iOS

这是我的发现:

  • Apple 不允许在用户交互之前对任何音频调用 .play。对我来说,这意味着检测 iOS,然后将音乐显示为暂停,直到用户点击播放。他们的理由是这会消耗数据和电池;但在实践中,它只会削弱网络应用程序并扼杀网络的发展。
  • 如果您想播放连续的声音(一个接一个),请使用单个元素。当播放下一个声音时,设置 existingAudio.src,然后调用 existingAudio.load(),然后调用 existingAudio.play()。这将使您能够播放连续的声音。
  • 如果 Safari 在后台运行,则不会触发音频事件。。如果用户切换到不同的应用程序,音频将继续播放,但不会触发 .ended 事件。这意味着构建音乐播放器应用几乎是不可能的。

希望这对您有所帮助。

< rant >

与此同时:Apple,拜托,拜托,请在 iOS Safari 中为我们提供更好的 HTML5 支持。 Apple,这是你的行动项目:

  1. 让 HTML5 音频在后台运行。
  2. 支持 OGG。
  3. 支持预加载音频。
  4. 支持并发音频。
  5. 让我们在没有用户交互的情况下播放音频。

做这些事情,Apple,你将成为移动 HTML5 音频的行业领导者,每个人都会效仿你,你将再次引领潮流,网络应用程序将在你的平台上完美运行,同时在其他移动平台。是的,这些功能会使用数据和电池,但 native 应用程序已经这样做了。停止削弱网络应用程序并成为领导者。 让 HTML5

关于ios - HTML5 音频回调在 safari/iOS 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10985640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com