javascript - 用于直播的网络音频 API?

标签 javascript html html5-audio audio-streaming web-audio-api

我们需要将实时音频(来自医疗设备)流式传输到 Web 浏览器,端到端延迟不超过 3-5 秒(假设网络延迟为 200 毫秒或更短)。今天,我们使用浏览器插件 (NPAPI) 进行解码过滤(高、低、频带)和播放 音频流(通过 Web 套接字传送)。

我们要更换插件。

我在看各种 Web Audio API demos我们所需的大部分功能(播放、增益控制、过滤)似乎在 Web Audio API 中可用。 .但是,我不清楚 Web Audio API 是否可以用于流媒体源,因为大多数 Web Audio API 使用短声音和/或音频剪辑。

Web Audio API 可以用来播放直播音频吗?

更新(2015 年 2 月 11 日):

经过更多研究和本地原型(prototype)制作,我不确定使用 Web Audio API 进行实时音频流是否可行。由于 Web Audio API 的 decodeAudioData 并非真正设计用于处理随机的音频数据 block (在我们的例子中是通过 WebSockets 传送的)。它似乎需要整个"file"才能正确处理它。

参见计算器:

现在可以使用 createMediaElementSource 连接 <audio>元素添加到 Web Audio API,但根据我的经验,<audio>元素会导致大量的端到端延迟(15-30 秒),而且似乎没有任何方法可以将延迟减少到 3-5 秒以下。

认为唯一的解决方案是将 WebRTC 与 Web Audio API 一起使用。我希望避免使用 WebRTC,因为它需要对我们的服务器端实现进行重大更改。

更新(2015 年 2 月 12 日)第 I 部分:

我还没有完全消除 <audio>标签(需要完成我的原型(prototype))。一旦我排除了它,我怀疑 createScriptProcessor(已弃用但仍受支持)对于我们的环境将是一个不错的选择,因为我可以将我们的 ADPCM 数据“流”(通过 WebSockets)到浏览器,然后(在 JavaScript 中)将其转换为PCM。类似于 Scott 的库(见下文)使用 createScriptProcessor 所做的事情。此方法不需要像 decodeAudioData 方法那样将数据放入适当大小的“ block ”和关键时序中。

更新(2015 年 2 月 12 日)第二部分:

经过更多测试,我消除了 <audio> Web Audio API 接口(interface),因为根据源类型、压缩和浏览器,端到端延迟可能为 3-30 秒。剩下的就是 createScriptProcessor 方法(参见下面 Scott 的帖子)或 WebRTC。在与我们的决策者讨论后,我们决定采用 WebRTC 方法。我假设它会起作用。但它需要更改我们的服务器端代码。

我要标记第一个答案,这样“问题”就关闭了。

感谢收听。请根据需要随意添加评论。

最佳答案

是的,Web Audio API(连同 AJAX 或 Websockets)可用于流式传输。

基本上,您拉下(或发送,在 Websocket 的情况下)一些 n 长度的 block 。然后,您使用 Web Audio API 对它们进行解码,并将它们排队播放,一个接一个。

因为 Web Audio API 具有高精度定时,如果您正确地进行调度,您将不会在每个缓冲区的播放之间听到任何“接缝”。

关于javascript - 用于直播的网络音频 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28440262/

相关文章:

javascript - 对象键中的点

javascript - 当值更改时使用本地存储如何动态更新不同页面中的文本框?

javascript - 如何从异步调用返回响应?

javascript - 如何使用 Vue 配置汇总?

javascript - 如何获取<audio>标签信息?

html - 使用 HTML5 音频播放 pls 文件

javascript - angular2 html 5音频播放器ontimeupdate事件

html - 使用 CSS 隐藏内联 div

javascript - 替代 Javascript 上的延迟函数

html - 如何使表格行在 Angular 2 中充当超链接