我正在使用 Icecast 从内部麦克风流式传输实时音频,并希望听众的延迟尽可能小。
一个天真的解决方案是简单地访问http://myhostname:8000/my_mountpoint
以获取流,但<audio>
标签在播放之前会进行内部缓冲,并导致相当高的延迟。
当前解决方案:我使用ReadableStreams
API来解码(使用decodeAudioData
Web Audio API)并通过将解码后的数据路由到音频上下文目标(内部扬声器)来播放数据块。这有效并显着降低了延迟。
问题:这个流 API 虽然是实验性的,但在技术上应该可以在最新的 Chrome、Safari、Opera、FF 上运行(在设置特定标志之后)。decodeAudioData
但是,除了 Chrome 和 Opera 之外,我在所有其他浏览器中都遇到了问题。我认为 FF 和 Safari 无法解码部分 MP3 数据,因为当我开始流式传输时,我通常会听到扬声器的短暂激活。在 Safari 上,decodeAudioData
从不调用成功的回调,FF 只是说EncodingError: The given encoding is not supported.
如果我想至少让它在 Safari 和 FF 上工作,有什么解决方法吗?Chrome 和 Safari 上的decodeAudioData
实现实际上是否不同,以至于一个可以在部分 MP3 上工作而另一个不能?