HLS視頻加密,讓您的視頻內容更安全!

?背景介紹

HLS視頻加密是一種基于HTTP Live Streaming(HLS)協議的加密技術。它的核心思想是將視頻切片進行加密處理,在客戶端播放時需要先獲取解密密鑰才能正常偶發。通過這種方式,HLS加密可以有效防止未經授權的第三方竊取視頻內容,從而保障了視頻內容的版權和安全。數據萬象媒體處理服務提供了一套HLS視頻加密方案,方便用戶各個場景的需求。

?HLS加密方案

整體加密方案如下圖所示:

圖片

?

痛點

在我們日常的工作生活中,如果沒有HLS加密,會帶來以下問題:

  • 視頻內容被非法下載和分享:沒有加密的視頻內容容易被非法下載和分享,導致付費業務受到威脅。

  • 影響用戶體驗:為了提高視頻的安全性,可能需要采用更復雜的驗證和授權機制。這可能會增加用戶的操作復雜度,降低用戶體驗。

  • 增加服務器的負擔:如果采用客戶端解密的技術,服務器需要處理更多的請求和計算量,可能會對延遲和性能造成一定的不良影響。

?使用場景

  • 直播賽事:體育賽事、音樂會等大型活動需要進行直播,HLS加密可以有效防止盜版和非法傳播。

  • 在線教育:在線教育平臺需要保護課程內容的版權,HLS加密可以確保課程內容不被非法竊取。

  • 付費視頻:電影、電視劇等付費視頻內容需要進行版權保護,HLS加密可以有效防止盜版行為。

  • 企業會議:企業的重要會議、內部培訓等內容需要進行保密處理,HLS加密可以確保這些內容不被泄露。

?操作指南

生成加密視頻

一、模版設置

1. 開通媒體處理

進入存儲桶界面,點擊數據處理中的媒體處理,點擊開通。

圖片

2. 創建HLS轉碼模版

點擊任務與工作流里的模版配置,點擊創建轉碼模版

2.1 輸入模版名稱,封裝格式選擇HLS。

圖片

2.2 打開視頻加密開關

視頻參數和音頻參數根據需要填寫,在高級設置里打開視頻加密開關

圖片

二、創建轉碼任務

在當前存儲桶上傳任意視頻文件,點擊任務管理里的創建任務。

1. 生成m3u8加密文件

源文件路徑選擇剛剛上傳的視頻文件,模版類型選擇自定義模版,選擇第二步創建的hls轉碼模版,記住目標路徑和目標文件名,產出文件就是我們需要的加密視頻文件。

圖片

2. 確定產物文件

找到創建任務時填的產物路徑,可看到生成后的加密文件

圖片

播放加密視頻

控制臺媒體處理,視頻加密配置模塊,展示播放密鑰(playKey,部署后端服務的時候會用到)

圖片

拿到生成的m3u8視頻文件和播放秘鑰(playKey)后,就可以開始搭建服務,播放剛剛加密的m3u8視頻文件。

本文前端部分以js代碼為例,服務端以nodejs為例,來說明整個使用過程。

三、前端部分

