廣州設(shè)計網(wǎng)站廣告軟文小故事800字
企業(yè)內(nèi)訓(xùn)課程、在線教育平臺付費課程加密防下載的10種方式:
實例演示:課程視頻-第1課狀語從句,VRM演示應(yīng)用
企業(yè)內(nèi)訓(xùn)課程、在線教育平臺付費課程,他們的這種視頻課程的加密是如何做的?整理了10種思路,供大家參考:
1.VRM分片錯序視頻加密
采用分布式編碼技術(shù),將視頻文件物理切片,每片視頻進(jìn)行多種算法混合型加密, 同時結(jié)合獨立研制密碼本,將關(guān)鍵數(shù)據(jù)進(jìn)行錯序混淆,對視頻文件進(jìn)行最高級別加密,這樣經(jīng)過加密的視頻內(nèi)容即使被下載,也無法進(jìn)行惡意的二次分發(fā),視頻破解難度倍增。
2.Html5全鏈路視頻加密
市面上常見的H5加密,采用標(biāo)準(zhǔn)的Apple HLS Encryption 視頻保護(hù)機(jī)制,我們在此基礎(chǔ)上進(jìn)行深度優(yōu)化,對密鑰key進(jìn)行深度加密,同時實現(xiàn)對視頻播放器與視頻數(shù)據(jù)文件雙重加密處理,形成端到端的全鏈路視頻安全防護(hù),即使視頻文件被盜用,其他應(yīng)用也無法播放,讓視頻更加安全。
?我們的加密調(diào)用方法示例:
<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({wrap: '#player',width: 800,height: 533,vid: '88083abbf5bcf1356e05d39666be527a_8', playsafe:'81814fed-bdd0-4506-bec1-ebc8093148c5-hfevwsfxcsbcocx', //playsafeUrl:'https://myDomain.com/token', // 業(yè)務(wù)方自定義的獲取播放憑證接口URL,與playsafe參數(shù)二選一ts:'1568131545000',sign:'88313661ba7ded642c7b557b0a364b4b'
});//切換加密視頻時,需要重新獲取播放憑證。如果初始化播放器時使用了playsafeUrl參數(shù),則播放器會自動獲取新的憑證,無需傳playsafe參數(shù)。
player.changeVid({vid: '88083abbf5bcf1356e05d39666be527a_9', //需要切換的視頻vidplaysafe: '81814fed-bdd0-4506-bec1-ebc8093148c6-hfevwsfxcsbcocx', //新獲取的playsafe tokensign: '88313661ba7ded642c7b557b0a364b4c', //新獲取的sign和ts參數(shù)ts: '1568131545001'
});
</script>
Web頁面播放加密視頻前,需要先訪問業(yè)務(wù)方自己的服務(wù)端授權(quán)驗證接口(可以在這里加上自有業(yè)務(wù)的授權(quán)驗證邏輯,例如是否登錄、是否購買課程等, 建議使用HTTPS)。如果業(yè)務(wù)上允許播放,則通? 過創(chuàng)建 Playsafe Token接 ?口獲取播放憑證(或者在服務(wù)端生成sign、ts參數(shù)),并返回給Web端播放器。
服務(wù)端生成播放憑證代碼示例:
// 接口中應(yīng)附帶自有業(yè)務(wù)的授權(quán)驗證邏輯,如判斷是否登錄、是否購買課程等// 以下為生成播放憑證的代碼示例
function get_client_ip() {if (!empty($_SERVER['HTTP_CLIENT_IP'])) {$ipaddress = $_SERVER['HTTP_CLIENT_IP'];} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];} else {$ipaddress = $_SERVER['REMOTE_ADDR'];}return $ipaddress;
}$userId = 'your userId'; // 保利威點播賬號的userId
$secretkey = 'your secretkey'; // 保利威點播賬號的secretkey
$videoId = '88083abbf5bcf1356e05d39666be527a_8'; // 視頻vid
$ts = time() * 1000; // 時間戳
$viewerIp = get_client_ip(); // 觀眾ip
$viewerId = '12345'; // 觀眾id
$viewerName = 'testUser'; // 觀眾昵稱, 若值為中文需要urlencode('張三')
$extraParams = 'HTML5'; // 自定義擴(kuò)展參數(shù)
$disposable = false // true 表示 token 僅一次有效。false 則表示在有效期內(nèi)可以多次驗證。默認(rèn)為 false。/* 將參數(shù) $userId、$secretkey、$videoId、$ts、$viewerIp、$viewerIp、$viewerId、$viewerName、$extraParams按照ASCKII升序 key + value + key + value ... +value 拼接
*/
$concated = 'extraParams'.$extraParams.'ts'.$ts.'userId'.$userId.'videoId'.$videoId.'viewerId'.$viewerId.'viewerIp'.$viewerIp.'viewerName'.$viewerName;
// 首尾加上secretkey值
$plain = $secretkey.$concated.$secretkey;
// 取大寫MD5
$sign = strtoupper(md5($plain));// 然后將下列參數(shù)用post請求 https://hls.videocc.net/service/v1/token 獲取 token
$url = 'https://hls.videocc.net/service/v1/token';
$data = array('userId' => $userId, 'videoId' => $videoId, 'ts' => $ts, 'viewerIp' => $viewerIp, 'viewerName' => $viewerName, 'extraParams' => $extraParams, 'viewerId' => $viewerId, 'sign' => $sign);
$options = array('http' => array('header' => "Content-type: application/x-www-form-urlencoded",'method' => 'POST','content' => http_build_query($data))
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);// 獲取接口返回結(jié)果中的token值, 并傳給播放器播放加密視頻
$token = json_decode($result)->data->token;
echo $token;
Java SpringMvc代碼:
@ResponseBody
@RequestMapping("/playerSafe")
public String playerSafe(HttpServletRequest request) {String userId = "your userId"; // 保利威點播賬號的userIdString secretkey = "your secretkey"; // 保利威點播賬號的secretkeyString videoId = "88083abbf5bcf1356e05d39666be527a_8"; // 視頻vidlong ts = System.currentTimeMillis(); // 時間戳String viewerIp = getClientIp(request); // 觀眾ipString viewerId = "12345"; // 觀眾idString viewerName = "testUser"; // 觀眾昵稱, 若值為中文需要urlencode('張三')String extraParams = "HTML5"; // 自定義擴(kuò)展參數(shù)boolean disposable = false; // true 表示 token 僅一次有效。false 則表示在有效期內(nèi)可以多次驗證。默認(rèn)為 false。/* 將參數(shù) userId、secretkey、videoId、ts、viewerIp、viewerIp、viewerId、viewerName、extraParams按照ASCKII升序 key + value + key + value ... +value 拼接*/String concated = "extraParams" + extraParams + "ts" + ts + "userId" + userId + "videoId" + videoId + "viewerId" + viewerId + "viewerIp" + viewerIp + "viewerName" + viewerName;// 首尾加上secretkey值String plain = secretkey + concated + secretkey;// 取大寫MD5,可自行選擇md5庫String sign = md5Hex(plain).toUpperCase();// 然后將下列參數(shù)用post請求 https://hls.videocc.net/service/v1/token 獲取 tokenString url = "https://hls.videocc.net/service/v1/token";Map<String, String> params = new HashMap<>();params.put("userId", userId);params.put("videoId", videoId);params.put("ts", String.valueOf(ts));params.put("viewerIp", viewerIp);params.put("viewerName", viewerName);params.put("extraParams", extraParams);params.put("viewerId", viewerId);params.put("sign", sign);// 可自行選擇http客戶端String response = HttpClientUtil.getInstance().sendHttpPost(url, params);try {//解析jsonObjectMapper objectMapper = new ObjectMapper();TokenResponse tokenResponse = objectMapper.readValue(response, TokenResponse.class);// 響應(yīng)代碼,200為成功,403為ts過期或簽名錯誤,400為參數(shù)錯誤(例如缺少 userId 或 videoId)if (tokenResponse.getCode() == 200) {Map data = (Map) tokenResponse.getData();return data.get("token").toString();}} catch (IOException e) {e.printStackTrace();}return "";
}
static class TokenResponse {int code;String status;String message;Object data;//省略getter、setter...
}
public String getClientIp(HttpServletRequest request) {String ip = request.getHeader("x-forwarded-for");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}return ip;
}
3.用戶ID跑馬燈
將用戶I的ID、電話號碼或其他信息內(nèi)容等設(shè)置在視頻上不規(guī)則跑動(作追溯盜版者用)。 ID跑馬燈功能,是指通過設(shè)定文字內(nèi)容(一般是觀眾的身份ID信息)在視頻上不規(guī)則滾動,以此來警示盜版者,達(dá)到視頻版權(quán)保護(hù)的效果,示例中是將用戶的ID和電話號碼顯示出來。
4.數(shù)字化動態(tài)水印
將用戶ID、電話號碼或其他信息內(nèi)容等以動態(tài)水印形式展現(xiàn)在視頻上,實現(xiàn)水印在視頻上不規(guī)則地顯現(xiàn),可追溯錄屏者身份,對翻錄行為起到強(qiáng)有力的震懾作用。
5.瀏覽器防錄屏
通過播放器實時監(jiān)測,如果檢測到視頻處于錄屏狀態(tài)或小窗待錄屏狀態(tài),視頻會立即停止播放,顯示報錯信息,視頻無法繼續(xù)播放。
6.視頻水印 (企業(yè)LOGO)
在視頻中添加企業(yè)專屬的視頻水印,從而讓視頻中融入企業(yè)的版權(quán)信息,防止盜錄者盜取版權(quán),保護(hù)公司的知識產(chǎn)權(quán)。視頻上傳后自動將企業(yè)的LOGO圖標(biāo)水印加在視頻右上角/右下角等位置上。
7.域名白名單?OVP防盜鏈
通過OVP防盜鏈技術(shù)實現(xiàn)指定網(wǎng)站播放,俗稱域名黑白名單。設(shè)置網(wǎng)站A白名單,則只允許視頻在A網(wǎng)站下播放;設(shè)置網(wǎng)站B黑名單,則禁止視頻在B網(wǎng)站下播放,可有效防止用戶原創(chuàng)視頻資源被非法盜用。
8.ATS/HTTPS數(shù)據(jù)防篡改
HTTPS協(xié)議,采用了HTTPS協(xié)議,其提供網(wǎng)站身份驗證與加密通訊方法,避免信息截韌“釣魚”攻擊,有效防止網(wǎng)頁被篡改,保證企業(yè)及學(xué)員間的信息 安全;ATS標(biāo)準(zhǔn),蘋果操作系統(tǒng)遵循ATS標(biāo)準(zhǔn),開啟ATS安全特性后,網(wǎng)絡(luò)傳輸自動通過HTTPS協(xié)議進(jìn)行傳輸,保證視頻播放安全。
9.播放器代碼混淆加密
播放器代碼加密,防反編譯、代碼混淆等方式。
10.禁止拖動視頻進(jìn)度條
html5播放器禁止拖拽功能實例(常用于場景:企業(yè)培訓(xùn)、在線教學(xué)內(nèi)容禁止學(xué)員拖動視頻進(jìn)行觀看)。
?我的文章推薦:
- [視頻+圖文] 線上研討會是什么,企業(yè)對內(nèi)對外培訓(xùn)可以用線上研討會嗎?
- [圖文] 企業(yè)直播對網(wǎng)絡(luò)帶寬有什么要求?
- [圖文]OBS如何實現(xiàn)毫秒級超低延時直播
- 直播播放器API(播放器調(diào)用方法、參數(shù)、接口和事件)
-
企業(yè)直播要如何做?硬件設(shè)備、網(wǎng)絡(luò)環(huán)境有哪些要求?