作者:林台育怡婷雅雯 | 来源:互联网 | 2023-05-22 16:01
我们需要将实时音频(从医疗设备)流式传输到网络浏览器,端到端延迟不超过3-5秒(假设网络延迟为200毫秒或更短).今天我们使用浏览器插件(NPAPI)来解码,过滤(高,低,带)和回放音频流(通过Web套接字传送).
我们想要替换插件.
我正在查看各种Web Audio API演示,我们所需的大部分功能(播放,增益控制,过滤)似乎都可以在Web Audio API中使用.但是,我不清楚Web Audio API是否可用于流式传输源,因为大多数Web Audio API都使用短音和/或音频剪辑.
可以使用Web Audio API播放实时流式音频吗?
更新(2015年2月11日):
经过一些研究和本地原型设计后,我不确定是否可以使用Web Audio API进行实时音频流传输.由于Web Audio API的decodeAudioData并非真正设计用于处理随机的音频数据块(在我们的例子中通过WebSockets提供).它似乎需要整个'文件'才能正确处理它.
请参阅stackoverflow:
如何使用node.js和socket.io通过WebSockets传输MP3数据?
为decodeAudioData定义'有效的mp3块'(WebAudio API)
现在可以使用createMediaElementSource将
元素连接到Web Audio API,但是根据我的经验,该
元素会导致大量的端到端延迟(15-30秒)并且似乎没有任何方法将延迟减少到3-5秒以下.
我认为唯一的解决方案是将WebRTC与Web Aduio API一起使用.我希望避免使用WebRTC,因为它需要对我们的服务器端实现进行重大更改.
更新(2015年2月12日)第一部分:
我还没有完全删除
标签(需要完成我的原型).一旦我排除了它,我怀疑createScriptProcessor(已弃用但仍然支持)将是我们环境的一个不错的选择,因为我可以"流"(通过WebSockets)我们的ADPCM数据到浏览器,然后(在Javascript中)将其转换为PCM.类似于Scott的库(见下文)使用createScriptProcessor.此方法不要求数据处于适当大小的"块"和关键时序,如decodeAudioData方法.
更新(2015年2月12日)第二部分:
经过更多测试后,我删除了
Web Audio API接口,因为根据源类型,压缩和浏览器,端到端延迟可能是3-30秒.这留下了createScriptProcessor方法(参见下面的Scott的帖子)或WebRTC.在与我们的决策者讨论后,我们决定采用WebRTC方法.我认为它会起作用.但它需要更改我们的服务器端代码.
我要标记第一个答案,就这样'问题'就此结束了.
谢谢收听.随意添加评论.
1> Kevin Ennis..:
是的,Web Audio API(以及AJAX或Websockets)可用于流式传输.
基本上,你拉下(或在Websockets的情况下发送一些n
长度的块).然后使用Web Audio API解码它们并将它们排队等待一个接一个地播放.
由于Web Audio API具有高精度计时,如果正确进行计划,则不会在每个缓冲区的播放之间听到任何"接缝".
你有一些示例代码吗?
我假设如果缓冲区迟到(网络打嗝)会听到一些削波(间隙),对吗?为了解决这个问题,我可以在开始,播放,纠正之前"预先排队"X字节(或秒)的数据?
是的,确切地说.你无能为力.如果服务器无法以您需要的速度快速发送数据,那么就会出现沉默.除非你的应用程序可以时间旅行,这将是一个很棒的功能.是的,在开始播放之前建立一个半任意长度的缓冲区非常典型,这样你就有了一些网络延迟的余地.