HTML5:在没有浏览器插件的情况下播放实时Opus音频帧

Ton*_*ony 5 javascript audio html5 audio-streaming html5-audio

我们需要用无插件解决方案替换NPAPI浏览器插件。我们有第三方输入设备,可以以Opus“帧”的形式向我们提供现场音频。我们使用二进制WebSocket将这些帧传输到浏览器。然后将数据转发到我们的NPAPI插件以进行解码和音频播放。见图片。

音频流

在满足这些要求的情况下,我们应采用哪种方法用HTML5-ish解决方案替换NPAPI插件?

  1. 将端到端延迟最小化至不超过3-5s(假设往返网络延迟为200mS)。
  2. 提供一种应用音频过滤器的方法(客户端/浏览器端)

使用html5音频标签似乎会引入大量延迟,因为各种浏览器在开始播放之前需要一定数量的缓冲(15-30秒的音频)。我们了解,并非所有浏览器都支持Opus。如果需要(尽管我们不想减少带宽),我们可以在将数据发送到浏览器之前将Opus帧封装到Web服务中的Ogg容器中。看一下html5rocks的一个演示,HTML5 Audio Playground,似乎可以实现#2。

如果这是一个提出此类设计问题的较差的地方,请建议其他更合适的论坛/论坛。

感谢您的帮助或建议。

Bra*_*rad 1

由于您需要管理所有缓冲以及不需要您自己管理的内容,因此我认为最好的选择是在 JavaScript 中实际解码 Opus 帧。作为奖励,您将获得更好的浏览器支持。

Aurora.js 项目对此提供支持: https: //github.com/audiocogs/opus.js 尽管现阶段还处于实验阶段。

如果您不必使用 Opus 和 WebSocket,您将有更多选择。在大多数情况下,标准<audio>标签不需要超过几秒钟的音频缓冲区即可开始播放。当出现这种情况时,通常是因为内容类型标头错误,播放器软件必须弄清楚它是什么,需要更大的缓冲区才能使用。或者,存在某种其他同步问题。