您的位置:首页 > 运维架构 > 网站架构

网站的视频文件如何每次播放都从服务器下载而不是播放本地缓存

2017-03-24 10:12 639 查看
近日领导提出在服务器的视频文件修改的情况下,客户端仍然播放的是老的视频文件,甚至服务器端视频文件已经不存在了,客户端打开仍然可以播放,只不过还是播放的老的视频文件。要求每次播放从服务器下载,而不是播放缓存中的文件。我第一反应是不可能吧。视频文件的缓存是浏览器控制的,服务器端怎么能控制。这时领导就说优酷他们的视频为什么每次播放都是最新的,而不是缓存中的。我当时就想说,优酷他们有自己开发的播放器,这可能是它的一个功能吧,咱们哪有,但是这话最终没说,最终憋出一句,我研究研究

由于网站使用的是jplayer播放插件,首先在jplayer官方网站找解决缓存的方法。文档中找不到。

然后想在服务器上进行视频文件缓存限制。找到了一种方法。在 asp.net 的 web.config 中可以加入缓存的限制,就是不缓存。但是设置测试的结果并没什么卵用,该播放本地的还是播放本地的。

晚上回家的路上想到了以前对某些网页不缓存的处理,就是在url后加一个时间戳,这样就不会缓存了。不知对视频文件起不起作用。第二天来到公司后进行测试。我们网站的视频文件都是 mp4 格式的,因此我在 javascript mp4 格式的文件请求的后面加了时间戳,初步测试,有效,换了视频文件,然后播放就变换为新的了。如果视频文件删除,则不会播放。这是领导来对我说,他问了一个朋友,他们处理这个问题的方法是每次改视频文件后改名字,这样就不会播放缓存中的了,让我试试这种方法。由于领导说的这种更改视频文件名的方法改动比较大。我们网站视频文件名的生成是按
ID 生成的,要修改就会要动多个地方,太麻烦,因此我没同意,我说我再找找,要没合适的就用改文件名的方法。

领导走后我又换了几个浏览器进行详细测试,最终确认这种加时间戳的方法是有效的,最终确认了这种禁用缓存的方法。

javascript url加缓存的函数:

/*
 * 解决浏览器缓存 
 */
function timestamp(url) {
    //  var getTimestamp=Math.random();  
    var getTimestamp = new Date().getTime();
    if (url.indexOf("?") > -1) {
        url = url + "×tamp=" + getTimestamp
    } else {
        url = url + "?timestamp=" + getTimestamp
    }
    return url;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  视频 缓存 javascript