天天看點

對視訊内容檔案加密來實作視訊防盜鍊

作者:全景CMS作者

随着線上視訊和線上教育以的興起,線上視訊系統越來越多,如線上知識網站、線上課程、線上教育教育訓練等網站,我們之前講過關于視訊網站的搭建、視訊的雲存儲、視訊的加速播放等,今天的主要話題是視訊内容如何防盜鍊或者防止非法下載下傳。

我們之前有講過一篇文章,視訊播放如何實作防盜鍊,此文主要是對播放位址加Token的方式來實作放盜鍊,但是token很容易擷取,并且視訊檔案也很容易緩存下來,來将緩存的視訊進行提取即可。

本文主要介紹,通過對視訊内容檔案進行加密的方式來實作放盜鍊,這樣可以避免非授權使用者通過播放URL下載下傳或播放點播視訊,有效的實作對視訊内容的版權保護,算是更進階的加密方式。

對視訊内容檔案加密來實作視訊防盜鍊

加密過程

視訊的播放格式介紹

先介紹一下網站的流媒體視訊播放格式,HLS,Http Live Streaming 是由Apple公司定義的用于實時流傳輸的協定,HLS基于HTTP協定實作,傳輸内容包括兩部分,一是m3u8描述檔案,二是TS媒體檔案,統稱M3U8格式。

m3u8格式的檔案隻是存儲多媒體播放清單,提供了一個指向其他位置的音頻視訊檔案的索引,你播放的還是那些被指向的檔案,是一系列的TS檔案,本分成多個TS檔案主要是為了友善加載,比如使用者拖動進度條,就可以直接跳轉到對應的TS檔案即可,不需要加載整個視訊檔案,因而節省了網絡帶寬。

m3u8格式的優點:

  1. 可以多碼率的适配。根據網絡帶寬,用戶端會自動選擇一個适合自己碼率的檔案進行播放,保證視訊流的流暢,代表是蘋果的HLS(HTTP Live Streaming)。HLS有一個特點:自适應碼率流播(adaptive streaming),用戶端可以根據網絡狀況自動選擇不同碼率的視訊流,條件允許的情況下使用高碼率,網絡繁忙的時候使用低碼率,并且自動在二者間随意切換。這對移動裝置網絡狀況不穩定的情況下保障流暢播放非常有幫助。
  2. 降低源伺服器的負載壓力。M3U的特點是将流媒體切分為若幹 TS 片段,然後通過一個擴充的 m3u 清單檔案将這些 TS 片段集中起來供用戶端播放器接收。這樣做相比使用 RTSP 協定的好處在于,一旦切分完成,之後的分發過程完全不需要額外使用任何專門軟體,普通的網絡伺服器即可,大大降低了 CDN 邊緣伺服器的配置要求,可以使用任何現成的CDN。分發使用的協定是最常見 HTTP,代理伺服器對這個協定的緩存優化相當成熟,而很少有代理伺服器對 RTSP 地進行緩存優化。
  3. 對于非實時視訊,播放使用HTTP協定的單個 MP4 格式的視訊檔案時,需要代理伺服器支援 HTTP range request 以擷取大檔案中的一部分,但不是所有的代理伺服器都對此有良好的支援。而 M3U 則隻需要根據清單檔案中的時間軸找出對應的 TS 片段下載下傳即可,不需要 range request,對代理伺服器的要求小很多。所有代理伺服器都支援小檔案的高效緩存。
  4. 為什麼要用 TS 而不是 MP4,這是因為兩個 TS 片段可以無縫拼接,播放器能連續播放,而 MP4 檔案由于編碼方式的原因,兩段 MP4 不能無縫拼接,播放器連續播放兩個 MP4 檔案會出現破音和畫面間斷,影響使用者體驗。
對視訊内容檔案加密來實作視訊防盜鍊

TS流程

視訊加密實作原理

視訊網站的加密就是對HLS/M3U8檔案的加密,使用HLS加密時,初時生成的密鑰是存儲在點播服務中的,業務側在初步播放時需要從點播中查詢擷取密鑰,這要求業務側自行搭建密鑰管理服務,組裝帶token的播放url,從點播服務中擷取密鑰,緩存後再傳回給播放器解密播放。

視訊加密原理,主要是通過指定的AES-128加密算法來加密每一個TS,并在生成的m3u8檔案中描述播放器如何解密TS檔案的方法,支援所有的HLS播放器,前端播放器根據業務規則,擷取解密秘鑰,然後解密TS檔案,進行解密播放。

對視訊内容檔案加密來實作視訊防盜鍊

