缓存为空时获取音频文件的持续时间属性的问题

Posted

技术标签:

【中文标题】缓存为空时获取音频文件的持续时间属性的问题【英文标题】:Issue with getting duration attribute of an audio file when cache is empty 【发布时间】:2013-04-17 10:56:36 【问题描述】:

我在获取音频/mpeg (mp3) 的元数据时遇到问题。

例如,我使用 JS 来获取音频文件的时长,当缓存为空时,时长值返回“Infinity”(NaN)。

我已尝试使用事件/属性 preload 和 onloadedmetadata,但总是在缓存为空时无法获取音频的持续时间和其他属性。

注意:问题仅出现在我清理缓存时(或者当访问者第一次访问该页面时)。

    audioElement = new Audio('http://www.html5rocks.com/en/tutorials/audio/quick/test.mp3');
    console.log(audioElement);
    audioElement.addEventListener("loadedmetadata", function(_event) 
    var duration = audioElement.duration;
    console.log( duration );
    );

【问题讨论】:

如果持续时间不在元数据中,也许您可​​以添加更多侦听器并在可用时解决。 我现在也遇到了同样的问题,你解决了吗? 【参考方案1】:

也许是因为您的媒体正在流式传输?

见https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement

duration 只读 double 以秒为单位的媒体长度,如果没有可用的媒体数据,则为零。如果媒体数据可用但长度未知,则该值为 NaN。 如果媒体是流媒体并且没有预定义的长度,则值为 Inf

【讨论】:

【参考方案2】:
audioElement = new Audio('http://www.html5rocks.com/en/tutorials/audio/quick/test.mp3');
    console.log(audioElement);
    audioElement.addEventListener("loadedmetadata", function(_event) 
    var duration = audioElement.duration;
    console.log( duration );
);

【讨论】:

以上是关于缓存为空时获取音频文件的持续时间属性的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中获取音频文件的持续时间?

如何从多个音频文件中获取总音频持续时间

如何获取音频文件的持续时间?

iOS6 AVAudioPlayer - AAC音频文件的持续时间总是返回0。

获取音频文件的持续时间

AVAudioPlayer 持续时间与音频文件的实际持续时间不匹配