1. 首先下載hls加密代碼包(https://bjtest-10008930.cos.ap-shanghai.myqcloud.com/hlsCode/hls%E5%8A%A0%E5%AF%86%E4%BB%A3%E7%A0%81%E5%8C%85.zip)

2. 在頁面中引入壓縮包中cos_hls.js、jsencrypt.js 和 hls.js。

3.?根據播放器種類,在頁面中引入壓縮包中文件,目前支持三種類型(hls.js/tcplayer/video.js)。

hls.js:

<script src="./cos_hls.js"></script>
<script src="./hls.js"></script> 
<script src="./jsencrypt.js"></script>

tcplayer:


<link href="https://web.sdk.qcloud.com/player/tcplayer/release/v4.2.2/tcplayer.min.css" rel="stylesheet"/>
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.2.2/libs/hls.min.0.13.2m.js"></script>
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.2.2/tcplayer.v4.2.2.min.js"></script>
<script src="./cos_hls.js"></script>
<script src="./jsencrypt.js"></script>

video.js:


<link href="https://vjs.zencdn.net/8.11.8/video-js.css" rel="stylesheet" />
<script src="https://vjs.zencdn.net/8.11.8/video.js"></script>
<script src="./cos_hls.js"></script>
<script src="./jsencrypt.js"></script>

4. 前端使用cos_hls.js文件中封裝好的cosHls對象來播放m3u8文件,用戶按照如下規則傳入參數,即可實現播放功能。?


<script>// cosHLs為cos_hls.js封裝的對象,使用play方法播放視頻文件cosHls.play({// video標簽的idcontainer: 'video',// 支持的播放器種類(hls.js/tcplayer/video.js)playerType: 'hls.js',// 請求m3u8接口的文件地址src: 'https://examplebucket-1250000000.cos.ap-beijing.myqcloud.com/hls/video.m3u8?ci-process=pm3u8',// 標記src里的域名是不是CDN域名(false/true)// useCdn: false,// 請求token和簽名的函數getToken(opt, callback) {// 加密公鑰,不需要用戶填寫,sdk會自動生成var publicKey = opt.publicKey;// 請求m3u8接口的文件地址,不需要用戶填寫,sdk會自動生成var src = opt.src;// 是否返回加密內容,與cosHls對象的ProtectContentKey參數保持一致,不需要用戶填寫,sdk會自動生成var protectContentKey = opt.ProtectContentKey;// 新建xhr對象,進行請求var xhr = new XMLHttpRequest();xhr.withCredentials = true;// /samples/hls/token為自定義請求地址,用戶可自自定義xhr.open('POST', `/hls/token`, true);xhr.setRequestHeader('Content-Type', 'application/json')// 請求成功返回authorization 和 tokenxhr.onload = function () {var r = JSON.parse(xhr.responseText);var authorization = r.authorizationvar token = r.tokencallback(null, {authorization, token});};xhr.onerror = function () {callback('get token error');};// node服務所需要的參數,已從sdk獲取,不需要用戶填寫var data = {src: src,publicKey: window.btoa(publicKey),protectContentKey: protectContentKey};xhr.send(JSON.stringify(data));}})
</script>
四、服務端部分

服務端,以 Nodejs 為例,主要代碼如下:


const COS = require('cos-nodejs-sdk-v5');
const base64Url = require('base64-url');
const express = require('express');
const crypto = require('crypto');// 配置參數
const config = {// 獲取騰訊云密鑰,建議使用限定權限的子用戶的密鑰 https://console.cloud.tencent.com/cam/capisecretId: process.env.SecretId,secretKey: process.env.SecretKey,// 播放秘鑰,可在媒體處理模塊獲取 https://console.cloud.tencent.com/cos/bucket?bucket=xxxx-100000&region=ap-xxx&type=ci&anchorType=videoplayKey: process.env.playKey,// 目標存儲桶名稱,可在存儲桶列表頁獲取 https://console.cloud.tencent.com/cos/bucketbucket: 'xxx',// 目標存儲桶地域,可在存儲桶列表頁獲取 https://console.cloud.tencent.com/cos/bucketregion: 'xxx'
};// 創建臨時密鑰服務和用于調試的靜態服務
const app = express();app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));router.post('/hls/token', (req, res, next) => {// 從接口拿到文件地址,加密公鑰,是否返回加密內容const body = req.body;const src = body.src;const publicKey = body.publicKey;const protectContentKey = body.protectContentKey;// 如在某些特殊場景需要用HLS標準加密(例如小程序里播放/iOSWebview),可以去掉下面的限制判斷并做好來源限制只允許小程序來源。// 代碼示例只允許 protectContentKey 傳 1,原因:如果允許傳入 0 播放流程會走 HLS 標準加密會有風險。const userAgent = req.headers['user-agent'] || '';const uaWhiteList = ['Safari', 'wechatdevtools', 'MiniProgramEnv'];const isUaAllow = uaWhiteList.some(item => userAgent.includes(item));// 只有白名單的瀏覽器,才能走標準加密if (!protectContentKey && !isUaAllow) {res.status(400);return res.send({code: -1, message: 'protectContentKey=0 not allowed'});}// src 鏈接校驗if (!src || !srcReg.test(src)) return res.send({code: -1, message: 'src format error'});if (!publicKey) return res.send({code: -1, message: 'publicKey empty'});// 解析 urlconst { bucket, region } = config;const { token, authorization } = getToken({publicKey, protectContentKey, bucket, region, src}, res)res.send({code: 0, message: 'ok', token, authorization});
});const srcReg = /^https?:\/\/([^/]+)\/([^?]+)/;
const ciHostReg = /^[^.]+\.ci\.[^.]+\.myqcloud\.com$/;function getToken({publicKey, protectContentKey, bucket, region, src}) {const m = src.match(srcReg);const srcHost = m[1];const pathKey = m[2];const query = {};const isCiHost = ciHostReg.test(srcHost);src.replace(/^([^?]+)(\?([^#]+))?(#.*)?$/, '$3').split('&').forEach(item => {const index = item.indexOf('=');const key = index > -1 ? item.slice(0, index) : item;let val = index > -1 ? item.slice(index + 1) : '';query[key] = decodeURIComponent(val);});let objectKey = isCiHost ? query.object : pathKey;const header = {"alg": "HS256","typ": "JWT"}const appId = bucket.slice(bucket.lastIndexOf('-') + 1);let payload = {Type: "CosCiToken",AppId: appId,BucketId: bucket,Issuer: "client",IssuedTimeStamp: Math.floor((new Date().getTime() - 30 * 1000) / 1000),ProtectSchema: "rsa1024",PublicKey: publicKey,ProtectContentKey: protectContentKey || 0,UsageLimit: 50,Object: objectKey,};let Header = base64Url.encode(JSON.stringify(header))let PayLoad = base64Url.encode(JSON.stringify(payload))let data = Header + "." + PayLoadlet hash = crypto.createHmac('sha256', config.playKey).update(data).digest();let Signature = base64Url.encode(hash);let token = Header + '.' + PayLoad + '.' + Signaturelet authorization = COS.getAuthorization({SecretId: config.secretId,SecretKey: config.secretKey,Method: 'get',Pathname: `/${objectKey}`,Query: {'ci-process': 'pm3u8'},});return {token, authorization};
}

五、效果體驗

完成前后端的代碼后,啟動服務,即可開始播放加密視頻。

圖片

在線體驗地址:?

https://cos.cloud.tencent.com/samples/hls/private-encrypt/

方案接入優勢

  • 接入簡單:支持多個開源通用播放器,定制化能力強。

  • 支持場景豐富:PC Web、Android WebView,Android/iOS移動端App

  • 不兼容的場景自動降級:因為 iOS Webview 不兼容 Media Source Extensions,會自動降級為標準加密方案。減少開發兼容成本。

總結

數據萬象媒體處理新增視頻加密,旨在讓用戶能夠更加方便地使用視頻加密功能,提高用戶體驗。同時,我們也會繼續關注用戶的反饋,不斷優化和改進數據萬象媒體處理的用戶體驗,為用戶提供更好的服務。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15068.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15068.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15068.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

測試短信推薦參考

短信測試參考 國外&#xff1a; smstome 支持多個國家號碼 官網地址&#xff1a; https://smstome.com/ quackr.io 支持多個國家號碼 官網地址&#xff1a; https://quackr.io/ receive-smss 支持多個國家號碼 地址&#xff1a; https://receive-smss.com/ receive-sms-fr…

C#字典的常用方法

C#的字典&#xff08;Dictionary&#xff09;類是一個通用的集合類&#xff0c;它實現了鍵值對的存儲和訪問。以下是一些常用的字典方法&#xff1a; Add(key, value)&#xff1a;向字典中添加一個指定的鍵值對。Remove(key)&#xff1a;從字典中移除具有指定鍵的元素。Contai…

LLM大模型的7種推理框架分析

LLM的7種推理框架 Hugging Face的transformers 這是一個Python庫&#xff0c;可以簡化本地運行LLM的過程。 Transformers的優點&#xff1a; 自動模型下載提供代碼片段非常適合實驗和學習 Transformers的缺點&#xff1a; 需要對ML和NLP有深入了解需要編碼和配置技能 2.L…

深度學習之基于Tensorflow低光增強的深層Retinex分解

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 在圖像處理領域&#xff0c;低光照環境下的圖像增強是一個具有挑戰性的問題。為了提高圖像的可…

紐曼新品X1000:輕巧便攜僅重9.9公斤的1度電應急電源

在戶外救援行動和應急設備中&#xff0c;電力供應的穩定性和安全性直接影響到救援工作的效率和成功率。在現代救援工作中&#xff0c;常見的光學聲波探測儀、通信聯絡設備、氣象檢測儀、生命探測儀、照明設備等裝備均需有持續的電力供應&#xff0c;才能保障救援工作的有序開展…

西門子WINCC8.0VBS腳本學習講解

WinCC VBS腳本置位/復位/取反 二進制變量 "TAG1_BOOL1" 進行置位復位取反操作 步驟&#xff1a;按鈕-->對象屬性-->事件-->單擊鼠標VBS動作填入代碼如下: 對二進制變量進行復位 對二進制變量進行置位 對二進制變量進行取反 VBS腳本數學運算/讀寫批處理 …

第十六講:數據在內存中的存儲

第十六講&#xff1a;數據在內存中的存儲 1.整數在內存中的存儲1.1存儲方式1.2大小端字節序1.3大小端字節序排序規則1.4為什么要有大小端1.5練習1.5.1練習11.5.2練習21.5.3練習31.5.4練習41.5.5練習51.5.6練習61.5.7練習7 2.浮點數在內存中的存儲2.1練習2.2浮點數的存儲2.3浮點…

如何將數據從一部手機傳輸到另一部手機[安全快速]

概括 手機之間無需使用藍牙即可傳輸文件&#xff0c;配合專業的文件傳輸工具更高效。本文將向您介紹幾種使用不同的數據傳輸工具快速安全地將數據從一部手機傳輸到另一部手機的方法&#xff0c;特別是當有大文件或大量文件時。現在&#xff0c;我們來看看。 需要在朋友或家人之…

Rust 賦能前端 -- 寫一個 File 轉 Img 的功能

所有耀眼的成績,都需要苦熬,熬得過,出眾;熬不過,出局 大家好,我是柒八九。一個專注于前端開發技術/Rust及AI應用知識分享的Coder 此篇文章所涉及到的技術有 Rustwasm-bindgen/js-sys/web-sysWeb WorkerWebAssemblyWebpack/Vite配置WebAssemblyOffscreenCanvas腳手架生成項…

校園二手書交易|基于SprinBoot+vue的校園二手書交易管理系統(源碼+數據庫+文檔)

校園二手書交易管理系統 目錄 基于SprinBootvue的校園二手書交易管理系統 一、前言 二、系統設計 三、系統功能設計 1系統功能模塊 2管理員功能模塊 3 賣家用戶功能模塊 4 用戶功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八…

Linux:iptables防火墻部署優化之連接轉移(目的地地址轉化)

Linux&#xff1a;iptables防火墻部署優化之連接轉移&#xff08;目的地地址轉化&#xff09; 文章目錄 Linux&#xff1a;iptables防火墻部署優化之連接轉移&#xff08;目的地地址轉化&#xff09;node1操作檢測ip情況關閉firewalld防火墻服務&#xff0c;并鎖定該服務開啟ip…

什么是分布式會話

分布式會話是指在分布式系統中實現用戶會話管理的一種機制。在傳統的單服務器架構中&#xff0c;用戶的會話數據通常存儲在單個服務器或應用服務器的內存中。然而&#xff0c;隨著業務的發展和用戶量的增加&#xff0c;單服務器架構往往無法滿足高可用性和高并發的需求&#xf…

Minio WebUploader上傳文件的高級用法之進度條顯示、文件過濾、圖片預覽、圖片壓縮

系列文章目錄 第十章 Minio WebUploader上傳文件的高級用法之進度條顯示、文件過濾、圖片預覽、圖片壓縮 Minio WebUploader上傳文件的高級用法之進度條顯示、文件過濾、圖片預覽、圖片壓縮 系列文章目錄進度條顯示文件過濾圖片預覽圖片壓縮 進度條顯示 使用進程文件上傳時&a…

基于springboot+html的二手交易平臺(附源碼)

基于springboothtml的二手交易平臺 介紹部分界面截圖如下聯系我 介紹 本系統是基于springboothtml的二手交易平臺&#xff0c;數據庫為mysql&#xff0c;可用于畢設或學習&#xff0c;附數據庫 部分界面截圖如下 聯系我 VX&#xff1a;Zzllh_

java Iterable和 Iterator接口區別和聯系

Iterable 和 Iterator 是 Java 集合框架中用于遍歷集合元素的兩個接口,它們之間既有區別也有聯系。下面詳細介紹它們的區別和聯系。 Iterable 接口 定義 Iterable 接口位于 java.lang 包中,定義如下: public interface Iterable<T> {Iterator<T> iterator()…

在家庭影院音頻中應用的D類音頻放大器

家庭影院的主要組成部分包括顯示設備、音響設備、信號源和接線設備等。家庭影院的音響信號需要進行處理和輸出&#xff0c;以獲得高質量的音效。音響設備通常需要一臺功率適當的數字、模擬混合的處理器&#xff0c;對音源進行降噪、均衡、擴展等處理操作&#xff0c;以達到高品…

核心交換機與終端通信正常,接入交換機無法Ping通同一VLAN內終端

環境: 思科3560交換機 問題描述: 核心交換機與PC通信正常,接入交換機無法Ping通同一VLAN內PC h3c核心交換機配置vlan2 vlanif2 IP192.168.1.1 下掛接入交換機配置了vlan2 pc接到接入交換機25口這個端口配置access vlan2,pc的ip是192.168.1.3從 核心交換機上ping192.168.…

【智能算法應用】北方蒼鷹算法求解二維柵格路徑規劃問題

目錄 1.算法原理2.二維路徑規劃數學模型3.結果展示4.參考文獻5.代碼獲取 1.算法原理 【智能算法】北方蒼鷹優化算法&#xff08;NGO)原理及實現 2.二維路徑規劃數學模型 柵格法模型最早由 W.E. Howden 于 1968 年提出&#xff0c;障礙物的柵格用黑色表示&#xff0c;可通過的…

ping 探測網段哪些地址被用

#!/bin/bash# 遍歷192.168.3.1到192.168.3.254 for i in {1..254} doip"192.168.3.$i"# 對每個IP地址進行三次ping操作if ping -c 3 -W 1 $ip > /dev/null 2>&1thenecho "$ip: yes"fi done$ sh test.sh 192.168.3.1: yes 192.168.3.95: yes 192.…

使用Word表格數據快速創建圖表

實例需求&#xff1a;Word的表格如下所示&#xff0c;標題行有合并單元格。 現在需要根據上述表格數據&#xff0c;在Word中創建如下柱圖。如果數據在Excel之中&#xff0c;那么創建這個圖并不復雜&#xff0c;但是Word中就沒用那么簡單了&#xff0c;雖然Word中可以插入圖表&a…