HTML5video元素请求会永久保留(在Chrome上)

在Chrome中我有一个奇怪的问题。

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

第一个将永远保持悬而未决(我想这是“元数据”,“部分内容”的要求,但重点是,它保持悬而未决)

第二个到同一个文件是可以的,并在加载结束后closures。

这里的问题是,第一个请求保持挂起,直到我closures浏览器页面。 因此,在某些情况下,如果我加载多个video,则Chrome会中断并停止下载任何内容,因为每个可用请求都被这些未决请求占用。

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


我已经检查重现了这个问题,并且它在Video.js和MediaElements.js首页上都发生了。 加载页面时打开你的networking标签,你会看到第一个待处理的请求。 然后按播放video,你会看到第二个请求工作,但第一个将永远保持悬而未决。

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

(这个错误在Chrome 38.0.2125.111,OS X 10.10中仍然存在)

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

我在RevealJs HTML演示文稿中遇到了相同的错误,包含20多个video(每个幻灯片一个,在幻灯片焦点上自动播放)。 作为一个副作用,这个未发布的套接字问题也影响了其他ajax-lazy-loaded媒体,紧接在第一个未决/被阻止的video之后,在同一个HTML DOM中。

在Walter的回答(见错误报告 )之后,我按照下面的步骤解决了这个问题:

1-将videopreload属性设置为none

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

2 – 使用canplaythrough事件处理程序来播放和/或暂停video。 这有助于Chrome发布用于加载video的套接字:

 function loadVideos(){ $("video").each(function(index){ $(this).get(0).load(); $(this).get(0).addEventListener("canplaythrough", function(){ this.play(); this.pause(); }); }); } 

显然,这是来自Chrome的一个错误。 ATM没有什么可做的。

我刚才在Chromium项目上报告了这个问题,并且已经被分配了。 所以希望在不久的将来它会被修复。

错误报告: https : //code.google.com/p/chromium/issues/detail? id =234779

我不知道它现在是否能够正常工作,但是我记得通过向videoURL添加一个参数来解决这个问题,就像“video.mp4?t = 2123”一样。 当然,每次加载video时,参数都应该不同。 我会用

 var parameter = new Date().getMilliseconds(); 

得到它,并添加它。

有了这个,至less在几个月前,我能够多次播放同一个video,而Chrome并没有永远等待响应。

希望能帮助到你。

这个错误依然存在。 我在单页面应用程序上使用HTML5video播放器。 加载大约7个玩家的预缓冲后,我达到了极限,没有更多的video加载。 我发现了另一个与图像有关的答案,我很惊讶地发现这个答案解决了这个问题。

 if(window.stop !== undefined) { window.stop(); } else if(document.execCommand !== undefined) { document.execCommand("Stop", false); } 

参考: Javascript:取消/停止图像请求

在dynamic内容(例如轮播)中使用html5video时,我发现此问题以释放被阻止的套接字,您必须卸载video源:

 var video = $('#video'); video[0].pause(); video.prop('src',''); video.find('source').remove(); video.remove(); 

该错误声称是固定的,但我仍然必须在Chrome 42上做到这一点。至less我仍然可以设置preload =“auto”。

我们有相同的症状,但问题是,我们在相同的video连续两次调用load() :相同的video控件,相同的video源(MP4)。 在开发工具中出现了两个相同的206请求,然后,在切换video几次之后,Chrome会取消第一个请求,closures渐进式播放,然后等待第二个请求完成。

另外请注意,如果您正在使用MP4来源,并且未将其格式化为渐进式播放(即MOOVprimefaces位于文件的开头),那么您将对该文件有1-2个附加请求,这使得它甚至更混乱。