HTML5 视频元素请求永远处于待处理状态(在 Chrome 上)

2024-01-31

我在 Chrome 中遇到了一个奇怪的问题。

每次我加载一个<video>element,chrome会启动两个HTTP请求。

第一个将永远保持待处理状态(我猜这是“元数据”、“部分内容”请求。但重点是它保持待处理状态)

同一文件的第二个是可以的,并且在加载结束后继续并关闭。

这里的问题是第一个请求保持待处理状态,直到我关闭浏览器页面。因此,在某些时候,如果我加载多个视频,Chrome 将中断并停止下载任何内容,因为每个可用请求都被这些待处理请求占用。

我在这里创建了一个简化的测试用例:http://jsbin.com/ixifiq/3 http://jsbin.com/ixifiq/3


我已检查是否重现了该问题,并且这两个问题都发生了Video.js http://videojs.com/ and MediaElements.js http://mediaelementjs.com/头版。加载页面时打开网络选项卡,您将看到第一个待处理的请求。然后按视频上的播放,您将看到第二个请求正在运行,但第一个请求将永远处于待处理状态。

有谁知道这个错误的修复方法吗?


(此bug在Chrome 38.0.2125.111、OS X 10.10中仍然存在)

这可能是 Chrome 的一个错误,你可以在没有任何虚拟的情况下解决它?time-suffix伎俩,只是帮助 Chrome 更快地释放套接字:

我在 RevealJs HTML 演示文稿中遇到了同样的错误,其中包含 20 多个视频(每张幻灯片一个,在幻灯片焦点上自动播放)。作为副作用,这个未发布的套接字问题还影响了同一 HTML DOM 中紧随第一个挂起/阻止的视频之后的其他 ajax 延迟加载媒体。

根据沃尔特的回答(参见错误报告 https://code.google.com/p/chromium/issues/detail?id=234779),我按照以下步骤修复了该问题:

1-设置视频preload归因于none:

<video preload="none">
    <source src="video.webM" type="video/webM">
</video>

2 - 使用canplaythrough事件处理程序用于在视频加载并准备就绪后播放和/或暂停视频。这有助于 Chrome 释放用于加载该视频的套接字:

function loadVideos(){
    $("video").each(function(index){
            $(this).get(0).load();
            $(this).get(0).addEventListener("canplaythrough", function(){
                this.play();
                this.pause();
            });
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML5 视频元素请求永远处于待处理状态(在 Chrome 上) 的相关文章