HLS双重防盗链对接教程
对接之前请先了解下HLS双重防盗链
的原理及设置 ⇒ 传送门,目前提供2
种方案:
1、绑定域名+绑定防盗链Key,绑定域名后,只有该域名能使用专用的hls.js文件,不经常换域名的可以使用该方案。
2、不绑定域名+绑定防盗链Key,经常换域名的可以使用该方案。
根据自身需求选择合适的方案即可。
获取HLS解密代码
先点击EFV
后台左侧 ⇒ 转码相关 ⇒ 防盗链/图片加密设置,设置HLS双重防盗链KEY
,如efvtoken
,然后根据要求自己编辑相关代码。
绑定域名代码
"use strict";
r.d(t, "a", (function() {
return s
})),
r.d(t, "b", (function() {
return o
}));
var i = r(7),
a = "efv", //HLS双重防盗链key值前半部分
n = "token"; //HLS双重防盗链key值后半部分
function s(e) {
if ("" === e || null == e) return "";
var t = i.enc.Utf8.parse("efvtoken"); //HLS双重防盗链key值
return "string" != typeof e && (e = e.toString()),
i.DES.decrypt({
ciphertext: i.enc.Base64.parse(e)
},
t, {
mode: i.mode.ECB,
padding: i.pad.Pkcs7
}).toString(i.enc.Utf8)
}
function o(e) {
if ("" === e || null == e) return "";
var chars = '4950554648464846495852484848';
var hosts = location.host;
var encodestring = '';
if(hosts != 'play.efvcms.com') { //绑定域名,不需要http的头,直接填域名就可以了
throw new URIError('绑定域名错误!');
}
var t = a + n;
t = t.substr(0, 4) + t;
var r = i.enc.Utf8.parse(t);
return "string" != typeof e && (e = e.toString()),
i.DES.decrypt({
ciphertext: i.enc.Base64.parse(e)
},
r, {
mode: i.mode.ECB,
padding: i.pad.Pkcs7
}).toString(i.enc.Utf8)
}
不绑定域名代码
"use strict";
r.d(t, "a", (function() {
return s
})),
r.d(t, "b", (function() {
return o
}));
var i = r(7),
a = "efv", //HLS双重防盗链key值前半部分
n = "token"; //HLS双重防盗链key值后半部分
function s(e) {
if ("" === e || null == e) return "";
var t = i.enc.Utf8.parse("efvtoken"); //HLS双重防盗链key值
return "string" != typeof e && (e = e.toString()),
i.DES.decrypt({
ciphertext: i.enc.Base64.parse(e)
},
t, {
mode: i.mode.ECB,
padding: i.pad.Pkcs7
}).toString(i.enc.Utf8)
}
function o(e) {
if ("" === e || null == e) return "";
var chars = '4950554648464846495852484848';
var encodestring = '';
var t = a + n;
t = t.substr(0, 4) + t;
var r = i.enc.Utf8.parse(t);
return "string" != typeof e && (e = e.toString()),
i.DES.decrypt({
ciphertext: i.enc.Base64.parse(e)
},
r, {
mode: i.mode.ECB,
padding: i.pad.Pkcs7
}).toString(i.enc.Utf8)
}
加密HLS解密代码
先前往JS
加密网站 ⇒ 传送门,再调整加密选项,Options Preset
选择Low
,Debug Protection
打上勾,也就是禁止浏览器调试,其它全部默认即可。
再将上面修改好的解密代码复制到该网站进行加密,会获取类似var _0x487f6e=
开头的一串加密代码,然后下载hls.js
文件 ⇒ 传送门。
再编辑里面的hls.js
文件,修改如下:
#搜索hls-anti-start关键词,然后将上面获取到的加密代码丢到中间
function(e, t, r) {
//hls-anti-start
var _0x487f6e=_0x1ec8;(function(_0x1fbff6,_0x8647ea)...
//hls-anti-end
},
这时候我们就获取了加密解密代码的完整hls.js
文件,接下来还需要压缩一下该js
文件。
压缩HLS.JS文件
这里使用google
的压缩网站 ⇒ 传送门,如果你访问不了,可以自己找下其它JS
压缩网站,自行压缩。
最终我们获取到了压缩并加密后的完整hls.js
文件。
使用HLS.JS文件
测试HLS.JS文件
使用之前我们先测试一下hls.js
文件,这里提供一个Dplayer
单页面html
文件 ⇒ 传送门,将hls.js
放到解压后的dplayer
文件夹,再修改dplayer.html
文件,编辑一下里面的m3u8
地址为你自己的。
如果你的hls.js
文件没有绑定域名,则直接在本地电脑使用Google Chrome
浏览器双击打开dplayer.html
文件就可以测试播放了。
如果你的hls.js
文件绑定了域名,就需要将整个dplayer
文件夹传到你绑定域名的根目录,然后直接访问/dplayer/dplayer.html
路径就可以播放了。
使用HLS.JS文件
我们测试没问题后,再去自己的网站,找到网站播放器用的hls.js
文件或hls.min.js
文件,然后将解密的替换hls.js
文件替换进去即可,如果是hls.min.js
文件还需要改名覆盖。
特别提示
要想完整使用该功能,需要屏蔽下国产浏览器,这里推荐一个简单的判断国产手机浏览器方法,并引导他们使用谷歌等手机浏览器打开播放。
就是通过Nginx
判断UA
跳转到指定页面,在前端站点的域名配置文件中添加以下代码:
if ($http_user_agent ~* "UCBrowser|MQQBrowser|Quark|MicroMessenger") {
rewrite ^/(.*) /tips.html break;
}
这里主要争对拥有最大市场的QQ
、UC
、夸克
、微信
做跳转,判断后,会跳转到站点根目录的tips.html
提示页面。
不会自己写提示页面的,这里提供一个参考,在站点根目录新建一个tips.html
文件,内容如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>特别提示!</title>
<style>
.container {
width: 60%;
margin: 10% auto 0;
background-color: #f0f0f0;
padding: 2% 5%;
border-radius: 10px
}
ul {
padding-left: 20px;
}
ul li {
line-height: 2.3
}
a {
color: #20a53a
}
</style>
</head>
<body>
<div class="container">
<h3>本站已禁止在该手机浏览器上打开。</h3>
<ul>
<li>建议使用谷歌手机浏览器打开本站点,可让您得到最佳体验。</li>
<li>谷歌手机浏览器:<a href="https://www.efvcms.com/" target="_blank">点击下载</a></li>
</ul>
</div>
</body>
</html>
提示内容请自行更改,浏览器下载地址自行替换。
当然还有部分可以劫持播放器的手机浏览器没列举,不懂的可以百度/谷歌下你要添加的手机浏览器UA
,找到专属标识英文,自行添加到配置文件中即可。