我一直在试图追踪这个问题,但似乎没有一致的答案。如果我有一个网站尝试使用 HTML 5 音频元素连续播放多首歌曲(想想播放列表),它可以继续在 iOS 锁定屏幕上工作吗?
对于某些背景,这个答案似乎表明这是可能的。但是这篇文章表明它不是。
我尝试按照 Apple 推荐的最接近的示例进行操作,如在此处找到的,以复制此内容。我使用的是普通的、vanilla javascript 和 HTML,没什么特别的。我完全复制了他们的例子,只是用音频标签替换了视频,随机选择了两首 mp3 歌曲。它所做的只是等待一首歌曲结束,然后切换 src、加载并播放下一首曲目。
当我在网站上点击播放时,我锁定了 iPhone。将播放第一首歌曲,然后停止。它不会继续下一首歌曲。
如果网站打开页面,它将正确过渡到下一首歌曲。在 Android 上,即使手机被锁定,它也会继续播放下一首歌曲。
我在 iOS 11 和 12 上尝试过这个。都没有奏效。我已经阅读了许多关于当网站不在前台时如何停止 javascript 以及 iOS 如何需要用户交互来播放音频(甚至从一首歌曲播放到下一首歌曲)的不同答案。所以这似乎行不通。但是其他答案似乎表明这是可能的。
是否有明确的是或否?我在这里做错了吗?或者只是不可能?
有多个问题,这导致了一些混乱。
如果第一首曲目是在用户许可的情况下启动的,那么您可以通过脚本切换到新曲目的唯一方法是按照 Apple 的建议。处理ended事件并交换新的,并在回调完成之前src调用。.play()否则,您的代码将无权启动新音频。
ended由于时间有限,无法参加活动 ( #t=5,10)假设您有一个 30 秒的音频文件,并且您通过#t=5,10URL 末尾之类的内容告诉浏览器仅加载第 5 秒到第 10 秒。当您到达 时10,paused将触发一个事件,而不是ended。因此,不可能正常进入下一首曲目,因为苹果并没有“祝福”此事件算作先前用户交互的接力。
我通过让 JavaScriptcurrentTime反复检查来解决这个问题,当它超过阈值时,我自己寻找duration文件的(结尾)。这允许ended正常射击。
这是一个真正需要调试的问题,因为它不会出现在任何模拟器中。无论如何,你是对的,你的 JavaScript 将被暂停,所以即使你遵循 Apple 的建议,你也不会走运。或者,你是吗?
一个 hack...在 Web Audio 上下文上设置 ScriptProcessorNode。将缓冲区大小设置为 512 个样本或其他值。然后,在脚本过程中,timeupdate为您的音频元素强制一个事件。这会让你的 JavaScript 继续运行。ScriptProcessorNode 本质上必须在这里拥有特殊的权限。
苹果:如果您阅读本文,请修复您的浏览器。如果我们不必为了让音频播放列表这样简单的东西而工作,那就太好了。其他浏览器几乎不存在这种级别的问题。
| 归档时间: |
|
| 查看次数: |
2118 次 |
| 最近记录: |