【问题标题】:Audio element play promise rejection even while audio context is in running state即使音频上下文处于运行状态,音频元素也会播放承诺拒绝
【发布时间】:2020-05-21 13:48:24
【问题描述】:

我附上一个截图以供参考,以更详细地了解所面临的问题..有点地狱。

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

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

我还读到我需要恢复暂停的音频上下文,这是在做的,正如您在屏幕截图中看到的音频元素播放之前和之后音频上下文“运行”的状态。

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

注意:截图是mac系统的照片,我正在用usb线调试iphone xr。

有人可以帮助我或启发我做错了什么或存在任何技术限制。

【问题讨论】:

    标签: javascript ios audio mobile-safari html5-audio


    【解决方案1】:

    叹息!经过一周的地狱般的努力,我终于成功了。

    为了概述解决方案,让我首先描述在 iOS Sfari 上存在问题的工作流程的高级粗略概念。

    有问题的工作流程

    clickHandler --> AudioContext 创建 --> 使用音频元素播放音频。

    此工作流程所遵循的所有音频都在“播放”承诺中惨遭失败。

    对我有用的解决方案

    clickHandler --> 使用音频元素播放音频 -> AudioContext 创建 --> 使用音频元素播放音频。

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

    另外,我正在为每个要播放的新音频源创建新的音频元素,这是错误的,因为自动播放策略是基于 'per-element' 施加的。因此,我不是为每个源创建新的音频元素,而是在页面加载时创建一次(或任何适合您的一次创建),每当我想播放不同的音频文件时,我只需更改“.src”属性/属性。

    这就是它对我有用的方式。我必须提到整个星期持续的地狱,以前在这里回答的问题以及他们针对问题的具体解决方案一直是指路明灯,这给了我寻找解决方案的新视角。此外,互联网、webkit、chrome 上的文章、苹果关于自动播放政策的文档也有很大帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多