2014-03-04 85 views
1

我有一个客户端/服务器音频合成器,其中服务器(java)动态生成要由客户端使用HTML5音频元素呈现的音频流(Ogg/Vorbis)。用户可以调整各种参数,服务器立即相应地更改输出。不幸的是,音频元素非常积极地缓冲(预取),所以直到几分钟后才听到用户所做的改变。使用WebAudio API播放音频流

试图禁用预加载没有任何效果,显然这个设置只是'建议',所以不能保证它的行为在浏览器中是一致的。

我一直在阅读我能找到的关于WebRTC和不断发展的WebAudio API的一切,看起来好像我需要的所有东西都在那里,但我不知道是否有可能将它们连接起来, d喜欢。

我看了看RTCPeerConnection,它确实提供了低延迟,但它带来了很多我不想要或不需要的行李(STUN,ICE,offer/answer等),目前它似乎只支持有限的一套编解码器,主要面向语音。另外,由于服务器端是用java编写的,我认为我需要做很多工作来教它如何“讲”所涉及的各种协议和格式。

AudioContext.decodeAudioData适用于静态示例,但不适用于流,因为它不会处理传入的数据,直到消耗完整个流为止。

我想要的是没有任何缓冲的音频标签(即HTMLAudioElement)的确切功能。如果我能以某种方式创建一个MediaStream对象,该对象使用服务器URL进行输入,那么我可以创建一个MediaStreamAudioSourceNode并将该输出发送到context.destination。这与AudioContext.decodeAudioData已经做的没有什么不同,除了该方法创建静态缓冲区而不是流。

我想保留Ogg/Vorbis压缩并最终使用其他编解码器,但接下来我可以尝试的一件事是发送原始PCM并随时编译音频缓冲区,就好像它们是通过编程方式生成的javascript代码。但是,我认为所有的零件都已经存在,如果有什么方法可以利用这些零件,我会非常激动的去了解它!

由于提前, 乔

回答

0

你过的怎么样?你解决了这个问题吗?我正在解决类似的挑战。在浏览器端,我使用网络音频API,它具有很好的方法来呈现流式输入音频数据,服务器端上的nodejs使用网络套接字作为中间件来发送浏览器流媒体PCM缓冲区。

+0

对不起,回复迟了,刚刚注意到你的评论。我最终实现了与您所描述的非常相似的东西。我打开了一个Web套接字连接,用于将流式记录数据从浏览器传输到服务器,并将数据从服务器传输回浏览器。 –