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

问题描述 投票:1回答:1

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

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

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

更新帖子说明了这一点:

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

所以我对.suspend().resume()进行了一些调整,相应的背景是我申请的onPlayonPause

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

编辑1:

我发现this网站说明以下内容:

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

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

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

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

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

如果其中一个匹配,我理解这是真的。在我的情况下,b)和c)得到满足。所以我想这应该有用吗?

javascript google-chrome autoplay web-audio-api audiocontext
1个回答
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');
  });
});

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

© www.soinside.com 2019 - 2024. All rights reserved.