Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5音频播放器中的不一致搜索_Javascript_Html_Cordova_Audio - Fatal编程技术网

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

Javascript HTML5音频播放器中的不一致搜索,javascript,html,cordova,audio,Javascript,Html,Cordova,Audio,我想从特定的时间戳开始播放音频。但我连最简单的例子都做不好。我尝试了以下方法,也修改了 玩 var-secs=32; 函数播放(){ var p=document.getElementById(“音频”); p、 当前时间=秒; console.log('每秒播放:'+秒); p、 play(); } 但每个浏览器上播放的音频不同:Chrome for Windows大约晚了4秒,Chrome for Android似乎很流行,Mobile Safari关闭。(即使是VLC在播放文件时也存在

我想从特定的时间戳开始播放音频。但我连最简单的例子都做不好。我尝试了以下方法,也修改了


玩
var-secs=32;
函数播放(){
var p=document.getElementById(“音频”);
p、 当前时间=秒;
console.log('每秒播放:'+秒);
p、 play();
}
但每个浏览器上播放的音频不同:Chrome for Windows大约晚了4秒,Chrome for Android似乎很流行,Mobile Safari关闭。(即使是VLC在播放文件时也存在此问题。)如果从文件的开头开始播放,则它们保持同步

因此,在我看来,HTML5音频标准要么实施不当,要么解释不当

我已经读到服务器端支持有时是罪魁祸首,但我不确定当我阅读本地文件时这会是一个什么问题。最终,我想在科尔多瓦项目中实现这一点


有什么想法吗?

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

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


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

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


步骤:

  • 下载并安装“Audacity”(对任何平台都是免费的)
  • 打开你的MP3文件
  • 单击[File]->[Export]->[Options]->[Constant](请参阅:)
  • Audacity将要求您提供蹩脚的MP3编码器 (请参阅:[下载并安装LAME MP3编码器])
不会出现不一致/异步问题


另见:

TJ_仔/tsungjung411@gmail.com

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