javascript - 网络自动播放策略更改恢复上下文不会取消静音
问题描述
我正在开发一个渐进式网络应用程序,主要用于桌面和安卓播放音乐。在 PC 上,一切正常。在 Android 上,它突然停止工作。经过一些研究,我发现了这个关于 chrome 中自动播放策略更改的更新。
要点是,您不能再在没有用户交互的情况下播放媒体。
在此更新之前,我创建了我的 AudioContext,onload
然后才使用它。这不再起作用了。
更新帖子指出:
在文档接收到用户手势以启用音频播放后,必须创建或恢复 AudioContext
因此,我相应地对我的应用程序.suspend()
和.resume()
上下文进行了一些调整。onPlay
onPause
在 PC 上这仍然有效,在 Android 上则无效。我错过了什么吗?
编辑1:
我发现这个网站说明了以下内容:
根据新政策,媒体内容将被允许在以下条件下自动播放:
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');
});
});
文档在这里描述它:https ://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio
推荐阅读
- javascript - React/Typescript 中的分页
- unreal-engine4 - Daz3d Genesis 8 角色在虚幻中,如何实现衣柜技工?
- python - 脚本在 cron 中失败,但在命令行“密钥环错误”中有效
- python-sphinx - 在 Sphinx 中引用 python 类时的自定义文本
- python - 加载调度程序的状态字典后更改学习率
- html - 使用 css 编辑 h1 引导程序
- java - 在 Minecraft bukkit 插件中找不到主类
- validation - 无法在 asp.net 核心中按名称获取资源文件
- docker - 无法在 docker 桌面中删除 docker 应用程序和容器
- linux - 在哪里可以找到linux文件中的进程表?