就是這傢伙URL.createObjectURL()導致了視頻無法下載

引言

當你看到一些視頻,是不是心裡 發癢,想把他下載下來?於是你開始了下面的操作:在瀏覽器上,右鍵,選擇“檢查”,鼠標點到視頻上,很快的,在源代碼裡看到了視頻引用的mp4文件。


就是這傢伙URL.createObjectURL()導致了視頻無法下載

然後,你選擇視頻代碼,右鍵選項在Tab裡打開,瀏覽器就打開了視頻,再一次選擇“另存為...”,就把視頻保存到自己的電腦上了。

就是這傢伙URL.createObjectURL()導致了視頻無法下載

video標籤

在新版的HTML5裡,W3C提出了video標籤,video標籤成為了瀏覽器行業標準(現在很少有視頻再用flv了),video有一個src屬性,他設定的是視頻/音頻地址,因此,上面的視頻,代碼其實是:

<code>  <video>/<code>

沒錯,就是這麼簡單,video告訴瀏覽器這是一個視頻,src告訴瀏覽器這個視頻的地址是 music.mp4,然後瀏覽器就開始播放了。


URL.createObjectURL()加密

video出來後,那些視頻大廠不願意了,自己的視頻,瞬間可以被別人下載,不行,我要加密,怎麼加密呢?既然視頻是通過src看到視頻實際地址的,那我就對src加密,給用戶一個假地址。

因此,全球視頻大廠聯合技術大廠推出了一個函數:URL.createObjectURL() 並讓所有瀏覽器都支持它。看看這個函數的介紹,內容很晦澀,總之其實就是幾句話:生成一個虛假的URL。

<code>URL.createObjectURL() 靜態方法會創建一個 DOMString,其中包含一個表示參數中給出的對象的URL。
這個 URL 的生命週期和創建它的窗口中的 document 綁定。

這個新的URL 對象表示指定的 File 對象或 Blob 對象。/<code>
就是這傢伙URL.createObjectURL()導致了視頻無法下載

如何生成虛擬URL

為了說明如何生成虛擬URL,下面模擬的是一個小的視頻代碼段:用戶選擇一個視頻文件,然後利用URL.createObjectURL生成一個虛擬URL,再把這個虛擬URL給視頻。

<code>   
<video> /<video>

/<code>

現在,你再查看源代碼,你看到了視頻源代碼,然後看到了視頻使用的src地址


就是這傢伙URL.createObjectURL()導致了視頻無法下載

可以當你興致勃勃的吧上面網址在瀏覽器打開時,瀏覽器卻返回了一個錯誤:文件不存在。

就是這傢伙URL.createObjectURL()導致了視頻無法下載

這樣,就把大部分小白擋在了下載視頻的大門之外。如果再配合*.m3u8對視頻分割(以後會介紹),就能更進一步加大用戶下載視頻的困難。


分享到:


相關文章: