hls視頻生成及加密方案研究


工作中的一個項目需要實現視頻在線播放並防止下載。研究目前主流方案以后,決定采用HLS生成視頻分片並手動加密的方案。這篇文章記錄了研究過程中遇到的問題,以及最后的結果。僅供以后參考。

采用ffmpeg生成HLS原始視頻分片

ffmpeg是一個強大的媒體文件處理工具,用它可以方便的生成HLS視頻分片。

生成未加密的視頻分片命令

ffmpeg -i demo.mp4 -codec copy -f segment -segment_list index.m3u8 -segment_time 30 segment_%d.ts

-i 輸入文件
-codec 選擇輸入文件解碼器或輸出文件編碼器。copy用於輸出文件,表示保留輸入文件編碼無需重新編碼。
-f 指定輸入或輸出文件格式。選擇segment,表示視頻切片。
-segment_list 指定視頻切片索引文件。
-segment_time 指定視頻切片時長。
segment_%d.ts 最后指定切片文件命名格式

參考代碼,運行plain.sh即可完成視頻分片
參考生成資源,可使用安裝了Native HLS Playback插件的chrome直接播放。

生成加密的視頻分片

未加密的視頻分片可以直接播放,用戶獲得視頻分片后可以通過工具合成整個視頻文件。無法防止用戶下載源視頻,故需要采用加密視頻分片方式保護源視頻。有兩種方式生成加密視頻分片

1. 采用ffmpeg生成

從網上能找到的此方式的命令為,參考這篇文章

ffmpeg -y -i demo.mp4 -hls_time 30 -hls_key_info_file enc.keyinfo -hls_segment_filename "segment_%d.ts" index.m3u8 

-hls_key_info_file 指定keyinfo文件

keyinfo文件內容格式如下

獲取key的URI
key文件路徑
IV值(可選)

keyinfo文件示例如下

http://loacalhost:8080/key enc.key 714e1acbfe1663528e97cbb4647f0a33 

此命令可以生成加密的視頻分片,但是需要重新解碼編碼比較費時。故加上-codec copy參數,禁止編解碼。

ffmpeg -y -i demo.mp4 -codec copy -hls_time 30 -hls_key_info_file enc.keyinfo -hls_segment_filename "segment_%d.ts" index.m3u8 

但此命令運行會報錯 <font color=red><b>Cannot use rename on non file protocol, this may lead to races and temporary partial files</b></font> 並導致索引文件無法包含所有分片。

研究沒有找到解決方法,開始研究第二種方式。

2. 采用openssl手動加密

此方案步驟

  1. 生成未加密的視頻分片文件。

  2. 根據HLS RFC 8216規范6.2.3,采用openssl手動加密視頻分片文件。

  3. 修改視頻索引文件,增加#EXT-X-KEY

此方式又分為兩種

a. 默認IV

參考代碼,運行encrypt.sh完成視頻分片和加密,生成的密鑰文件為enc.key
參考生成資源,可使用安裝了Native HLS Playback插件的chrome直接播放。

b. 自定義IV

參考代碼,運行encrypt.sh完成視頻分片和加密,生成密鑰文件enc.key,iv文件iv.key
參考生成資源,可使用安裝了Native HLS Playback插件的chrome直接播放。

另外,openssl加密速度非常快,每個分片可以使用不同的密鑰加密,提高安全性。

進一步防止防止下載

加密的視頻文件播放時,需要先獲取密鑰,解密視頻文件,然后播放視頻。所有這些過程都在客戶端進行,對於具有一定開發能力的用戶,還是能夠獲取密鑰文件和加密視頻,然后還原出原視頻。

可以采用下面的措施進一步保護源視頻防止下載

  1. 通過權限驗證保護密鑰URI和索引文件URI,防止盜鏈以及增加用戶獲得密鑰文件的難度。

  2. 將索引文件和密鑰文件二次加密,修改客戶端播放器,使其先解密索引文件和密鑰文件,再播放加密視頻。

參考完整Github代碼



作者:李桐2000
鏈接:https://www.jianshu.com/p/63485d78086f
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM