web自动播放策略更改恢复上下文不会取消静音

时间:2018-05-07 15:57:08

标签: javascript google-chrome autoplay web-audio-api audiocontext

我正在开发一个渐进的网络应用程序,主要用于桌面和Android播放音乐。在PC上,一切正常。在Android上,它突然停止工作。经过一些研究后,我发现this有关chrome中自动播放政策更改的更新。

要点是,如果没有用户互动,你就不能再玩媒体了。

在此更新之前,我的AudioContext被创建onload,之后才被使用。这不再适用了。

更新帖子说明了这一点:

  

在文档收到用户手势以启用音频播放后,必须创建或恢复AudioContext

因此,我对.suspend().resume()相应的背景onPlayonPause进行了一些调整。

在PC上这仍然有效,在Android上却没有。我错过了什么吗?

修改1:

我找到了this网站,说明了以下内容:

  

根据新政策,媒体内容将被允许自动播放   以下条件:

     

a)内容被静音,或者不包含任何音频(仅限视频)

     

b)用户在浏览过程中点击或点击了网站上的某个位置   会话

     

c)在移动设备上,如果该网站已被用户添加到主屏幕

     

d)在桌面上,如果用户经常在网站上播放媒体,   根据媒体参与指数

如果其中一个匹配,我明白这是真的。在我的情况下,b)和c)得到满足。 所以我猜这应该工作?

1 个答案:

答案 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