2014-10-28 98 views
1

我有一个在服务器上运行的icecast安装程序。将连接到它的客户端是网页中的标签,可以通过HTML5或Flash。我目前使用audio.js来实现这一点(特别是闪回回退)。icecast audio.js无缓冲播放

问题是,音频正在同时播放,但与图像流分开播放。 (这是一个10帧/秒的jpeg流。)我需要音频尽可能与图像匹配。不幸的是,音频有时会在开始播放之前延迟7秒。

一些信息:

  • 图像流不能被延迟,以匹配音频。音频必须加速以匹配图像。
  • icecast服务器配置将<burst-on-connect>设置为0以最小化等待时间。
  • 通过VLC播放时基本上没有滞后(可能几百ms,这是可以接受的)。

换句话说,当查看图像并通过vlc播放音频时,所有内容都已充分对齐。不幸的是,使用VLC不是最终选择。由于VLC没有滞后,这告诉我,网络浏览器(Chrome,Firefox,IE)在播放音频之前缓冲音频。

问题:如何防止网络浏览器缓冲音频?我希望它在有任何可用的情况下立即播放。我目前使用audio.js,但其他类似的技术是可以接受的。

其他信息:我已将audio.js设置为自动播放并预加载=无。

感谢您的帮助!

回答

3

缓冲区是总是需要。网络是分组交换。数据大块,而不是连续。事实上,有许多的缓冲区:

  • 捕获缓冲液(声卡)
  • 编解码器缓存(编解码器在时间上采样的一大块工作)
  • 网络缓冲服务器
  • 服务器侧的缓冲液(典型地非常大,超过10秒)
  • 网络缓冲区客户
  • 客户端缓冲液(一般为2-3秒)
  • 客户端的编解码器缓冲器
  • 客户端的音频设备缓冲

每个缓冲区增加了延迟,因为你已经注意到了。您真正控制的唯一缓冲区是服务器端缓冲区,该缓冲区由<burst-on-connect>设置配置。通过将此缓冲区的大小设置为更大的大小,您可以非常快速地填充所有下游缓冲区,从而实现非常快速的播放开始。您已将其设置为零,这意味着下游缓冲区只能填充与编码器中的数据一样快的速度。

客户端,你完全不能控制缓冲,你也不应该。客户可以自由选择任何方式实施编解码器。一些编解码器可以立即开始流式传输,而其他编解码器则不能。有些设备必须重新采样音频以适合播放内容,而其他设备则不需要。

它听起来像你真正想要做的是同步视频流和音频流。为此,您应该只是开始流式传输视频流。视频用于保持音频和视频同步。 Icecast甚至支持几种格式的流式视频。

+0

我们自己也得出了同样的结论,目前正在研究基于ffmpeg的解决方案。感谢您的回答! – 2014-10-28 20:02:10