HTML音频无法设置currentTime

时间:2016-05-05 06:40:24

标签: javascript html5 audio

我正在使用Chrome。在我的开发工具控制台中,我尝试了以下内容:

enter image description here

除最后一行外,一切都按预期工作。为什么我不能在其上设置currentTime

同样一般来说,我发现这整个HTML5音频不太可靠。是否有一个强大的javascript包装器可以回退到flash?

8 个答案:

答案 0 :(得分:6)

你需要做这样的事情(如果你使用jQuery)

$('#elem_audio').bind('canplay', function() {
  this.currentTime = 10;
});

或在Javascript中

var aud = document.getElementById("elem_audio");
aud.oncanplay = function() {
    aud.currentTime = 10;
};

此设置背后的原因是您需要确保音频可以播放

答案 1 :(得分:2)

  

为什么我不能在其上设置currentTime

设置为currentTime后无法重现0设置为1018.mp3的持续时间是否小于10

var request = new XMLHttpRequest();
request.open("GET", "/assets/audio/18.mp3", true);
request.responseType = "blob";    
request.onload = function() {
  if (this.status == 200) {
    var audio = new Audio(URL.createObjectURL(this.response));
    audio.load();
    audio.currentTime = 10;
    audio.play();
  }
}
request.send();

jsfiddle http://jsfiddle.net/Lg5L4qso/3/

答案 2 :(得分:2)

我遇到了同样的问题,原因是mp3文件中缺少标题,例如:

Long

答案 3 :(得分:2)

检查您的HTTP服务器配置,在我的测试环境(Mac OS上为Chrome 69)中,设置 audio元素 currentTime 属性仅在音频源由HTTP服务器支持持久连接

如果您使用的HTTP服务器支持持久连接,则在Chrome DevTool中您会发现音频源的响应标头的Connection字段为 keep-alive 。相反,如果音频源由不兼容的持久连接服务器提供,则响应头中将没有没有连接字段

您的音频源HTTP请求的状态代码也将作为参考,对于持久连接支持的服务器,为 206部分内容,对于劣等服务器,为 200 OK

答案 4 :(得分:1)

我的猜测是'10'比mp3的长度长。

但是记录了mp3的长度而不是'0'。

您的Chrome版本是什么?

答案 5 :(得分:0)

设置currentTime我必须可靠工作的唯一方法是使用onprogress事件。

audio.onprogress = function() {
  if (audio.currentTime == 0) {
    audio.currentTime = 10;
  }
}

答案 6 :(得分:0)

对我有用的解决方案不是直接设置“ src”,而是与type属性一起使用,也许type属性在某种程度上帮助浏览器。

答案 7 :(得分:0)

开始使用VS Code的PHP服务器扩展来为HTML / PHP本地测试提供服务后,我遇到了这个问题。回到我以前的Abysswebserver设置,为我解决了这个问题。

因此,这不只是“您不能在本地提供的文件上操作.currentTime”,还不仅仅是“您需要选择一个能够提供正确标题的服务器”。例如,我在AbyssWebserver上的文件的状态条目读为“状态码:206部分内容”,而在PHP Server中则为“状态码:200 OK”。

但是,还有其他差异,因此可能不仅仅是状态条目。有关完整的标头比较,请参见https://github.com/brapifra/vscode-phpserver/issues/85