我在服务器上运行了一个icecast设置。将要连接到它的客户端是网页中的标签,通过HTML5或Flash。我目前正在使用audio.js来实现这一目标(特别是flash后备)。
问题是,音频正在同时播放,但与图像流分开播放。 (这是一个10-fps的jpeg流。)我需要音频尽可能地与图像匹配。不幸的是,音频有时会在开始播放前延迟7秒钟。
一些信息:
<burst-on-connect>
设置为0以最大程度地减少延迟。换句话说,当查看图像并通过vlc播放音频时,一切都充分对齐。不幸的是,在最后阶段使用VLC不是一个选项。
由于VLC没有延迟,这告诉我网络浏览器(Chrome,firefox,IE)在播放之前正在缓冲音频。
问题:如何阻止网络浏览器缓冲音频?我希望它在有任何可用的东西后立即播放。我目前正在使用audio.js,但其他类似技术也是可以接受的。
附加信息:我已将audio.js设置为autoplay,preload = none。
感谢您的帮助!
答案 0 :(得分:3)
缓冲区始终是必需的。网络是分组交换的。数据是块状的,而不是连续的。事实上,有很多缓冲区:
正如您所注意到的,每个缓冲区都会增加延迟。您实际控制的唯一缓冲区是服务器端缓冲区,它由<burst-on-connect>
设置配置。通过将此缓冲区的大小设置为更大的大小,您可以非常快速地填充所有下游缓冲区,从而实现极快的回放开始。您已将此值设置为零,这意味着下游缓冲区只能填充数据从编码器进入的速度。
客户端,你完全无法控制缓冲,也不应该。客户可以以他们选择的任何方式自由地实现编解码器。一些编解码器可以立即开始流式传输,而其他编解码器则无法开始流式传输。有些设备必须重新对您的音频进行重新采样以适应其播放,其他设备则不会。
您真正想要做的是同步视频流和音频流。为此,您应该只是流式传输视频流。视频用于保持音频和视频同步。 Icecast甚至支持几种格式的流媒体视频。