无法在 IOS 上播放 HTML 音频

Cant play HTML Audio on IOS

我有一个 Web 应用程序,用户可以在其中通过 Webrtc 和对等服务器相互交谈。 我的问题是,在 ios 设备上我无法发送音频,也听不到其他设备。 经过一番研究,我发现这是苹果的故意行为。如果音频是由用户而非网站触发的,则只能播放音频。 但是我的应用程序是一个随机大厅,人们可以在这里互相交谈并通过单击按钮切换“合作伙伴”。单击后搜索另一个免费用户,然后两者都通过对等点连接并共享他们的音频流。

然后我尝试在触摸事件中调用 audio.play()。但这也没有用。什么都没发生。双方依旧没有声音。你们知道吗,我应该如何处理这个问题。

在浏览器上一切正常。此问题仅出现在 IOS 移动浏览器上。

国王问候。

您实质上是在询问如何绕过限制。不过,您还没有具体说明要绕过哪个限制,所以我只能根据您到目前为止告诉我的内容假设您正在尝试自动播放音频。

如果是这种情况,最简单的方法可能是设置一个空白视频流而不是音频流,然后像这样添加自动播放 属性:

<video autoplay>

但是,不要指望此变通办法 - 或任何限制的任何变通办法 - 作为长期解决方案, 如果你今天甚至可以让它工作。如果你可以绕过限制,那么不那么谨慎的开发人员也可以,所以 Apple 可能倾向于修补任何绕过他们限制的方法。您最好的选择可能是使用 React Native 为 iOS 和 Android 构建原生应用程序。 React Native 可以使用 JavaScript 或 TypeScript(您选择哪个)。

与其直接从媒体元素输出,不如考虑使用 Web Audio API。具体来说:

  1. 创建 AudioContext/webkitAudioContext。它通常会以“暂停”开始。
  2. 在用户交互中,例如初始点击,调用 context.resume()
  3. 当您想从新的 WebRTC 流输出音频时,创建一个新的 MediaStreamAudioSourceNode,并将其连接到您的音频图。 (例如 mediaStreamNode.connect(context.destination)

这不是以任何方式破解或解决自动播放限制的方法。它只是将所有音频输出放在一个地方。