【问题标题】:Caching Video On-Demand按需缓存视频
【发布时间】:2016-04-09 15:19:22
【问题描述】:

我想缓存来自特定网站的视频点播。当您打开视频页面时,它首先加载播放器,当您单击播放时,它会加载包含指向不同比特率的块列表(媒体播放列表)链接的播放列表文件,这些块列表包含指向视频文件(媒体片段)的链接。

只是一个插图:

对于这些文件中的任何一个,我从来没有得到HIT - 总是MISS。因为有Cache-Control: no-cache 标头字段,我尝试了reply_header_access Cache-Control deny allreply_header_replace Cache-Control max-age=3600 但这没有帮助。然后我认为请求标头中的 cookie 可能与它有关 - 但不是:How does Squid deal with Cookies?

我注意到播放列表的 Content-Length 字段从 201 到 205 不等 - 也许与此有关?但是里面的内容总是差不多的——唯一可以改变大小的是里面有指向 chunklists 的链接,它们之间有一个随机数 (chunklist_w[random-number]_b800000.m3u8),长度为随机数通常为 9 或 10 位。为什么我想从缓存中提供播放列表文件是因为浏览器总是会请求相同的 URL,并且该 URL 将被缓存,因此无需重写 URL。

所以理论上播放列表文件应该只从源请求一次(第一次请求到代理),然后总是从 squid 缓存以及块列表和媒体文件请求一次,因为 URL 将保持不变 - 所以没有动态内容。

为什么 squid 不从缓存中提供这些内容? (另一方面,“静态”内容 [images, js, css] 是从缓存中提供的)


更新 #1:我还尝试将 maximum_object_size 从 4 MB 扩展到 20 MB,即使所有文件都在 2 MB 左右。还是什么都没有。


附加信息:

用鱿鱼:

随机数 = 1887187059(10 位)

请求标头:

GET [omitted] HTTP/1.1
Host: [omitted]
Proxy-Connection: keep-alive
X-Requested-With: ShockwaveFlash/21.0.0.197
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36
Accept: */*
Referer: [omitted]
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6,sl;q=0.4
Cookie: PHPSESSID=jfg6j07l9i6bep37jsacig84e1; nocache=0

响应标头:

HTTP/1.1 200 OK
Accept-Ranges: bytes
Server: WowzaStreamingEngine/4.3.0
Cache-Control: max-age=86400
Date: Sat, 09 Apr 2016 14:45:53 GMT
Content-Type: application/vnd.apple.mpegurl
Content-Length: 205
X-Cache: MISS from squid3
X-Cache-Lookup: MISS from squid3:3128
Via: 1.1 squid3 (squid/3.3.8)
Connection: keep-alive

没有鱿鱼:

随机数 = 204546888(9 位)

请求标头:

GET [omitted] HTTP/1.1
Host: [omitted]
Connection: keep-alive
X-Requested-With: ShockwaveFlash/21.0.0.197
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36
Accept: */*
Referer: [omitted]
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6,sl;q=0.4
Cookie: PHPSESSID=jfg6j07l9i6bep37jsacig84e1; nocache=0

响应标头:

HTTP/1.1 200 OK
Accept-Ranges: bytes
Server: WowzaStreamingEngine/4.3.0
Cache-Control: no-cache
Date: Sat, 09 Apr 2016 14:59:56 GMT
Content-Type: application/vnd.apple.mpegurl
Content-Length: 203

【问题讨论】:

    标签: caching video squid


    【解决方案1】:

    使内容缓存的行是:

    refresh_pattern \.(ts|m3u8)$ 120 50% 180 override-expire override-lastmod ignore-no-cache
    

    这一行告诉缓存管理器扩展名为.ts.m3u8 的文件应该被认为是最新的3 小时,并且它应该覆盖三个HTTP 标头字段:Expire、Last-Modified 和 Cache-Control:no-缓存

    要了解有关refresh_pattern 的更多信息,请查看Squid Documentation

    为什么之前没有缓存此内容是因为缺少选项override-expireoverride-lastmodignore-no-cache,因为在缓存中时间并不重要——当我们想向用户提供内容时很重要。

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 1970-01-01
      • 2015-07-15
      • 2020-08-11
      • 2013-08-18
      • 2014-07-15
      • 2014-01-03
      • 2020-09-05
      • 1970-01-01
      相关资源
      最近更新 更多