视频加密技术是保护数字视频内容安全的重要手段,其核心目的是防止未经授权的访问、传播和篡改。今天介绍企业内部机密视频进行强加密的5种方法。
1、视频问答播放器
2、OVP视频防盗链
3、用户ID跑马灯
4、VRM视频分片错序加密
5、AI隐形溯源水印
1、视频问答播放器
视频问答播放器(也叫视频问答功能、视频弹题、视频问答功能)是一种互动的教学功能,在教育培训机构中,用的比较多。视频问答功能,主要是在视频播放过程中,弹出问题卡片,学员回复问题后,再继续播放,增强学员的参与度和学习效果。视频互动问答环节,观众必须正确回答问题才能继续观看。盗版者录制的问答界面是固定的,而正版平台每次生成的问答都是随机的。这种设计使得通过录屏方式盗版的视频无法正常播放。即便盗版者尝试剪辑掉问答部分,视频也会因频繁中断而严重影响观看流畅度。
视频问答播放器的代码调用示例
<!doctype html>
<html lang="cn" data-bs-theme="light">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="assets/plugins/simplebar/css/simplebar.css" rel="stylesheet">
<link href="assets/plugins/perfect-scrollbar/css/perfect-scrollbar.css" rel="stylesheet">
<link href="assets/plugins/metismenu/css/metisMenu.min.css" rel="stylesheet">
<link href="assets/css/pace.min.css" rel="stylesheet">
<script src="assets/js/pace.min.js"></script>
<link href="assets/css/bootstrap.min.css" rel="stylesheet">
<link href="assets/css/bootstrap-extended.css" rel="stylesheet">
<link href="assets/sass/app.css" rel="stylesheet">
<link href="assets/css/icons.css" rel="stylesheet">
<link rel="stylesheet" href="assets/sass/bordered-theme.css">
<title>问答播放器/视频弹题观看效果</title>
<meta name="Keywords" content="问答播放器/视频弹题观看效果,视频企业图标,防录屏,视频防盗录,视频防录屏" />
<meta name="Description" content="在线教育、在线培训、视频教学课程如何问答播放器/视频弹题观看效果?即不能点击进度条,提前观看内容;或拖动进度条到新的位置上播放,这个在教育培训的场景中,应用非常广。" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-okaidia.min.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/line-numbers/prism-line-numbers.min.css" rel="stylesheet" />
</head>
<body>
<!--wrapper-->
<div class="wrapper">
<!--sidebar/b-->
<div class="sidebar-wrapper" data-simplebar="true">
<div class="sidebar-header">
<div>
<img src="assets/images/logo-icon.png" class="logo-icon" alt="logo icon">
</div>
<div>
<h4 class="logo-text">H5Player</h4>
</div>
<div class="mobile-toggle-icon ms-auto"><i class='bx bx-x'></i>
</div>
</div>
<!--nav/b-->
<ul class="metismenu" id="menu">
<li>
<a href="javascript:;" class="has-arrow">
<div class="parent-icon"><i class="bx bx-category"></i>
</div>
<div class="menu-title">教育场景视频应用</div>
</a>
<ul> <li class="none"> <a href="index.php"><i class='bx bx-radio-circle'></i>H5多终端调用范例</a></li>
<li class="none"> <a href="vrm.php"><i class='bx bx-radio-circle'></i>VRM分片错序加密</a></li>
<li class="none"> <a href="userid.php"><i class='bx bx-radio-circle'></i>用户ID跑马灯 </a></li>
<li class="none"> <a href="random-watermark.php"><i class='bx bx-radio-circle'></i>数字化动态ID随机水印</a></li>
<li class="none"> <a href="ai-invisible-watermark.php"><i class='bx bx-radio-circle'></i>AI隐形溯源水印</a></li>
<li class="none"> <a href="no-screen-recording.php"><i class='bx bx-radio-circle'></i>浏览器防录屏</a></li>
<li class="none"> <a href="OVP.php"><i class='bx bx-radio-circle'></i>OVP视频防盗链</a></li>
<li class="none"> <a href="ats-https.php"><i class='bx bx-radio-circle'></i>ATS/HTTPS数据防篡改</a></li>
<li class="none"> <a href="watermark.php"><i class='bx bx-radio-circle'></i>视频水印/企业图标</a></li>
<li class="none"> <a href="no-seeking.php"><i class='bx bx-radio-circle'></i>禁止拖动视频进度条</a></li>
<li class="none"> <a href="multilingual-subtitles.php"><i class='bx bx-radio-circle'></i>智能字幕/自动生成字幕</a></li>
<li class="none"> <a href="continue-playing.php"><i class='bx bx-radio-circle'></i>视频自动续播</a></li>
<li class="none"> <a href="trial.php"><i class='bx bx-radio-circle'></i>片段试看/试听购买</a></li>
<!--li> <a href="collector.php"><i class='bx bx-radio-circle'></i>视频信息收集器</a></li-->
<li> <a href="qa-player.php"><i class='bx bx-radio-circle'></i>问答播放器/视频弹题</a></li>
<li> <a href="speed.php"><i class='bx bx-radio-circle'></i>倍速播放/多倍速观看</a></li>
<li> <a href="quality.php"><i class='bx bx-radio-circle'></i>多清晰度切换/画质切换</a></li>
<li> <a href="knowledge-list.php"><i class='bx bx-radio-circle'></i>知识清单/知识点提示</a></li>
<li> <a href="data-analysis.php"><i class='bx bx-radio-circle'></i>数据分析/数据司南</a></li>
<li> <a href="cn-en-player.php"><i class='bx bx-radio-circle'></i>中英文播放器</a></li>
<li> <a href="ai-course.php"><i class='bx bx-radio-circle'></i>AI智能制课</a></li>
<li> <a href="ai-outline.php"><i class='bx bx-radio-circle'></i>视频点播AI大纲</a></li>
<li> <a href="picture-in-picture.php"><i class='bx bx-radio-circle'></i>视频画中画(PC端)</a></li>
</ul>
</li>
<li>
<a href="faq.php">
<div class="parent-icon"><i class="bx bx-help-circle"></i>
</div>
<div class="menu-title">FAQ</div>
</a>
</li>
</ul> <!--nav/e-->
</div>
<!--sidebar/e -->
<!--header/b -->
<header>
<div class="topbar">
<nav class="navbar navbar-expand gap-2 align-items-center">
<div class="mobile-toggle-menu d-flex"><i class='bx bx-menu'></i>
</div>
<div class="top-menu ms-auto">
<ul class="navbar-nav align-items-center gap-1">
<li class="nav-item dark-mode d-none d-sm-flex">
</li>
</ul>
</div>
<div class="user-box dropdown px-3">
<a class="d-flex align-items-center nav-link " href="userlogin.php" role="button" >
<img src="assets/images/mypic_no.jpg" class="user-img" alt="userpic">
<div class="user-info">
<p class="user-name mb-0">USER</p>
<p class="designattion mb-0">LOGIN</p>
</div>
</a>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item d-flex align-items-center" href="userlogin.php"><i class="bx bx-user fs-5"></i><span>用户登录</span></a>
</li>
</ul>
</div>
</nav>
</div>
</header> <!--header/e -->
<!--mainpage/b -->
<div class="page-wrapper">
<div class="page-content">
<!--breadcrumb-->
<div class="page-breadcrumb d-none d-sm-flex align-items-center mb-3">
<div class="breadcrumb-title pe-3">Edu H5Player</div>
<div class="ps-3">
<nav aria-label="breadcrumb">
<ol class="breadcrumb mb-0 p-0">
<li class="breadcrumb-item"><a href="javascript:;"><i class="bx bx-home-alt"></i></a>
</li>
<li class="breadcrumb-item active" aria-current="page">Demo</li>
</ol>
</nav>
</div>
</div>
<!--end breadcrumb-->
<div class="row">
<div class="col-12 col-lg-9 mx-auto">
<div class="text-center">
<div id="player"></div>
</div>
<div class="text-center">
<hr />
<h5 class="mb-0">Edu Html5Player加密视频播放器</h5>
<hr />
</div>
</div>
<div class="col-12 col-lg-9 mx-auto">
<div class="table-responsive-lg w-lg-75 mx-lg-auto table-wrapper" >
<h5 class="mb-0 text-uppercase fw-bold lh-base mt-2"> 问答播放器/视频弹题功能</h5>
<div class="lh-base mt-2">视频播放器的视频问答功能(也叫问答播放器、视频弹题、视频问答功能)是一种互动的教学功能,在教育培训机构中,用的比较多。视频问答功能,主要是在视频播放过程中,弹出问题卡片,学员回复问题后,再继续播放,增强学员的参与度和学习效果。</div>
<div>
以下是该功能的一些主要特点:<br>
<strong>01.与培训视频内容的互动性:</strong> <br>
视频播放到特定时间点时,会弹出问题卡片,学员必须正确回答问题后才能继续观看视频;回答错误,则向前返回一小段视频,重新观看。<br>
<strong>02.学员离线防挂机:</strong> <br>
通过强制学员回答问题,有效避免学员挂机现象,确保学员积极认真的参与学习。<br>
<strong>03.课程内容防录屏、防盗录:</strong> <br>
问答功能可以降低盗版视频的观看体验,因为录屏后的视频无法正常播放。<br>
</div>
</div>
</div>
<div class="col-12 col-lg-9 mx-auto">
<div class="table-responsive-lg w-lg-75 mx-lg-auto table-wrapper" >
<hr />
<h5 class="mb-0 text-uppercase fw-bold lh-base mt-2">代码调用示例</h5>
<p class="lh-base mt-2">问答播放器。</p>
<div id="myContainer" style="position: relative; background-color: #f9f9f9; padding: 10px;height:300px;overflow: hidden;padding:0;margin:0;">
<pre class="line-numbers" style="padding:0;margin:0;padding-left:10px;"><code class="language-html" ><div id="player"></div>
<script src="//player.polyv.net/resp/vod-player/latest/player.js"></script>
<script>
var player = polyvPlayer({
wrap: '#player',
width: 800,
height: 533,
ban_seek:'on', //禁止拖动视频进度条(on,off)
//ban_seek_by_limit_time:'on', //是否禁止视频拖拽未播放区域(on,off)
vid: '88083abbf5bcf1356e05d39666be527a_8',
playsafe:'81814fed-bdd0-4506-bec1-ebc8093148c5-hfevwsfxcsbcocx',
//playsafeUrl:'https://myDomain.com/token',
ts:'1568131545000',
sign:'88313661ba7ded642c7b557b0a364b4b'
});
player.on('s2j_onPlayerInitOver',
function(e) {
var question1 = [{
"examId": "1699e49ffeb",
"question": "第1个问题:1 x 2 = ?",
"choices": [{
"answer": "1"
},
{
"answer": "2",
"right_answer": 1
},
{
"answer": "3"
},
{
"answer": "4"
}],
"answer": "",
"wrongAnswer": "",
"skip": true,
"wrongTime": 5,
"showTime": 10
}];
player.sendQuestion(question1);
});
window.onQuestionSkip = function(data, vid) {
console.log('onQuestionSkip', data, vid);
}
window.onQuestionPopUp = function(data, vid) {
console.log('onQuestionPopUp', data, vid);
}
window.onAnswerResult = function(isRight, data, msg, seekTime, vid) {
console.log('onAnswerResult',isRight, data, msg, seekTime, vid);
if (!isRight) {
var question2 = [{
"examId": "1699e49ffef",
"question": "第2个问题:2 x 2 = ?",
"choices": [{
"answer": "1"
},
{
"answer": "2"
},
{
"answer": "3"
},
{
"answer": "4",
"right_answer": 1
}],
"answer": "",
"wrongAnswer": "",
"skip": true,
"wrongTime": 5,
"showTime": 10
}];
player.changeQuestion(10, question2);
}
}
</script></code></pre></div>
</div>
</div>
<div class="col-12 col-lg-9 mx-auto">
<div class="table-responsive-lg w-lg-75 mx-lg-auto table-wrapper" >
<hr />
<h5 class="mb-0 text-uppercase fw-bold lh-base mt-2">问答播放器/视频弹题观看效果截图</h5>
<p class="lh-base mt-2">以下为问答播放器/视频弹题的效果截图:</p>
<div class="card">
<div class="card-body">
<img src="assets/images/qa-player-1-01.png" alt="问答播放器/视频弹题观看效果" width="100%">
</div>
</div>
<h6 class="mb-0 text-uppercase"><em>问答播放器/视频弹题的效果(正常播放视频画面)</em></h6>
<hr />
<div class="card">
<div class="card-body">
<img src="assets/images/qa-player-1-02.png" alt="问答播放器/视频弹题观看效果" width="100%">
</div>
</div>
<h6 class="mb-0 text-uppercase"><em>问答播放器/视频弹题的效果(由于设置视频问答弹题的时间点为第95秒,所以会在该指定时间点,弹出问题)</em></h6>
<div>(注:弹出题目的内容,通常是视频刚刚介绍过的内容,学员在学习之后,看到弹出的问题,再进行回答,以达到强化学习要点的要求。)</div>
<hr />
<div class="card">
<div class="card-body">
<img src="assets/images/qa-player-1-03.png" alt="问答播放器/视频弹题观看效果" width="100%">
</div>
</div>
<h6 class="mb-0 text-uppercase"><em>问答播放器/视频弹题的效果(学员回答错误,播放器弹出回答错误的提示)</em></h6>
<hr />
<div class="card">
<div class="card-body">
<img src="assets/images/qa-player-1-04.png" alt="问答播放器/视频弹题观看效果" width="100%">
</div>
</div>
<h6 class="mb-0 text-uppercase"><em>问答播放器/视频弹题的效果(学员回答正确时,弹出回答正确的提示,并继续播放视频。)</em></h6>
<hr />
</div>
</div>
</div>
<!--end row-->
</div>
</div>
<!--mainpage/e-->
<!--overlay/b-->
<div class="overlay toggle-icon"></div>
<!--overlay/e--->
<!--BackToTop/b--> <a href="javaScript:;" class="back-to-top"><i
class='bx bxs-up-arrow-alt'></i></a>
<!--BackToTop/e-->
<footer class="page-footer">
<p class="mb-0">教育培训场景视频加密与视频应用演示(DEMO)</p>
</footer> </div>
<!--wrapper/e-->
<!--js/b-->
<script src="assets/js/bootstrap.bundle.min.js"></script>
<script src="assets/js/jquery.min.js"></script>
<script src="assets/plugins/simplebar/js/simplebar.min.js"></script>
<script src="assets/plugins/metismenu/js/metisMenu.min.js"></script>
<script src="assets/plugins/perfect-scrollbar/js/perfect-scrollbar.js"></script>
<script src="assets/js/app.js"></script>
<!--script src="//player.polyv.net/resp/vod-player/latest/player.js"></script-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/line-numbers/prism-line-numbers.min.js"></script>
<script src='//player.polyv.net/resp/vod-player-drm/canary/player.js'></script>
<script>
var pdiv = document.getElementById("player");
var w = pdiv.offsetWidth; // 返回元素的总宽度
var h = pdiv.offsetWidth*0.5625; // 返回元素的总高度
var player = polyvPlayer({
wrap: '#player',
width: '100%',
height: h, df: 3, autoplay: 'true', ban_record_interaction_right_answer:'on',
vid: 'ef03a1d2e56b28e98489335286137b0f_e',
playsafe:'0d800fac-dea3-49e6-b0c8-bf68b216afbd-0UIDaTONYa2028',
ts:'1752662035000',
sign:'ec4f59a6bca46c9be3300dbf38447941'
});
// 获取需要应用 perfect-scrollbar 的容器元素
const container = document.getElementById('myContainer');
// 初始化 perfect-scrollbar
// 您可以传入一个选项对象作为第二个参数来配置滚动条的行为
const ps = new PerfectScrollbar(container, {
wheelSpeed: 1, // 鼠标滚轮滚动速度
wheelPropagation: true, // 当滚动到达末端时,是否将滚轮事件传播到父元素
minScrollbarLength: 20, // 最小滚动条长度(像素)
maxScrollbarLength: null, // 最大滚动条长度(像素)
});
// 当容器或内容大小发生变化时,需要调用 update() 方法来更新滚动条
// 例如,在内容加载完成后或窗口大小调整时
window.addEventListener('resize', () => {
ps.update();
});
// 示例:动态添加内容并更新滚动条
setTimeout(() => {
const contentDiv = container.querySelector('.content');
const newParagraph = document.createElement('p');
newParagraph.textContent = "这是延迟加载的新内容,滚动条应更新。";
contentDiv.appendChild(newParagraph);
ps.update(); // 内容改变后调用 update
}, 3000);
// 示例:销毁滚动条
// setTimeout(() => {
// ps.destroy();
// console.log('Perfect Scrollbar 已销毁。');
// }, 10000);
</script>
<!--js/e-->
</body>
</html>
2、OVP视频防盗链
业界领先的OVP技术,设置视频只允许某些域名下才能正常播放,其他域名不能播放。打开视频则会提示:“ 当前视频无法播放,请向管理员反馈 #006 ”或“ 该站点未被授权播放该视频 ”。 通过保利威OVP防盗链技术可以实现指定授权特定域名网站播放,俗称域名黑白名单。设置网站A白名单,则只允许视频在A网站下播放;设置网站B黑名单,则禁止视频在B网站下播放,可有效防止用户原创视频资源被非法盗用。
OVP视频防盗链”无法播放“的效果示例图
3、用户ID跑马灯
用户ID跑马灯是指,通过接口配置获取观看者信息,将观看者信息随机显示于视频播放界面(可自定义位置、时间、时长及颜色等),在不影响观看体验的同时,让视频具备指纹信息。在教育视频播放时,可以将将学员录入的信息(账号、用户名、手机号后几位)显示在视频视频播放页面。视频资源若被泄露,可根据录入的信息追根溯源。
用户ID跑马灯功能效果图
4、VRM视频分片错序加密
VRM视频分片错序加密是一种视频内容保护技术,采用分布式编码技术,将视频文件进行物理切片,对碎片逐一进行混淆式加密,包括AES128加密、XOR加密、关键帧错序,每片视频进行多种算法混合型加密,同时结合独立研制密码本,将关键数据进行错序混淆,对视频文件进行最高级别加密。这样经过加密的课程视频内容即使被下载,也无法进行恶意的二次分发,视频破解难度倍增。
5、AI隐形溯源水印
AI隐形溯源水印是一项结合人工智能与数字水印技术的版权保护方案。通过在视频中嵌入人眼不可见的隐形水印,实现防盗录盗播、全链路版权保护和实时溯源功能。嵌入隐形水印,不影响观看体验,但能有效追踪盗录行为。