html音频标签,持续时间总是无穷大

Kri*_*edK 7 javascript html5 html5-audio

我一直在努力使用html音频标签来播放一些音频文件.音频播放正常,但音频标签的持续时间属性始终返回无穷大.

我尝试了这个问题的接受答案,但结果相同.使用Chrome,IE和Firefox进行测试.

这是音频标签的错误,还是我错过了什么.

我用来播放音频文件的一些代码.

按下播放按钮时的javascript功能

function playPlayerV2(src) {
document.getElementById("audioplayerV2").addEventListener("loadedmetadata", function      (_event) {
console.log(player.duration);
});
var player = document.getElementById("audioplayer");

    player.src = "source";
    player.load();
    player.play();
}
Run Code Online (Sandbox Code Playgroud)

html中的audio标签

<audio controls="true" id="audioplayerV2" style="display: none;" preload="auto">
Run Code Online (Sandbox Code Playgroud)

注意:我正在隐藏标准音频播放器,打算使用自定义布局并通过javascript使用播放器,这似乎与我的问题无关.

ges*_*est 8

尝试这个

var getDuration = function (url, next) {
    var _player = new Audio(url);
    _player.addEventListener("durationchange", function (e) {
        if (this.duration!=Infinity) {
           var duration = this.duration
           _player.remove();
           next(duration);
        };
    }, false);      
    _player.load();
    _player.currentTime = 24*60*60; //fake big time
    _player.volume = 0;
    _player.play();
    //waiting...
};

getDuration ('/path/to/audio/file', function (duration) {
    console.log(duration);
});
Run Code Online (Sandbox Code Playgroud)

  • 到底是什么黑客。为什么?有效但没有任何意义 (2认同)

Dmi*_*ind 8

这对我有用

const audio = document.getElementById("audioplayer");

audio.addEventListener('loadedmetadata', () => {
  if (audio.duration === Infinity || isNaN(Number(audio.duration))) {
    audio.currentTime = 1e101
    audio.addEventListener('timeupdate', getDuration)
  }
})

function getDuration(event) {
  event.target.currentTime = 0
  event.target.removeEventListener('timeupdate', getDuration)
  console.log(event.target.duration)
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我认为这是由于chrome bug 造成的。直到它被修复:

while(video.duration === Infinity) {
  await new Promise(r => setTimeout(r, 1000));
  video.currentTime = 10000000*Math.random();
}
let duration = video.duration;
Run Code Online (Sandbox Code Playgroud)

  • 还没修好 (2认同)