【问题标题】:Cant play HTML Audio on IOS无法在 IOS 上播放 HTML 音频
【发布时间】:2021-11-11 16:24:07
【问题描述】:

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

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

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

国王的问候。

【问题讨论】:

  • 您是说要在 iOS 设备上预加载或自动播放音频文件吗?因为如果是这样,那么我不知道是否有解决它的好方法。您可以考虑使用 React Native 或 Electron 构建应用程序,这两者都允许您使用 JavaScript 开发移动应用程序。
  • 嘿,是这样的:用户1点击一个按钮并搜索用户2,用户2也在搜索合作伙伴进行语音通话。当 User1 找到 User2 时,他们会互相分享他们的音频流,这样他们就可以互相听到(通过 webrtc 和 peer)。如果其中一个用户再次单击该按钮,他将与另一个用户进行语音通话。每次用户连接到另一个用户时,他们都必须共享他们的音频流,我将其绑定到音频 html 元素中。我正在使用角度。
  • 所以我点击一个按钮来搜索要与之建立语音通话的人,然后你点击同一个按钮。我们找到彼此,然后连接到音频流?

标签: javascript ios webrtc audio-streaming peer


【解决方案1】:

考虑使用Web Audio API,而不是直接从您的媒体元素输出。具体来说:

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

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

【讨论】:

    【解决方案2】:

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

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

    <video autoplay>
    

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

    【讨论】:

    • 您好,谢谢您的回复。我在上面写道,我正在使用角度。我想稍后用我的 ios 和 android 角度项目构建一个科尔多瓦应用程序。我是否理解正确,对于科尔多瓦项目,我所遇到的这个问题不存在?
    猜你喜欢
    • 2012-03-22
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多