加密流程

加密過程:

  1. 業務側将視訊上傳到點播服務(VOD)後,請求HLS加密。
  2. 點播服務收到加密請求後,向KMS請求加密密鑰,并将擷取的密鑰ID和密鑰密文存儲在點播服務中。
  3. 點播服務向媒體處理服務請求HLS加密,媒體處理服務通過轉碼功能将對應的視訊進行加密。
  4. 轉碼加密後生成的m3u8檔案帶有“#EXT-X-KEY”标簽,該标簽包含了“METHOD”和“URI”屬性,其中“URI”即為業務側搭建的密鑰管理服務的位址。
  5. 加密後,點播服務通過CDN将加密的HLS視訊檔案進行加速分發。

解密過程:

  1. 終端使用者登入播放器終端,業務側會對終端使用者進行身份校驗,校驗通過後,會為播放終端配置設定一個Token,并将帶Token的播放位址傳回給播放器端。
  2. 播放器終端通過帶Token的播放URL向CDN請求播放。由于Token是動态的,是以CDN收到請求後,會直接回源到點播服務。點播服務會将請求URL中的Token寫入請求的m3u8檔案的“URI”中。點播服務傳回給CDN的m3u8檔案中會攜帶播放終端的Token值。
  3. 播放終端解析傳回的m3u8檔案,得到EXT-X-KEY标簽中的“URI”内容,向“URI”請求密鑰。
  4. 業務側的密鑰管理服務收到請求後,先驗證Token的合法性,若Token合法,則通過調用點播服務的API查詢密鑰。
  5. 密鑰管理服務可以選擇将查詢到的密鑰緩存在本地,當下次有其它播放終端請求時,可以直接傳回,無需每次都向點播服務擷取。
  6. 密鑰管理服務将點播服務傳回的密鑰傳回給播放終端。播放終端通過擷取的密鑰解密播放m3u8檔案。

代碼實作方式

加密服務一般由第三方服務實作,以及直接格式轉換,比如一些雲廠商或者視訊托管廠商,如果要自建,用萬能的 ffmpeg 也可以實作,簡單過程如下:

1. Key檔案

#!/bin/sh BASE_URL=${1:-'.'}
openssl rand 16 > file.key
echo $BASE_URL/file.key > file.keyinfo
echo file.key >> file.keyinfo
echo $(openssl rand -hex 16) >> file.keyinfo
參數詳解:
BASE_URL:網站url位址
openssl rand 16 > file.key 生成一個key檔案
echo $BASE_URL/file.key > file.keyinfo 将外部通路的file.key映射到file.keyinfo檔案中。
echo file.key >> file.keyinfo 将項目file.key所在的檔案路徑映射到fike.keyinfo檔案中。
echo $(openssl rand -hex 16) >> file.keyinfo 生成IV密鑰           

2. 執行指令

ffmpeg -y -i 視訊檔案絕對路徑/202203271023300d469.mp4 \
-preset:v veryfast -hls_time 5 -c:a aac -hls_key_info_file ase加密檔案的絕對路徑/file.keyinfo \
-hls_segment_filename 轉碼之後的ts檔案的存放路徑/%04d.ts \
-hls_list_size 0 轉碼之後m3u8檔案存放的絕對路徑/index.m3u8
參數說明:
-hls_key_info_file 加密檔案的路徑 這個指令是轉碼之後ts檔案是否加密的關鍵指令           
對視訊内容檔案加密來實作視訊防盜鍊

轉換加密前的檔案

對視訊内容檔案加密來實作視訊防盜鍊

轉換後的檔案

結論

是以,對TS的加密進而達到對視訊加密的目的,将加密後的視訊位址存放到CMS管理,在APP/網站等播放器端進行技術對接,使得加密視訊隻能在特定的APP/網站中使用,即使使用者下載下傳了TS檔案,也無法解密播放,安全性更高。

最終使用了加密播放的視訊,可以實作有效的版權保護、二次售賣等一些使用者的非法操作,進而實作了對我們内容的有效保護。

關于視訊網站的搭建可以參考之前的文章:

CMS建構課程平台:如何解決播放流量和帶寬的問題

通過CMS建構視訊課程平台

歡迎轉載,請注明出處!

===================

大家好,我是Robbin,來給大家講CMS。

主要講解如何使用開源Drupal + 可視化工具GrapeJS (建構)=> 可視化、子產品化、低代碼的、易上手的CMS平台。

可以快速建構網站、手機站、産品站、線上教育、課程售賣、售後咨詢等平台的工具。

==================

繼續閱讀