Jcrop on video - 视频仅在裁剪选择中显示

Posted

技术标签:

【中文标题】Jcrop on video - 视频仅在裁剪选择中显示【英文标题】:Jcrop on video - video displays only within crop selection 【发布时间】:2017-02-17 12:22:46 【问题描述】:

我在视频源上有 Jcrop,<img src ="http://ip_address/stream"> html页面显示了里面有视频的容器,但它是一个静止的图像。一旦我单击图像,它就会更新。单击/拖动以裁剪视频区域后,裁剪选择中的区域会显示视频更新。

如何让视频流在进行裁剪选择之前和期间不断更新?

编辑: 使用 Inspect Element 工具,在 Network Monitor 上,无论是否做出选择,持续更新视频的页面的状态代码为:200 OK

而除非点击,否则视频不会更新的页面的状态代码是:304 Not Modified

【问题讨论】:

出于某种原因,它有时有效,有时无效。不知道为什么。 如果你使用img,它不会自动更新,你必须触发它(可能是javascript刷新源),如果图像名称/元数据保持不变,浏览器可能只是使用了缓存的图像(因此需要一个 cachebuster 查询字符串或类似的) @Offbeatmammal 谢谢,赞成使用“自动”这个词。我如何刷新 javascript 以及什么是 cachebuster 查询字符串?还认为这可能与需要获取 CDN 脚本有关,因此会出现 GET http://...cdn_link... [HTTP1.1 304 NOT MODIFIED ..ms] 通知。 添加了一个例子,希望对下面有所帮助 【参考方案1】:

为了强制每(比如)1 秒刷新一次图像,您需要:

    使用 javascript setInterval 如果文件名没有改变,则缓存图像源

例如下面的代码

<img id="vidimg" src="Assets/img.jpg">
<script>
  setInterval(function() 
      document.getElementById("vidimg").src="Assets/img.jpg" + 
      "?cachebuster=" + Math.round(new Date().getTime() / 1000).toString() ,
  1000);
</script>

setInterval(... ,1000); 使内部的函数每 1000 毫秒(每秒一次)重复一次 - 您可能需要根据您使用的图像源的下载速度/刷新率来调整它。该函数可以是内联的,就像我在这里所做的那样,或者如果涉及更复杂的逻辑,您可以将其设为命名函数并引用它。

document.getElementById("vidimg").src="Assets/img.jpg" 只是重新加载图像源 - 如果图像看起来与已缓存的图像相同,这可能会导致浏览器尝试智能,因此您需要向文件名以强制它从服务器重新获取,因此 + "?cachebuster=" + Math.round(new Date().getTime() / 1000).toString() 只是根据当前时间添加一个参数。

如果您的源没有文件名(如您问题中的示例),那么添加 cachebuster 应该仍然有效。

由于我无法访问您所描述的来源,因此我无法对此进行测试,但理论上它应该可以工作。或者你不能使用&lt;video src ="http://ip_address/stream"&gt; 来访问它吗?

【讨论】:

以上是关于Jcrop on video - 视频仅在裁剪选择中显示的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 和 IE8 上的 Jcrop 问题 - 仅在页面刷新时才显示裁剪

jcrop - 中心的默认裁剪选择

JCrop showPreview 功能说明

JCrop 裁剪错误区域

上传裁剪图片-----Jcrop图片裁剪插件

裁剪图像并将图像保存为圆形 JCrop