为什么html5视频循环每次迭代都会创建请求

时间:2016-04-05 08:25:41

标签: google-chrome html5-video

我已删除禁用缓存标记,并且仍会在每次视频循环迭代时发出请求(仅限Chrome)。

Chrome检查员网络部分中Initiator: Other的含义是什么?第一次从主机加载视频,但之后所有请求都从Other加载。

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

如果没有在localStorage中保存视频,我可以以某种方式避免它(我在类似的问题中看到它),因为这个解决方案不能在私有浏览器模式下工作,localStorage有大小限制吗?

更新

选中禁用缓存 enter image description here

未选中禁用缓存 enter image description here

更新

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

2 个答案:

答案 0 :(得分:1)

这意味着另一个流程而不是Chrome initiated the request

  

某些其他进程或操作已启动请求,例如用户   通过链接导航到页面,或在地址中输入URL   杆

对于Chrome,video is decoded using ffmpeg可能是此其他进程。该过程很可能从缓存重新打开文件,这就是启动请求的原因,或者,如果文件很大并且必须重新流,缓存只保留文件的后一部分(或者总和的最大内容长度)部分内容重复 - 但是,您声明当禁用缓存时,这不会发生。

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

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

答案 1 :(得分:0)

昨天我遇到了同样的问题。我发现几分钟后Chrome的标签崩溃了。它看起来只有在选中 execute(query).mapTo[Vector[((A, Option[B]), Option[C])]] .flatMap { insideFuture => insideFuture.groupBy(_._1._1).mapValues { values => //scala groupBy losts ordering val orderedB = values.groupBy(_._1._2).toSeq.sortBy(_._1.map(_.id)).toMap orderedB.mapValues(_.map(_._2)) }.headOption match { case Some(data) => Future.successful { data._1.copy(bList = data._2.map { case (Some(bElement), optionCElements) => bElement.copy(cList = optionCElements.toList.flatten) case _ => throw new Exception("Invalid query result. Unable to find B elements") }.toList) } case None => Future.failed(new Exception("Unable to find A with next id " + incomigAId)) } } } 时才会发生,但如果仍然存在问题,您可以将视频存储到本地存储中。更多代码in this answer