Internet Explorer 11 HTML5 音频持续时间 = 无限问题

Posted

技术标签:

【中文标题】Internet Explorer 11 HTML5 音频持续时间 = 无限问题【英文标题】:Internet Explorer 11 HTML5 audio duration = infinity issue 【发布时间】:2015-07-16 13:27:24 【问题描述】:

今天我遇到了一个不愉快的问题。有一个带有自定义 html5 音频播放器的网站。页面加载后,我尝试回显document.getElementById("myAudioId").duration,它是使导航成为可能所必需的。在其他所有浏览器中它都可以正常工作,显示持续时间,但 IE11 的工作方式不同 - 它显示持续时间等于 Infinity。但正如我注意到的,当歌曲被缓冲到结尾时,持续时间神奇地出现并且导航工作。在其他浏览器中,一切从一开始就有效。设置了内容长度标头。会是什么?

UPD: 其他带有 HTML5 音频的网站让我从一开始就看到了持续时间。我猜,持续时间是元数据的一部分,即使不使用 preload="metadata" 预加载音频文件也可以加载,但它也不起作用。

UPD2:我也尝试过使用 jsfiddle 并在那里创建了相同的音频标签和相同的 MP3 音频 - 情况相同。但后来我从另一个站点插入了另一个 MP3 的链接 - 并且它起作用了!。不仅如此,我已经将第二首歌曲上传到了第一个有问题的网站,之后这首完美运行的歌曲也无法向我展示它的持续时间和内容。所以现在我认为这是服务器端的东西。但不知道是什么。

UPD3: 最后,有人告诉我,使用 FFMPEG 将文件转换为 128 位 MP3,然后它们就不再正常了。现在我需要找到我应该如何转换 MP3 才能正常使用。

【问题讨论】:

从文档到文档:duration 只读(双精度)媒体的长度,以秒为单位,如果没有可用的媒体数据,则为零。如果媒体数据可用但长度未知,则该值为 NaN。 如果媒体是流媒体并且没有预定义的长度,则值为 Inf。 developer.mozilla.org/en/docs/Web/API/HTMLMediaElement - 结论:IE 仅在完全缓冲时假定长度。 @somethinghere 和 this demo 呢? IE 从一开始就可以识别持续时间。也许controls 属性才是最重要的? 【参考方案1】:

它在本地对我有用,但是当上传到服务器时,它不起作用。 似乎 player.duration 在 IE 11 中不起作用: https://msdn.microsoft.com/en-us/library/dn254962(v=vs.85).aspx

【讨论】:

以上是关于Internet Explorer 11 HTML5 音频持续时间 = 无限问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Internet Explorer 11 降级到 Internet Explorer 10?

Internet Explorer 11 不在 CORS 请求中添加 Origin 标头?

输入范围滑块的 Javascript 代码在 Internet Explorer 11 中不起作用

为啥即使在模拟 Internet Explorer 8 文档模式时,Internet Explorer 11 也不支持条件注释?

Internet Explorer 11 中的 <audio> 标记兼容性

输入范围滑块的Javascript代码无法在Internet Explorer 11中使用