ffmpeg分解视频文件并加密
ffmpeg,可以將視頻分解成小塊,并根據密鑰進行內容加密。首先需要將密鑰寫入文件video.key。
還需要第二個文件,key_info來存儲是關鍵信息文件。它具有以下格式:
key URI key file path IV (optional)例如:
http://example.com/video.key video.keyffmpeg可以用這個hls_key_info參數來加密你的細分視頻:
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -hls_time 10 -hls_key_info_file key_info playlist.m3u8這將使用CBC模式的AES-128加密您的細分,并將相關標簽添加到播放列表:
#EXT-X-KEY:METHOD=AES-128,URI="http://example.com/video.key"如果需要,您也可以手動加密細分openssl。這里是一個示例腳本,其中每個IV等于段索引:
#!/bin/bash ts_dir=/path/to/ts/ key_file=video.key openssl rand 16 > $key_file enc_key=$(hexdump -v -e '16/1 "%02x"' $key_file) pushd $ts_dir ts_cnt=$(ls *.ts | wc -l) ((ts_cnt--))i=0 for i in $(seq -f "%01g" 0 $ts_cnt); doiv=$(printf '%032x' $i)ts_file=segment-$i.tsecho [$i] $ts_fileopenssl aes-128-cbc -e -in $ts_file -out encrypted_${ts_file} -nosalt -iv $iv -K $enc_key done popd另外一個可以參考的命令行例子:
ffmpeg -i input.mp4 -f segment -segment_times 10,20 -c copy -map 0 output02%d.mp4以下信息來源于亞馬遜
內容保護
AES-128內容加密
許多不同的流協議已經認識到對內容保護的需求,這些協議已經以各種形式和風格增加了對內容保護的支持。協議的第一稿HLS規范中已經存在AES-128加密,將內容保護置于優先級列表中。實際上,HLS有兩種加密方案:
-
AES-128加密:這意味著使用 128位密鑰的高級加密標準對媒體段進行完全 加密。它還允許使用初始化向量來優化保護。
-
樣本AES:在這種情況下,各個媒體樣本使用AES標準加密。使用此加密級別,流容器未完全加密。此外,加密樣本如何封裝,取決于片段的媒體格式。
實際上,AES-128是HLS中最常用的加密方法。這種方法通常也是使用標準流服務器和工具來實現的最簡單的方法。
這種AES-128保護有多安全?
處理內容保護的第一個問題通常是:“這種保護有多安全?為了理解這一點,我們來看看AES加密是什么。AES是一種對稱加密算法。它被設計為在硬件和軟件方面都是高效的。該算法在全球范圍內得到應用,被美國政府用作加密敏感數據的標準加密算法。此外,它是大多數DRM系統的基礎,例如Microsoft Playready,Widevine和Verimatrix。AES加密的使用最近也成為MPEG-DASH通用加密標準的一部分。一般來說,這個級別的AES加密可能很快就不會被破壞。
AES加密本身可以被聲明安全。但是,加密只是最弱點的安全。還需要看一下解密密鑰的安全性。這是許多DRM技術所關注的領域。他們認為關鍵保護至關重要,通常采用非常晦澀或復雜的方案來檢索解密密鑰。通過AES-128內容保護,密鑰檢索工作保持簡單,易于實現。它也留有足夠的自由使關鍵保護盡可能簡單或高級。
如何保護解密密鑰?
HLS規范僅提及密鑰檢索的一個方面:可以加載密鑰的URL應該是清單文件的一部分。保護此資源取決于發布商本身。大多數情況下,我們看到了許多不同的保護解密密鑰的方法:
-
保護清單:這依賴于將URL隱藏到解密密鑰。它不提供高水平的安全性,因為URL可能泄漏或可能在網絡上被攔截。
-
使用身份驗證Cookie:驗證Cookie可由玩家發送密鑰請求。這允許密鑰服務器檢查哪個用戶正在請求密鑰。如果用戶不允許訪問流,則不會返回密鑰。結果,只有具有正確認證的用戶才能接收解密密鑰。
-
利用簽名的URL:通過為每個用戶提供唯一的清單,可以使用簽名的URL。然后,用戶特定的清單將包含一個包含認證令牌的解密密鑰的鏈接。然后,服務器可以檢查認證令牌,并確定是否可以訪問密鑰。
在實踐中使用AES-128加密?
這當然是AES-128加密在實踐中可以使用的問題。使用AES-128加密可以通過加密您的媒體文件,并使用清單文件中的EXT-X-KEY標簽進行信令。該標簽將URL發送到解密密鑰。它應放在第一個段之前,該段是用給定的密鑰加密的。這個標簽可以發生兩個極端:
有一次在清單的頂部。這意味著所有段都使用相同的解密密鑰加密。在解密密鑰被攔截的情況下,整個流可以被解密。
用不同的URL每個段之前。這種方法允許您使用不同的密鑰加密每個段。密鑰允許您解密單個段,其中只包含幾秒鐘的媒體信息。
在這兩個極端之間,您可以自由選擇自己刷新加密密鑰的頻率。下面你可以找到一個示例清單,每兩個段可以旋轉加密密鑰:
#EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-KEY:METHOD = AES-128,URI = https://security.theoplayer.com/sequence-1.key” #EXTINF:10.0,http://media.theoplayer.com/video1/sequence-1-segment-1.ts #EXTINF:10.0,http://media.theoplayer.com/video1/sequence-1-segment-2.TS #EXT-X-KEY:METHOD = AES-128,URI = “https://security.theoplayer.com/sequence-2.key”#EXTINF:10.0,http://media.theoplayer.com/video1/sequence-2-segment-1.ts #EXTINF:10.0,http://media.theoplayer.com/video1/sequence-2-segment-2.ts #EXT-X-ENDLIST總結
以上是生活随笔為你收集整理的ffmpeg分解视频文件并加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [hls]m3u8视频如何处理成加密?
- 下一篇: 使用ffmpeg视频切片并加密