簡體   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