HLS双重防盗链对接教程

使用该防盗链之前,必须开启TS加密功能,否则会导致M3U8验证出问题,最好刚安装的时候,就开启TS加密。

对接之前请先了解下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选择LowDebug 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;
  }

这里主要争对拥有最大市场的QQUC夸克微信做跳转,判断后,会跳转到站点根目录的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,找到专属标识英文,自行添加到配置文件中即可。