HTML视频的状态在一段时间后会变为待定状态

时间:2015-04-08 12:48:45

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

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

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

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

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

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

我使用Google Chrome for Windows

我不知道这里发生了什么,但我认为这是一个Chrome问题?有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

我怀疑这里发生的事情是您删除的视频元素仍在内存中并尝试下载。一旦视频不再附加到DOM,浏览器就不会停止缓冲甚至播放视频,因为您可能会在以后再次使用它或将其用于其他内容,如canvas或Web Audio API。 Chrome可以在开始阻止新流之前立即下载这么多流。

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

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

时在视频元素上调用src

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