2013-04-04 87 views
5

我有一個html5視頻播放器(視頻標籤)。當頁面加載時,它會向視頻文件發送請求。HTML5視頻:修改http範圍請求標頭

是否可以修改http請求頭範圍字段? (見截圖,2條紅色線之間)

範圍:字節= 0- 將下載整個視頻和我想限制它到「範圍:字節= 0-1000000」例如

Screenshot

視頻文件託管在CDN上,所以我無法在服務器端做任何事情。

+0

我認爲目前大多數瀏覽器的實現都相當聰明。當視頻標籤首次出現時,我記得標籤會嘗試儘可能快地下載整個文件。更新的版本似乎只能預緩衝幾秒鐘。您是否看到一個試圖在頁面加載時下載整個文件的瀏覽器? – 2013-04-05 05:46:58

+0

問題在於您暫停視頻時。然後瀏覽器將開始儘可能快地下載文件 – Hese 2013-04-08 15:50:28

+0

當瀏覽器遠遠超出回放要求時,瀏覽器應該自動重置連接(中止傳輸),然後在需要時收到最後一個字節時請求更多的啓動更多。 – mark4o 2013-04-08 16:33:09

回答

1

您可以使用XMLHttpRequest發送範圍請求!並在window.URL.createObjectURL上獲得一個blob文件,如果服務器的「Accept-Range:Bytes」。視頻標籤爲您提供了許多事件和屬性,因此您始終知道什麼是緩衝區以及您在哪裏。即使用戶點擊了進度條,也可以暫停或停止按鈕。由於視頻屬性基於時間而不是字節範圍,因此您需要視頻文件中稱爲視頻元數據的一些附加信息。我使用Yamdi來獲得播放時間的xml文件,以查找文件的位置比例,併爲.flv開頭設置元數據。在服務器端讀取範圍頭(bytes = number1-number2 ...),打開視頻文件,尋找number1,打印(number2-number1 + 1)字節併發送一些特定的頭文件:Content-Type,內容處置,HTTP/1.1 206部分內容,內容範圍。

您應該遵循尋找位置。長度取決於你。

+0

將整個視頻加載到blob中,將video.src設置爲blob。 Chrome/Android仍然無法播放它。還嘗試發送blob gzip作爲Chrome/Android請求標頭髮送gzip請求 – matthewbaskey 2014-08-09 13:07:26