javascript - Icecast audio.js 无需缓冲即可播放

标签 javascript html audio latency icecast

我有一个在服务器上运行的icecast 设置。将连接到它的客户端是网页中的标签,通过 HTML5 或 Flash。我目前正在使用audio.js 来实现此目的(具体来说,flash 后备)。

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

一些信息:

  • 图像流不能延迟以匹配音频。音频必须加快速度以匹配图像。
  • icecast 服务器配置有 <burst-on-connect>设置为 0 以最大限度地减少延迟。
  • 通过 VLC 播放时基本上没有延迟(可能几百毫秒,这是可以接受的)。

换句话说,当通过 vlc 查看图像和播放音频时,一切都充分对齐。不幸的是,使用 VLC 并不是最终的选择。

由于 VLC 没有延迟,这告诉我网络浏览器(Chrome、firefox、IE)在播放音频之前正在缓冲音频。

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

其他信息:我已将 audio.js 设置为自动播放并 preload=none。

感谢您的帮助!

最佳答案

缓冲区始终是必要的。网络是分组交换的。数据以 block 的形式出现,而不是连续的。事实上,有很多缓冲区:

  • 捕获缓冲区(在声卡处)
  • 编解码器缓冲区(编解码器一次处理一大块样本)
  • 到服务器的网络缓冲区
  • 服务器端缓冲区(通常非常大,10 秒以上)
  • 到客户端的网络缓冲区
  • 客户端缓冲区(通常为 2-3 秒)
  • 客户端编解码器缓冲区
  • 客户端声音设备缓冲区

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

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

听起来您真正想做的是同步视频流和音频流。为此,您应该一开始就流式传输视频流。制作视频是为了保持音频和视频同步。 Icecast 甚至支持多种格式的流媒体视频。

关于javascript - Icecast audio.js 无需缓冲即可播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26610372/

相关文章:

javascript - JavaScript 有构建 URL 的功能吗?

javascript - JavaScript 中宠物的被动变量无法正常工作

php - 为什么我的代码容易受到 xss 攻击?

batch-file - ffmpeg批处理脚本,将多个音频剪辑与一个图像组合在一起> mp4

javascript - 查找并打印网页大小(以字节为单位)以及所有 <a> 标签的数量

javascript - 如何在单击按钮时触发选择选项?

javascript - 按钮单击事件后显示文本框

iphone - AVAudioPlayer使用audioPlayerDecodeErrorDidOccur和NSOSStatusErrorDomain -50中断播放

python - 为什么 pygame.sndarray.make_sound 似乎使声音持续时间增加了四倍?

javascript - 如何更新子窗口?