繁体   English   中英

按需缓存视频

[英]Caching Video On-Demand

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

只是一个例子: 主播放列表-媒体播放列表-媒体细分

对于这些文件中的任何一个,我永远都不会碰到HIT总是MISS 因为有Cache-Control: no-cache标头字段,所以我尝试了reply_header_access Cache-Control deny all reply_header_replace Cache-Control max-age=3600reply_header_replace Cache-Control max-age=3600但这无济于事。 然后我以为请求标头中的cookie可能与它有关-但是没有: Squid如何处理Cookies?

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

因此,从理论上讲,播放列表文件应仅从源请求一次(对代理的第一个请求),然后始终从鱿鱼缓存以及块列表和媒体文件中请求一次,因为URL保持不变-因此没有动态内容。

鱿鱼为什么不从缓存中提供此内容? (另一方面,“静态”内容[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

进行内容缓存的行是:

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

此行告诉缓存管理器,扩展名为.ts.m3u8文件应在3个小时内被视为.m3u8文件,并且应覆盖三个HTTP标头字段:Expire,Last-Modified和Cache-Control:no-cache

要了解有关refresh_pattern更多信息,请查看Squid文档

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM