javascript - HTML 视频的状态在一段时间后变为待处理

标签 javascript html google-chrome video-streaming html5-video

我有一个 HTML 页面,其中的 div 包含 HTMLVideo 元素, 10 秒后,我删除视频及其附加的所有事件,

删除视频时,我在视频元素上使用了 jQuery .remove() 。 删除视频后,div 元素显然将没有子节点。

几秒钟(大约 5 秒)后,我通过创建视频元素和所有源再次启动视频,然后将其附加到同一个 div。这是一个循环。

这将持续大约 5-10 分钟。之后,我注意到视频不再播放。我在开发者工具中检查了 DOM Element,视频中的 url 是正确的。

当我检查“网络”选项卡时,它仍在请求视频。视频播放时,其状态为 “GET”,响应为 “206 部分内容”。但是,当它不再播放时,它只响应 "(pending)",当我直接在新选项卡中访问视频 url 时,需要一些时间如果没有则加载视频失败。但如果我在其他浏览器(IE/FF)中访问它,视频URL将立即加载视频。

我使用 Windows 版 Google Chrome

我不知道这是怎么回事,但我认为这是 Chrome 的问题?有人可以帮助我吗?

最佳答案

我怀疑这里发生的情况是您删除的视频元素仍在内存中并尝试下载。一旦视频不再附加到 DOM,浏览器就不会停止缓冲,甚至不会播放视频,因为您可能稍后会再次附加它,或者将其用于 Canvas 或 Web 音频 API 等其他用途。 Chrome 一次只能下载一定数量的流,然后才会开始阻止新的流。

要真正删除旧的视频元素,您需要将 src 设置为空字符串,然后调用 .load()。这将迫使浏览器停止缓冲该元素,然后您就可以真正完成它了。

或者,您可以重复使用相同的视频元素,并在下次循环时为其设置新的 src (或 source 子元素)。只要记住每当您更改 src 时就在视频元素上调用 .load() 即可。

理论上,浏览器可以决定停止缓冲未播放且内存中没有对其引用的视频元素,而只是对其进行垃圾收集。但没有看到你的代码,我不能说你是否有任何杂散引用。 Chrome 有时会对这种事情感到奇怪。

关于javascript - HTML 视频的状态在一段时间后变为待处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29515093/

相关文章:

html - 在 slider (Chrome) 中通过表单域切换时出现意外滚动

javascript - 如何从 Node 后端的 $http.post/angular 检索 post 变量?

html - 我们可以在 HTML 标题标签中添加 HTML 代码吗?

html - React 不会关闭自动完成功能

html - 如何在 <div> 之间添加间距

javascript - 在控制台中记录复选框的值

javascript - 谷歌浏览器 : Refused to Execute Inline script

javascript - 是否可以禁用 lightningChartJS 图表中的缩放?

javascript - Java 的 "TODO"出现在概览标尺中,但 JS 没有出现?

javascript - 跳过按钮 - 如何用另一个功能停止一个功能