查看原文:玩轉(zhuǎn)視頻加密技術
點擊關注“八戒技術團隊”,閱讀更多技術干貨
短視頻目前在互聯(lián)網(wǎng)上非?;鸨?,因為視頻比文字更能清晰的表達創(chuàng)作的內(nèi)容,大家每天都可能在刷抖音、B站的視頻。作為開發(fā)人員,不管是否從事音視頻開發(fā),都應該了解一下相關的技術。
一、基礎概念
首先給大家介紹視頻的三個基礎概念:
1.幀數(shù)
在一秒內(nèi)播放的幀數(shù)就是每秒幀數(shù)率。
視頻標準幀率:24幀
2.分辨率
視頻圖像在一個單位尺寸內(nèi)的精密度。
常見分辨率:1280*720
3.碼率
數(shù)據(jù)傳輸時單位時間傳送的數(shù)據(jù)位數(shù),單位:kbps。
碼率和質(zhì)量成正比,但是文件體積也和碼率成正比。
二、視頻格式
視頻格式實質(zhì)是視頻編碼方式,可以大致分為兩種大類:
一、適合本地播放的本地影像視頻(從網(wǎng)上下載的視頻如:MP4)

如上圖,這是一個常見的MP4格式視頻,有很多視頻的基礎信息。MP4、AVI、MKV等都是本地視頻文件的后綴,是一種包含視頻各種信息的封裝格式,可以理解為一種打包,把所有的視頻數(shù)據(jù)和音軌封裝在一起。
二、適合在網(wǎng)絡中播放的網(wǎng)絡流媒體影像視頻(如B站上的視頻)
【視頻協(xié)議】是針對網(wǎng)絡流媒體而言的,也就是只有在有網(wǎng)絡時通過瀏覽器或者移動端APP才能看到的視頻,目前常見的協(xié)議有RTSP、RTMP、HLS、HTTP等。
一般來講,視頻流從加載到準備播放是需要經(jīng)過解協(xié)議、解封裝、解編碼這樣的過程,其中協(xié)議指的就是流媒體協(xié)議;封裝指的是視頻的封裝格式;而編碼又分為視頻編碼和音頻編碼。
如果平臺上的視頻出于對版權的考慮,要進行加密,一般是怎么處理的呢?
三、視頻BLOB加密
這種加密是在前端比較常見的一種加密方式,我們以B站上的一個視頻為例:

打開瀏覽器按下F12,可以看到視頻的資源地址是一串以 blob 開頭的地址,這跟我們常見的地址有些不一樣,而且如果你直接打開這個地址是無效的。
BLOB,它的全稱為big binary large object,譯為二進制大對象。一般來說,首先由后端,比如 JAVA 將視頻轉(zhuǎn)換為blog對象傳給前端,前端在拿到blog對象后,再通過URL.createObjectURL生成臨時地址,賦值給video標簽的src屬性,就可以實現(xiàn)這個效果了。前端的大致代碼如下:

四、視頻切片加密
我們知道看視頻的話是需要很大的流量的,對于絕大多數(shù)用戶來說,他們不一定會把視頻看完,如果是加載一個小視頻,那還沒有什么大問題,但如果是加載一個大視頻的話,這就會浪費大量的流量,并且加載過程會持續(xù)占用帶寬。這個時候我們會用到視頻分片處理。
試想一下,如果我們把視頻切成一段一段的,每次只加載一段,看完了再加載一段,這樣能有效的節(jié)省資源。還是以B站的一個視頻為例,在F12中的Network里可以看到,網(wǎng)站一直在一段一段的請求視頻流的數(shù)據(jù)。(PS:這個m4s是HTML的一種格式)

切片加密原理:將視頻從MP4文件切片成多個ts文件,并使用AES-128對每一片視頻進行加密,最后生成m3u8文件。這里我們需要用到ffmpeg。
1.生成公有key
openssl rand 16 > encrypt.key
2.生成私有key(16進制)
openssl rand -hex 16
3.按照下面格式新建一個encrypt.keyinfo的文件
Key URI # enc.key的路徑,使用http形式
Path to key file # enc.key文件
Private key # 上面生成的16進制的私有key
例如:
http://192.168.1.111:8090/encrypt.key
/home/Admin/encrypt.key
8b4c39c498949536f8d2af1f6fec7d39
4.用 ffmpeg 開始分片并加密

五、防盜鏈Referer
通過對視頻資源設置防盜鏈Referer,可以屏蔽非白名單內(nèi)的視頻資源下載。例如思博網(wǎng)的視頻我們都設置了防盜鏈:

HTTP referer 是 header 上的一個屬性。當瀏覽器向服務器發(fā)起請求時,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的。打個比方,我們在后臺上傳一個視頻到七牛云,七牛云高級配置里有一個域名防盜鏈選項,我們可以在這里設置白名單和黑名單。

另外,七牛云還提供了私有空間,私有空間內(nèi)的文件對象都要獲得擁有者的授權才能進行訪問,并且可以設置鏈接的有效時間,超過時長后自動失效(視頻會有緩存,清空緩存之前視頻仍然有效)。私有空間的特點是安全性更高,需要加token訪問,資源鏈接有時效性。
除了以上幾種策略外,還有視頻播放器加密、跑馬燈防盜錄等等。但是即使做了加密處理,也阻止不了錄屏。完全杜絕視頻泄露是很難的,或者我們可以采取其他方式加大盜用的成本。
目前市面上大致的視頻加密就是這幾種,當然我們可以多個方案一起使用,使視頻加密的安全性更高。
希望以上內(nèi)容能對有需要的人有所幫助
歡迎大家一起探討交流

如若轉(zhuǎn)載,請注明出處:http://www.qjsdgw.cn/3442.html