我想从特定的时间戳开始播放音频。但我甚至无法让最简单的例子正常工作。我尝试了以下操作,并修改了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项目中实现这一目标。
有什么想法吗?
答案 0 :(得分:4)
我遇到了同样的问题,我通过将我的MP3文件转换为CBR(恒定比特率)格式解决了这个问题。然后,它可以解决 currentTime 和真实声音之间的不一致问题。
步骤:
不存在不一致/异步问题。
另见:
TJ_Tsai / tsungjung411@gmail.com
答案 1 :(得分:1)
问题在于文件编码。对于MP3文件,只有恒定比特率搜索在所有浏览器中正确/一致地工作。 W3表示MP3是所有浏览器正式普遍支持的唯一格式,因此我认为使用CBR MP3就是答案。也就是说,Mozilla在格式支持方面有更多in-depth guide。
当比特率不恒定时,浏览器会在给定相同时间戳的情况下寻找不同的音频片段。寻找算法对于恒定比特率是简单的,但对于可变比特率更复杂(并且通常涉及某种形式的估计);我无法在HTML标准中找到此操作的定义,因此不同的浏览器实现这一点并不令人惊讶。
This answer有更多的讨论和潜在的解决方法。