我正在使用Chrome。在我的开发工具控制台中,我尝试了以下内容:
除最后一行外,一切都按预期工作。为什么我不能在其上设置currentTime
?
同样一般来说,我发现这整个HTML5音频不太可靠。是否有一个强大的javascript包装器可以回退到flash?
答案 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
设置为10
。 18.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。