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

web autoplay policy change resuming context doesn't unmute audio

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

要点是你不能再没有用户交互就播放媒体。

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

更新帖子说明了这一点:

An AudioContext must be created or resumed after the document received a user gesture to enable audio playback

所以我对 .suspend().resume() 上下文进行了一些调整,相应地 onPlayonPause 我的应用程序。

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

编辑 1:

我发现 this 站点说明如下:

Under the new policy media content will be allowed to autoplay under the following conditions:

a) The content is muted, or does not include any audio (video only)

b) The user tapped or clicked somewhere on the site during the browsing session

c) On mobile, if the site has been added to the Home Screenby the user

d) On desktop, if the user has frequently played media on the site, according to the Media Engagement Index

如果其中一个匹配,我理解这是真的。在我的例子中,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');
  });
});

文档在这里描述:https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio