gpt4 book ai didi

javascript - icecast audio.js 无缓冲播放

转载 作者:太空宇宙 更新时间:2023-11-04 16:24:31 25 4
gpt4 key购买 nike

我有一个在服务器上运行的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com