【问题标题】:Why html5 video loop create request each iteration为什么html5视频循环每次迭代都创建请求
【发布时间】:2016-04-05 08:25:41
【问题描述】:

我已删除 禁用缓存 勾号,并且在每次视频循环迭代时仍会发出请求(仅在 chrome 上)。

chrome 检查器网络部分中的Initiator: Other 是什么意思?第一次从主机加载视频,但之后从Other 加载所有请求。

每次迭代视频大小都相同,而不是(来自缓存)。这是否意味着浏览器每次都下载它?

如果不将视频保存在 localStorage 中是否可以避免(我在类似的问题中看到过),因为此解决方案在私有浏览器模式下不起作用并且 localStorage 有大小限制?

更新

选中禁用缓存

未选中禁用缓存

更新

错误报告:https://bugs.chromium.org/p/chromium/issues/detail?id=680063

【问题讨论】:

  • 使用wireshark检查请求和响应以获取更多详细信息。使用wireshark,您将能够跟踪此“其他”主机。
  • Disabling the cache 确实阻止了这个问题的发生,但现在最新的 chrome 中没有。我建议向 chromes 团队提交错误报告或将视频放在画布中(如果需要)——我知道目前这不是一个好的解决方案,但是,这就是我能想到的。这很可能是原生 chrome 问题
  • 向 chrome 发送错误报告
  • @Petroff 链接到错误报告?
  • 我无法再次复制它。在 v55.0.2883.95 中不再发出新请求。

标签: google-chrome html5-video


【解决方案1】:

这个意思是Chrome以外的另一个进程initiated the request

一些其他进程或动作发起了请求,例如用户 通过链接导航到页面,或在地址中输入 URL 吧。

对于 Chrome,video is decoded using ffmpeg 可能是这个other 进程。该过程可能会从缓存中重新打开文件,这就是发起请求的原因,或者缓存仅保存文件的后半部分(或总内容长度),以防文件很大并且必须重新流式传输部分内容重来一遍 - 但是,您声明禁用缓存时不会发生这种情况。

localStorage 的大小非常有限,不太适合存储视频数据(它只能保存字符串,因此视频必须编码为 mime-64,这会增加 33% + 每个字符占用两个字节,因为unicode)。

更好的选择是使用IndexedDB - 这可以容纳更大的数据以及以二进制格式(Blob)存储数据。但它与localStorage 一样具有初始限制,但与后一种方法相反,您可以请求用户需要确认的更大尺寸。我还没有测试过,但我假设您在私有模式下会遇到与任何其他存储机制相同的限制。

【讨论】:

  • 我在两种情况下都尝试了 disabled cache 检查和取消检查,每次迭代仍然得到请求。
  • 我可以在 chrome、mozilla 和 safari 上复制相同的内容,每次加载时都会发出新请求,而对于较短的视频,服务器上可能会很困难
【解决方案2】:

昨天我遇到了同样的问题。我发现 Chrome 的标签在几分钟后崩溃了。它看起来只有在选中Disable cache 时才会发生,但如果这仍然困扰您,您可以将视频存储到本地存储中。更多代码in this answer.

【讨论】:

  • 我已经测试了这个答案,但是localStorage打破了私人浏览器模式,我必须支持,所以我正在寻找其他解决方案。
猜你喜欢
  • 2021-10-14
  • 2016-07-04
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
相关资源
最近更新 更多