HTML5音频播放器中的搜索不一致

Chr*_*fen 5 javascript audio html5 cordova

我想从特定的时间戳开始播放音频。但是我什至无法得到最简单的例子来正确工作。我尝试了以下操作,还修改了w3school的示例

<body>
    <audio src="skyfall.mp3" id="audio" controls preload></audio>
    <button onclick="play()">Play</button>
</body>
<script type="text/javascript">
    var secs = 32;
    function play(){

        var p = document.getElementById("audio");
        p.currentTime = secs;
        console.log('Playing at secs: ' + secs); 
        p.play();
    }
</script>
Run Code Online (Sandbox Code Playgroud)

但是每种浏览器上播放的音频不同:Windows版Chrome浏览器延迟约4秒钟,Android版Chrome浏览器似乎启动,Mobile Safari关闭。(即使VLC在播放文件时也会出现此问题。)如果从文件的开头开始播放,则它们将保持同步。

因此在我看来,HTML5音频标准实施不正确或解释不充分。

我已经读过服务器端支持有时是罪魁祸首,但是我不确定在读取本地文件时这将是一个问题。最终,我想在Cordova项目中使用它。

有任何想法吗?

蔡宗容*_*蔡宗容 5

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

选择CBR格式


脚步:

  • 下载并安装“ Audacity”(任何平台均免费)
  • 打开你的MP3文件
  • 单击[文件]-> [导出]-> [选项]-> [恒定](请参阅:将MP3转换为恒定比特率
  • Audacity会要求您提供LAME MP3编码器(请参阅:[下载并安装LAME MP3编码器])

不会出现不一致/异步的问题。


另请参阅:

TJ_蔡/ tsungjung411@gmail.com


Chr*_*fen 3

问题出在文件编码上。对于 MP3 文件,只有恒定比特率搜索才能在所有浏览器中正确/一致地工作。W3 表示 MP3 是所有浏览器正式普遍支持的唯一格式,因此我认为使用 CBR MP3 就是答案。也就是说,Mozilla 对于格式支持有更深入的指南

当比特率不恒定时,浏览器会在给定相同时间戳的情况下寻找不同的音频片段。对于恒定比特率,寻找的算法很简单,但对于可变比特率则更复杂(并且通常涉及某种形式的估计);我在 HTML 标准中找不到此操作的定义,因此不同的浏览器以不同的方式实现此操作也就不足为奇了。

这个答案有一些更多的讨论和潜在的解决方法。