防止video視頻被下載的處理方法匯總
防止video視頻被下載的處理方法
1,video禁用下載功能
<video controlslist="nodownload"></video>
2,隱藏鼠標(biāo)右鍵,禁止復(fù)制鏈接
document.oncontextmenu = function () { return false; }
3,使用云點(diǎn)播等第三方播放控件,最好的話設(shè)置一下防盜鏈;
4,使用blob視頻流加密的形式;
部分瀏覽器,如qq瀏覽器會(huì)攔截video標(biāo)簽獲取到播放鏈接,當(dāng)用戶鼠標(biāo)移如播放器時(shí)會(huì)出現(xiàn)下載字樣,為了解決這一問(wèn)題,我們采用blob視頻流的形式進(jìn)行加密;
目前市面上采用這種方式的比較多:比如嗶哩嗶哩,西瓜視頻等,如圖:
BLOB :二進(jìn)制大對(duì)象,是一個(gè)可以存儲(chǔ)二進(jìn)制文件的容器。Video 使用 blob 二進(jìn)制流需要前后端同時(shí)支持。
拿到blob對(duì)象后,再通過(guò)URL.createObjectURL生成臨時(shí)地址,賦值給video標(biāo)簽的src屬性,這樣就可以了。但其實(shí)可以直接從服務(wù)端接收二進(jìn)制對(duì)象,就是服務(wù)端把視頻文件轉(zhuǎn)換成二進(jìn)制對(duì)象,通過(guò)接口給到前端,前端再生成dom string。
其中,在瀏覽器端也提供了BLOB相關(guān)的API,通過(guò)new Blog(…)生成blog對(duì)象。
前端獲取這個(gè)blob對(duì)象后,的操作如下;
jq寫(xiě)法:
let xhr = new XMLHttpRequest() xhr.open('GET', 'http://localhost:3001/video', true) xhr.responseType = 'blob' xhr.onload = function(e) { if (this.status === 200) { // 獲取blob對(duì)象 let blob = this.response console.log(blob) // 獲取blob對(duì)象地址,并把值賦給容器 $("#my-video").attr("src", URL.createObjectURL(blob)); } } xhr.send()
js原生寫(xiě)法:
<script type="text/javascript"> var video = document.getElementById("my-video"); window.URL = window.URL || window.webkitURL; var xhr = new XMLHttpRequest(); var play_url = 'test.mp4'; xhr.open("GET", play_url, true); xhr.responseType = "blob"; xhr.onload = function() { if (this.status == 200) { var blob = this.response; console.log(blob); video.onload = function(e) { window.URL.revokeObjectURL(video.src); }; video.src = window.URL.createObjectURL(blob); } } xhr.send(); </script>
5,視頻切片加密:
如果是加載一個(gè)大視頻的話,這就會(huì)浪費(fèi)大量的流量,并且加載過(guò)程會(huì)持續(xù)占用帶寬。
這個(gè)時(shí)候我們會(huì)用到視頻分片處理。
試想一下,如果我們把視頻切成一段一段的,每次只加載一段,看完了再加載一段,這樣能有效的節(jié)省資源。
還是以B站的一個(gè)視頻為例,在F12中的Network里可以看到,網(wǎng)站一直在一段一段的請(qǐng)求視頻流的數(shù)據(jù)。(PS:這個(gè)m4s是HTML的一種格式)
切片加密原理:將視頻從MP4文件切片成多個(gè)ts文件,并使用AES-128對(duì)每一片視頻進(jìn)行加密,最后生成m3u8文件。這里我們需要用到ffmpeg。
補(bǔ)充:
解決video標(biāo)簽視頻禁止下載方法
1、屏蔽鼠標(biāo)右鍵:<body oncontextmenu = "return false">
2、屏蔽視頻播放器右下角三個(gè)點(diǎn)的下載按鈕(chrome會(huì)顯示):
<video class="edui-upload-video vjs-default-skin video-js" controls="true" controlslist="nodownload" preload="none" width="420" height="280" src="" data-setup="{}" controlslist="nodownload" poster=""></video>
video是需要提供一個(gè)視頻地址,所以這兩種方式并不是徹底屏蔽下載鏈接(也可能有其他方式)。
所以,如果不需要被惡意轉(zhuǎn)載或者共享的視頻,不建議使用video標(biāo)簽。
相關(guān)文章
js驗(yàn)證身份證號(hào)有效性并提示對(duì)應(yīng)信息
這篇文章主要介紹了一段超級(jí)全面的二代身份證號(hào)碼驗(yàn)證程序,2015-10-10ionic js 復(fù)選框 與普通的 HTML 復(fù)選框到底有沒(méi)區(qū)別
本文通過(guò)實(shí)例給大家演示ionic js 復(fù)選框 與普通的 HTML 復(fù)選框到底有沒(méi)區(qū)別的相關(guān)知識(shí),非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-06-06使用TypeScript實(shí)現(xiàn)高效的異步隊(duì)列任務(wù)管理
在javaScript項(xiàng)目開(kāi)發(fā)中,異步編程是不可或缺的一部分,從網(wǎng)絡(luò)請(qǐng)求到延時(shí)操作,異步操作使得我們能夠在等待某個(gè)任務(wù)完成時(shí)繼續(xù)執(zhí)行其他任務(wù),提高應(yīng)用的響應(yīng)性和性能,本文使用JavaScript實(shí)現(xiàn)一個(gè)異步隊(duì)列來(lái)優(yōu)雅地管理復(fù)雜的異步任務(wù)流,需要的朋友可以參考下2024-03-03js 完美圖片新聞?shì)嗈D(zhuǎn)效果,騰訊大粵網(wǎng)首頁(yè)圖片輪轉(zhuǎn)改造而來(lái)
找過(guò)很多圖片輪詢效果,和我的要求總是有些出入,不能十全十美。不是功能不全,就是太多花哨。本想自己開(kāi)發(fā)一個(gè),鑒于瑣事拖延,遲遲未能開(kāi)始2011-11-11用xhtml+css寫(xiě)的相冊(cè)自適應(yīng) - 類似九宮格[兼容 ff ie6 ie7 opear ]
用xhtml+css寫(xiě)的相冊(cè)自適應(yīng) - 類似九宮格[兼容 ff ie6 ie7 opear ]...2007-05-05