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个附加请求,这使得它甚至更混乱。