我正在开发一个渐进的网络应用程序,主要用于桌面和Android播放音乐。在PC上,一切正常。在Android上,它突然停止工作。经过一些研究后,我发现this有关chrome中自动播放政策更改的更新。
要点是,如果没有用户互动,你就不能再玩媒体了。
在此更新之前,我的AudioContext被创建onload
,之后才被使用。这不再适用了。
更新帖子说明了这一点:
在文档收到用户手势以启用音频播放后,必须创建或恢复AudioContext
因此,我对.suspend()
和.resume()
相应的背景onPlay
和onPause
进行了一些调整。
在PC上这仍然有效,在Android上却没有。我错过了什么吗?
修改1:
我找到了this网站,说明了以下内容:
根据新政策,媒体内容将被允许自动播放 以下条件:
a)内容被静音,或者不包含任何音频(仅限视频)
b)用户在浏览过程中点击或点击了网站上的某个位置 会话
c)在移动设备上,如果该网站已被用户添加到主屏幕
d)在桌面上,如果用户经常在网站上播放媒体, 根据媒体参与指数
如果其中一个匹配,我明白这是真的。在我的情况下,b)和c)得到满足。 所以我猜这应该工作?
答案 0 :(得分:1)
您需要在用户操作事件(例如按钮单击)上在音频上下文上调用resume()。我猜你的问题是调用context.resume()的位置不在用户交互事件上。您不能只是从onLoad调用它。
示例代码:
// Existing code unchanged.
window.onload = function() {
var context = new AudioContext();
// Setup all nodes
...
}
// One-liner to resume playback when user interacted with the page.
document.querySelector('button').addEventListener('click', function() {
context.resume().then(() => {
console.log('Playback resumed successfully');
});
});
文档在此处描述:https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio