首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不需要缓冲的audio.js播放

不需要缓冲的audio.js播放
EN

Stack Overflow用户
提问于 2014-10-28 14:05:36
回答 1查看 2.2K关注 0票数 2

我在服务器上运行了一个icecast设置。连接到它的客户端是网页中的标记,无论是通过HTML5还是Flash。我目前正在使用audio.js来实现这个目标(特别是闪存回退)。

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

一些资料:

  • 图像流不能被延迟以匹配音频。音频必须加速以匹配图像。
  • icecast服务器配置将<burst-on-connect>设置为0,以尽量减少延迟。
  • 从本质上说,在通过VLC播放时没有任何滞后(可能是几百毫秒,这是可以接受的)。

换句话说,当通过vlc观看图像和播放音频时,所有的东西都已经足够地对齐了。不幸的是,在游戏结束时,使用VLC不是一种选择。

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

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

附加信息:我已经将audio.js设置为自动播放和preload=none。

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-28 16:39:27

缓冲区是总是必需的。网络是分组交换的。数据以块的形式出现,而不是连续的。事实上,有许多缓冲区:

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

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

客户端,你绝对没有控制缓冲,你也不应该。客户端可以自由地以他们选择的任何方式实现编解码器。有些编解码器可以立即开始播放,而另一些则不能。有些设备必须重新采样您的音频以适应它们的播放,而另一些则不然。

听起来你真正想做的是同步视频流和音频流。为此,您应该只是流一个视频流开始。制作视频是为了保持音频和视频的同步。Icecast甚至支持几种格式的流视频。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26610372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档