我在服务器上运行了一个icecast设置。连接到它的客户端是网页中的标记,无论是通过HTML5还是Flash。我目前正在使用audio.js来实现这个目标(特别是闪存回退)。
问题是,音频是同时播放,但单独播放的图像流。(这是一个10 fps的jpeg流。)我需要音频尽可能与图像匹配。不幸的是,音频有时会延迟7秒才开始播放。
一些资料:
<burst-on-connect>设置为0,以尽量减少延迟。换句话说,当通过vlc观看图像和播放音频时,所有的东西都已经足够地对齐了。不幸的是,在游戏结束时,使用VLC不是一种选择。
因为VLC没有延迟,这告诉我网络浏览器(Chrome,firefox,IE)在播放之前正在缓冲音频。
问题:如何防止web浏览器缓冲音频?我希望它一有任何可用的东西就立即播放。我目前正在使用audio.js,但是其他类似的技术是可以接受的。
附加信息:我已经将audio.js设置为自动播放和preload=none。
谢谢你的帮忙!
发布于 2014-10-28 16:39:27
缓冲区是总是必需的。网络是分组交换的。数据以块的形式出现,而不是连续的。事实上,有许多缓冲区:
正如您已经注意到的,每个缓冲区都会增加延迟。您真正控制的唯一缓冲区是服务器端缓冲区,它是由<burst-on-connect>设置配置的。通过将此缓冲区的大小设置为更大的大小,您可以非常快地填充所有下游缓冲区,从而能够极快地开始播放。您已经将其设置为零,这意味着下游缓冲区只能在数据从编码器输入时才能填充。
客户端,你绝对没有控制缓冲,你也不应该。客户端可以自由地以他们选择的任何方式实现编解码器。有些编解码器可以立即开始播放,而另一些则不能。有些设备必须重新采样您的音频以适应它们的播放,而另一些则不然。
听起来你真正想做的是同步视频流和音频流。为此,您应该只是流一个视频流开始。制作视频是为了保持音频和视频的同步。Icecast甚至支持几种格式的流视频。
https://stackoverflow.com/questions/26610372
复制相似问题