我正在开发一个渐进的网络应用程序,主要用于桌面和Android播放音乐。在PC上,一切正常。在Android上,它突然停止工作。经过一些研究后,我发现this有关chrome中自动播放策略更改的更新。
要点是,如果没有用户互动,你就不能再玩媒体了。
在此更新之前,我的AudioContext被创建了onload
,之后才被使用。这不再起作用了。
更新帖子说明了这一点:
在文档收到用户手势以启用音频播放后,必须创建或恢复AudioContext
所以我对.suspend()
和.resume()
进行了一些调整,相应的背景是我申请的onPlay
和onPause
。
在PC上这仍然有效,在Android上它没有。我错过了什么吗?
编辑1:
我发现this网站说明以下内容:
根据新政策,媒体内容将允许在以下条件下自动播放:
a)内容静音,或不包含任何音频(仅限视频)
b)用户在浏览会话期间点击或点击了网站上的某个位置
c)在移动设备上,如果该网站已被用户添加到主屏幕
d)在桌面上,如果用户经常在网站上播放媒体,则根据媒体参与度指数
如果其中一个匹配,我理解这是真的。在我的情况下,b)和c)得到满足。所以我想这应该有用吗?
您需要在用户操作事件(如按钮单击)上调用音频上下文中的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');
});
});
Docs在这里描述:https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio