我有一个非常简单的设置,但是到目前为止我还无法实现最终目标。我在提供静态html页面的VM上安装了nginx。这个html页面包含我要循环播放的视频的代码。我希望能够替换video目录中的视频文件,并使nginx强制显示旧视频的客户端浏览器重新加载并开始播放新文件,而无需手动重新启动nginx或刷新浏览器。我应该提到客户端浏览器在显示视频的电视上,并且我不想手动刷新电视上的浏览器并自动完成此操作。
通过搜索使它起作用,我发现了一些元标记,但它对我不起作用。该页面提供的是旧视频,一个小时后(我在meta标记中指定的值)一个小时后没有刷新。
<!DOCTYPE html>
<html>
<head>
<title>my video</title>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
<meta http-equiv="refresh" content="3600">
<style>
body {
position: absolute;
overflow: hidden;
width: 100%;
height: 100%;
}
#myvideo {
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<!-- The video -->
<video autoplay muted loop id="myvideo">
<source src="videos/main.mp4" type="video/mp4">
</video>
</body>
</html>
我将另一个视频上传到具有相同名称“ main.mp4”的视频目录,并希望Nginx强制浏览器重新加载并显示更新的视频。
答案 0 :(得分:0)
需要检查/记住的几件事:
尽管<meta http-equiv="refresh" content="3600">
可以正常工作,但是某些(非常罕见的)浏览器可能不支持它。在这种情况下,您可以尝试添加基于Javascript的解决方案,例如:
<script>
setTimeout(function() { window.location.reload(true); }, 60*60*1000);
</script>
true
将确保在重新加载页面时,浏览器将跳过其缓存并从服务器加载页面。
由于您的页面内部使用/链接到相同的视频文件名,因此必须确保http://example.com/videos/main.mp4
没有正的缓存头。
您可以使用curl
来检查标头,如下所示:
curl -IL http://example.com/videos/main.mp4
查看Cache-Control
和Expires
的值是什么。您可以同时使用两个标头,也可以同时使用其中任何一个。对于您的情况,它们应规定缓存时间少于一小时或根本没有缓存。
在NGINX中,您可以使用以下方法进行设置:
location = /videos/main.mp4 {
expires -1;
}
基本上告诉它在获取视频文件(=没有缓存)之后的1秒内发送过期消息。