javascript - 即使音频上下文处于运行状态,音频元素的播放 promise 也会被拒绝

标签 javascript ios audio mobile-safari html5-audio

我附上一个屏幕截图,以供引用,以获取有关所面临问题的更详尽的想法。

我非常了解自动播放政策,并已通过了可能涉及用户交互的方法。另外,我不喜欢向用户显示任何屏幕或按钮以使他单击,从不,我不希望那样。

我正在开发一个wordpress插件并具有麦克风功能,该功能可以附加到任何wordpress网站上的textbpx上,用户可以点击它(用户交互)。

我还读到我需要恢复暂停的音频上下文,这是正在做的,并且正如您在屏幕快照中所看到的那样,音频元素播放方法前后音频上下文“正在运行”的状态。

我正在使用使用Audio()构造函数创建的音频元素。

Note: screenshot is a photo of mac system, I am debugging iphone xr using usb cable.



有人可以帮我解决问题或为我提供启发,或者存在任何技术限制。
Error console screenshot

最佳答案

叹!在经历了一个星期的 hell 之后,我终于设法使事情正常了。

为了给出解决方案的概述,让我首先描述在iOS Sfari上存在问题的工作流程的高层概貌。

有问题的工作流程

clickHandler --> AudioContext creation --> Playing audio using audio element.



此工作流程之后的所有音频都无法实现“播放” promise 。

对我有用的解决方案

clickHandler --> Play audio using audio element -> AudioContext creation --> Playing audio using audio element.



对我有用的解决方案的兴趣点是,您必须使用音频元素作为“clickHandler”中的第一行代码来播放音频。毫无疑问, promise 仍然会失败,但随后的音频会播放。

另外,我正在为要播放的每个新音频源创建一个新的音频元素,这是错误的,因为自动播放策略是基于“按元素” 实现的。因此,与其为每个源创建新的音频元素,不如在页面加载时创建一个音频元素(或一次创建时适合您的任何内容),并且每当我要播放不同的音频文件时,都只需更改“.src”属性/属性即可。

这就是它为我工作的方式。我必须提到整个星期都在经历 hell ,以前在这里回答过的问题及其特定问题的解决方案一直在为人们提供指导,这为我寻求解决方案提供了新视角。互联网,Webkit,Chrome,Apple的自动播放策略文档也有很大帮助。

关于javascript - 即使音频上下文处于运行状态,音频元素的播放 promise 也会被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60079313/

相关文章:

ios - 接收未声明的私有(private)属性(property)选择器

c# - 如何在 C# 中将 g729 编码字节数组转换为 .WAV?

audio - 测量音频噪声电平

javascript - 错误 : ENOENT: no such file or directory, 统计 Laravel 混合错误

ios - UIViewController 实例问题

javascript - 样式绑定(bind)中的 Knockout.js 图像

ios - 观察添加到 Set 的值 - Swift

java - AudioFormat.Encoding 构造函数参数的含义是什么?

javascript - 如何过滤数组数组

javascript - Heroku - 带 Gulp 和 Browserify 的 Node : Error Cannot find module from