7

我正在使用 jQuery 动态编写<video>对象,并运行 videojs 来初始化它们。播放视频后,有时当我尝试再次播放时,它就无法播放,从那时起,即使刷新页面后,也不会播放任何视频。每次,<video>对象都会渲染,但视频不会播放。没有任何内容写入控制台。似乎没有任何错误。重新启动 Chrome 可以解决问题,但只是暂时的。播放了几个视频后,问题又回来了。

我发现关闭 Chrome 中的其他选项卡确实可以解决问题,所以它似乎是某种内存问题。

我正在运行 Chrome 19.0.1084.46

4

4 回答 4

17

你到底有多少个video标签?他们看起来怎么样?它们包括preload='none'属性吗?源视频都在服务器上吗?

我问是因为如果您在一个页面上有超过六个video标签指向同一个源服务器,那么您可能会遇到“连接饥饿”:

  • Chrome 只允许六个打开的连接到单个服务器(基于 URL 中的 DNS 名称)
  • html5video标签的 preload 属性默认值为'auto'
  • Chrome 的自动行为是预加载一些数据并保持连接打开,以便为视频提取更多数据

因此,如果单个页面上超过六个视频标签指向单个服务器,则视频将无法播放。要解决此特定问题,请将preload属性设置为'none'

于 2012-05-20T07:57:59.013 回答
1

斯图是正确的。但有时,根据我的经验,Chrome 会忽略 preload="none" 属性并继续打开连接。在开发一个包含许多较小视频的网站时,我遇到了很多问题。连接阻止了其余内容(图像、自定义字体(当自定义字体延迟时,文本甚至不会呈现))我的解决方案是构建一个自己的预加载器来加载图像。这确保我至少可以控制图像(从设计角度来看这是最关键的方面)何时加载。

这解决了图像不显示的问题,但问题仍然存在。所以最好的解决方案是设置指向同一个服务器的子域,比如:v1.server.com、v2.server.com 等等。这意味着您不必移动文件,并且您可以从使浏览器具有更多开放连接中受益。不过要注意增加的 dns 查找时间。

于 2013-10-15T12:42:06.567 回答
1

Chrome存在一个已知错误。它不会同时在多个标签中播放相同的视频。如果您是开发人员并且碰巧同时在两个选项卡中打开您的页面,这可能就是您遇到的问题。

在撰写本文时,该错误已为人所知将近 5 年。随意访问Chromium 错误报告并为问题加注星标。希望它会增加 Chrome 开发人员的优先级。


同时,一种解决方法是在视频 src 中使用随机查询参数。例如,代替<video src="vid.mp4">,使用<video src="vid.mp4?_u=1253412">。这将破坏 Chrome 的缓存机制,并允许同一视频同时流式传输到两个不同的选项卡。

于 2014-08-16T18:23:17.277 回答
0

我有一个类似但相关的问题,我可以在这里稍微扩展一下。

我在一个页面上有 14 个不同的小视频,但一次只有 2 个可用。设置 preload = 'none' 并没有解决问题,所以我还使用数据属性来存储 src,并删除当前未观看的所有视频的 src。

于 2015-07-22T20:36:15.323 回答