jquery - HTML5 视频 - video.buffered.length 在 IE 10/11 上返回 0

标签 jquery apache internet-explorer http video

我正在监控 HTML5 视频播放器的下载进度。 Windows 8/8.1 上的 IE 10/11 给我带来了麻烦。这是我的代码和之后对问题的解释:

<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<video id="myVideo" width="640" height="360" controls>
<source src="pathto.mp4" type='video/mp4; codecs="avc1.42E01E,mp4a.40.2"' />
</video>
<script type="text/javascript">
var video= $('#myVideo')[0];   
var videoJ= $('#myVideo');    
function doUpdateProgress(){
console.log(video.buffered.length);
}
videoJ.on('progress', doUpdateProgress);
videoJ.on('canplay', doUpdateProgress);
</script> 

问题出在我服务器上的 URL url1to.mp4 video.buffered.length 在 IE 10/11 中总是返回 0(IE9 返回未定义)。它在我测试过的所有其他浏览器(包括 Chrome 和 FF)上运行良好。

如果我从共享服务器 url2to.mp4 输入一个 URL,即使在 IE10/11 上它也会按预期返回 1(当然,如果您不在时间轴中查找,则为 1)。 mp4 文件在麻烦的服务器上完全相同,因此我知道它不是来自文件格式问题。我尝试使用另一个格式正确的 mp4(来 self 在两个服务器上托管的 videojs 的示例),它也导致了问题。

服务器端 - 我的 mime/类型似乎没问题 - 我在我的服务器上启用了部分支持(字节范围)内容(Ubuntu 服务器 12.04.3 LTS 上的 Apache 2.2.22)。虽然我可能认为它可能与 HTTP 字节范围支持客户端或服务器端的调整有关。

因为它只发生在 IE9/10/11 上,所以我对在哪里进一步调查的线索为零。我确实在 msdn 上问过这个问题,但无济于事。

有人可以解释一下吗?

编辑:从问题中删除真实视频网址。

谢谢

最佳答案

好吧,我最终通过从 2.2.22 到 2.4.9 的 Apache 的完整全新安装修复了它。这次我确实从源代码编译,而不是从 Ubuntu 服务器 12.04.3 LTS 中获取默认包。我不确定这个问题的确切原因,但我认为它与 HTTP 范围请求和响应在 IE 9/10/11 和 Apache 的某些版本/设置之间不兼容有关。

为可能遇到类似问题的任何人总结我的故障排除步骤:

  • 检查你的服务器是否正确mime/types
  • 通配符 CORS (msdn 建议)
  • 检查您的网络服务器是否支持ranges request/206 partial content .我已经使用 CURL 在我的服务器上检查过它并且工作正常。但是来自此 page 的示例 PHP 代码似乎另有说明,我认为这是混淆 IE 的地方(范围 header 已正确返回,但响应代码是 200,而不是 CURL 的 206)。
  • 有时您似乎需要从源代码(以及官方网站的可信来源)编译,而不是使用操作系统的默认包。即使一开始可能有步骤要求(特别是如果您必须修复依赖项)并且有时需要更新 - 最终结果可能值得您付出努力(我知道有利有弊)。
  • 检查您的 mp4 文件格式:尝试托管 sample从 videojs 看看它是否更好用。您可能需要 repackage/re-transcode .

关于jquery - HTML5 视频 - video.buffered.length 在 IE 10/11 上返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22981368/

相关文章:

internet-explorer - Internet Explorer 10 中的 IE8 浏览器模式有多好?

Javascript 函数不适用于 Internet Explorer

javascript - Opera 的 DOM 更改事件

javascript - JS 函数上的 jQuery .live() - 使用什么事件?

apache - 通过重定向阻止目录列表?

apache - 如何在 Elastic Beanstalk 上强制使用https?

html - Internet Explorer 无法调整内联列表项宽度?

jquery - 如何使按钮位于所有设备的右下角?

jquery - 如何在嵌套转发器内触发链接按钮的 OnClick 事件

java - Solr 和搜索运算符 - lucene apache solr