HTML5音频从Firefox中的错误位置开始

时间:2014-04-07 11:30:48

标签: javascript html5

我试图播放mp3文件,我想跳转到文件中的特定位置。在Windows上的Chrome 33中,文件跳转到正确的位置(与在本地播放mp3的VLC相比),但在Windows上的Firefox 28中,它播放得太远了,而在Internet Explorer 11中,它播放得太远了。

它曾经在Firefox 27及更早版本中正常运行。

有更好的方法吗?


编辑:问题甚至不需要SoundManager2。您只需使用Firefox中的<audio>标记即可复制相同的问题。这两行是重现它所需的所有代码:

<audio autoplay id="audio" src="http://ivdemo.chaseits.co.uk/enron/20050204-4026(7550490)a.mp3" controls preload></audio>
<button onclick="javascript:document.getElementById('audio').currentTime = 10;">Jump to 10 secs "...be with us in, er, 1 minute...  ok" </button>

在此处试试:http://jsfiddle.net/cpickard/29Gt3/

编辑:尝试使用Firefox Nightly,没有任何改进。我在bugzilla中将其报告为bug 994561。现在仍在寻找解决方法。

5 个答案:

答案 0 :(得分:6)

问题在于mp3的 VBR encoding

mp3下载到磁盘并将其转​​换为固定比特率,例如使用Audacity。

从磁盘运行示例:

<audio autoplay id="audio" src="./converted.mp3" controls preload></audio>
<button onclick="javascript:document.getElementById('audio').currentTime = 10;">
Jump to 10 secs "...be with us in, er, 1 minute...  ok" </button>

它对我来说很好。

因此,我对解决方法的建议是上传一个替代固定位mp3文件来代替您正在使用的文件。然后它应该在当前的FFx中工作。

答案 1 :(得分:4)

我在SoundJS工作,虽然实现音频精灵最近遇到了类似的问题。根据规范,设置html音频播放头的位置可能不准确达300ms。这可以解释你所看到的一些问题。

有趣的是,如果我从一开始就让它发挥作用,那么你的小提琴在FF 28中就可以在胜利8.1中正确播放。

还有一些已知的音频长度准确性问题也可能会产生影响,您可以阅读here

如果你想要精确,我肯定会建议尽可能使用网络音频或像SoundJS这样的库。

希望有所帮助。

答案 2 :(得分:3)

我遇到了同样的问题,我通过将我的MP3文件转换为CBR(恒定比特率)格式解决了这个问题。然后,它可以解决 currentTime 和真实声音之间的不一致问题。

Choose the CBR format

步骤:

  • 下载并安装“Audacity”(任何平台免费)
  • 打开MP3文件
  • 点击[文件] - &gt; [导出] - &gt; [选项] - &gt; [常数](参见: Converting MP3 to Constant Bit Rate
  • Audacity会要求您提供LAME MP3编码器 (参见:[下载并安装LAME MP3编码器])

不存在不一致/异步问题。

另见:

tsungjung411@gmail.com

答案 3 :(得分:2)

我刚用另一个音频网址here尝试了你的代码,它似乎工作了,我之前没有在Firefox(v29)中遇到任何延迟。

<audio autoplay id="audio" src="http://mediaelementjs.com/media/AirReview-Landmarks-02-ChasingCorporate.mp3" controls preload></audio>

我想要跳转到一个音频文件,你的服务器必须正确配置。

客户端发送byte range requests来搜索和播放文件的某些区域,因此服务器必须做出充分的响应:

  

为了支持寻求和回放媒体的区域   还没有下载,Gecko使用HTTP 1.1字节范围请求   从搜索目标位置检索媒体。另外,如果你   不提供X-Content-Duration标头,Gecko使用字节范围请求   寻求媒体的终结(假设您提供内容长度   标题)以确定媒体的持续时间。

希望这会有所帮助.. 您还可以尝试查看Web Audio API类似声音效果的播放,这可以保证播放延迟。

答案 4 :(得分:0)

在对小提琴进行测试之后,很明显FF存在一些问题,任何人在搜索某个时间之后,问题都归因于&#34;性能滞后&#34;但好消息是有人找到了解决这个问题的方法,你可能想读一下:

http://lowlag.alienbill.com/

单个脚本将解决所有问题。