在HTML5音频播放器中寻求不一致

时间:2015-08-21 15:24:48

标签: javascript html5 cordova audio

我想从特定的时间戳开始播放音频。但我甚至无法让最简单的例子正常工作。我尝试了以下操作,并修改了w3school's example

<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>

但是每个浏览器都播放不同的音频:Chrome for Windows大约延迟4秒,Chrome for Android似乎是现货,Mobile Safari关闭。 (甚至VLC在播放文件时也会出现此问题。)如果从文件开头开始播放,它们将保持同步。

因此,我认为HTML5音频标准要么执行不正确,要么解释不清。

我已经读到服务器端支持有时应该受到指责,但我不确定当我读取本地文件时这会是一个什么问题。最终,我希望在Cordova项目中实现这一目标。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

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

Choose the CBR format

步骤:

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

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

另见:

TJ_Tsai / tsungjung411@gmail.com

答案 1 :(得分:1)

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

当比特率不恒定时,浏览器会在给定相同时间戳的情况下寻找不同的音频片段。寻找算法对于恒定比特率是简单的,但对于可变比特率更复杂(并且通常涉及某种形式的估计);我无法在HTML标准中找到此操作的定义,因此不同的浏览器实现这一点并不令人惊讶。

This answer有更多的讨论和潜在的解决方法。

相关问题