我有一个 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/