日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于HLS流媒体协议的视频加密方案

發(fā)布時間:2024/2/28 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于HLS流媒体协议的视频加密方案 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文只討論應(yīng)用于瀏覽器環(huán)境的流媒體協(xié)議的加密。

背景

付費觀看視頻的模式是很多平臺的核心業(yè)務(wù),如果視頻被錄制并非法傳播,付費業(yè)務(wù)將受到嚴(yán)重威脅。因此對視頻服務(wù)進行加密的技術(shù)變得尤為重要。

本文所指的視頻加密是為了讓要保護的視頻不能輕易被下載,即使下載到了也是加密后的內(nèi)容,其它人解開加密后的內(nèi)容需要付出非常大的代價。

無法做到嚴(yán)格的讓要保護的視頻不被錄制,原因在于你需要在客戶端播放出視頻的原內(nèi)容,解密的流程在客戶端的話不法分子就能模擬整個流程,最保守也能用屏幕錄制軟件錄制到視頻的原內(nèi)容(可以通過加水印的方法緩解下)。我們的目標(biāo)是讓他獲取原內(nèi)容的代價更大。

簡介

????????起初是為了將業(yè)務(wù)中已有的基于 Flash 的視頻播放器替換為不依賴 Flash 的HTML5 視頻播放器,主要使用了現(xiàn)有的 video.js 開源播放器做的定制化開發(fā)。當(dāng)完成視頻播放器的制作后,在進一步延伸 WEB 端視頻加密的相關(guān)內(nèi)容時,開始了解并逐漸深入的研究了相關(guān)視頻加密內(nèi)容。

最終通過整理歸納,以及自身的理解,做了這個簡單的 Demo。目的是為了能夠給在視頻加密這方面有相同目的的童鞋提供微薄的幫助,要是能起到拋磚引玉的效果,自然是再好不過了。????????

項目啟動

1.安裝項目環(huán)境

安裝 node、npm 環(huán)境

根據(jù) app 目錄下的 package.json 安裝對應(yīng)的 npm 包

安裝 ffmpeg

2.啟動項目

在 app 目錄下,輸入npm start,啟動項目

在瀏覽器中訪問http://localhost:3000

按照頁面中的順序進行相關(guān)操作

3.權(quán)限登錄

用戶名:admin

密碼:admin

項目原理

本項目的核心原理其實就是講解了一個視頻源從正常的 mp4 格式如何變?yōu)榧用芎蟮膍3u8 文件 + ts文件 + key秘鑰文件,之后又如何在服務(wù)端被限制訪問,最終能夠在客戶端正常播放的視頻加密、解密并播放的流程。

項目原理圖示

?

技術(shù)棧

nodejs + express 實現(xiàn)服務(wù)器開發(fā)

ffmpeg + fluent-ffmpeg 實現(xiàn) node 環(huán)境下的視頻轉(zhuǎn)碼、加密

socket.io 通過 websocket 相關(guān)的類庫,實現(xiàn)實時輸出 ffmpeg 進行的視頻轉(zhuǎn)碼、加密操作

video.js + videojs-contrib-hls.js 實現(xiàn)客戶端的視頻解密及播放

html + css + js 實現(xiàn)簡單的前端開發(fā)

源碼簡析

項目目錄說明

源碼簡析

簡單的權(quán)限判斷,app.js中:

express 的中間件

判斷請求的后綴

判斷 session 中是否有用戶名,有則允許訪問 .key 文件;否則禁止訪問

主要是保護 .key 文件,可以加入其它的權(quán)限手段,比如 token、session 有效時長等等

利用 FFmpeg 對視頻進行加密、切片處理,在 encrypt.js 中:

利用了 FFmpeg 的切片和加密方法

建議可以深入研究 FFmpeg 框架的相關(guān) api

可以根據(jù)實際業(yè)務(wù)來對視頻進行更符合要求的切片處理

視頻播放相關(guān)邏輯,player.ejs 中:

使用了 videojs 作為播放器插件

使用了 videojs-contrib-hls 作為切片流解碼插件

具體的邏輯代碼在 player.js 中

建議

本項目更多的價值在于展示出一整套的加密原理,同時為了證明這套原理的可行性,做的比較簡單的示例。

本項目不會提供相關(guān)技術(shù)棧的使用教程。

如果需要在實際應(yīng)用中使用相關(guān)原理或技術(shù)棧,建議根據(jù)實際項目對部分或整體解決方案進行完善和擴展。

雜談

以下的內(nèi)容均為個人觀點,僅供參考

由于本人自身是做前端開發(fā)的,所以很多相關(guān)的示例都是基于前端考慮,對于后端的相應(yīng)的策略并不是很專業(yè)。比如后端服務(wù)器,也采用的是偏前端的。我想表達(dá)的是,在整套解決方案中,我主要做了3件事:

第一,把 mp4 的視頻源通過 FFmpeg轉(zhuǎn)換為加密后的 m3u8 文件和 ts 文件以及關(guān)鍵的加密密鑰 key 文件;

第二,通過最簡單的權(quán)限訪問,保護加密密鑰 key 文件;

第三,利用 video.js 及相關(guān)的 videojs-contrib-hls.js 實現(xiàn)客戶端的視頻文件解密,并播放。

因此可以看出關(guān)于視頻加密的解決方案中,最重要的其實是如何保護加密密鑰 key 文件,而這部分工作更多的是在于服務(wù)器端的相關(guān)策略,比如可以使用 cookie、session 相關(guān)技術(shù)、添加自定義token校驗、有效時長機制等等方法保證秘鑰 key 文件的相對安全性、可靠性。

而如何將視頻源文件轉(zhuǎn)化為對應(yīng)的加密后的文件,可以更多的研究開源庫 FFmpeg 的使用,甚至如果沒有迫切需求,可以考慮使用第三方視頻云服務(wù)商的相關(guān)解決方案。至于客戶端的視頻解密,也可以研究 video.js 相關(guān)的內(nèi)容。

完整項目

https://github.com/hauk0101/video-hls-encrypt

參考資料

流媒體加密 :https://github.com/gwuhaolin/blog/issues/10

Video.js: The Player Framework:https://videojs.com

FFmpeg:https://www.ffmpeg.org/

本文作者:WEB研發(fā)部-姚喬

總結(jié)

以上是生活随笔為你收集整理的基于HLS流媒体协议的视频加密方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。