时间戳防盗链对接教程
对接之前请先了解下时间戳+播放次数防盗链
的原理及设置 ⇒ 传送门,目前M3U8
有2
种调用方法,如下:
1、使用自适应M3U8,格式为:/movie/auto/61f68205eeeec878ae3fe3d5.m3u8
2、使用具体分辨率的M3U8,如1080P,格式为:/videos/202201/31/61f68205eeeec878ae3fe3d5/217g7g/index.m3u8
可在视频管理复制M3U8
,或者通知接口
获取对应的链接,由于通知接口没直接推送自适应M3U8
,需要自行组装,组装格式为/movie/auto/ + 视频id + .m3u8
,且对自适应M3U8
还不了解的可看 ⇒ 传送门。
自适应M3U8对接步骤
首先点击EFV
后台左侧 ⇒ 转码相关 ⇒ 防盗链/图片加密设置,开启时间戳+播放次数防盗链
并设置KEY
值,且值为efvtoken
。
比如我想播放如下链接:
http://127.0.0.1:3000/movie/auto/61f68205eeeec878ae3fe3d5.m3u8
这个链接不需要域名及/movies
及后缀.m3u8
,只需要这个/auto
开始的部分链接,比如:
/auto/61f68205eeeec878ae3fe3d5
然后拼接字符串,拼接如下:
#拼接后的字符串
/auto/61f68205eeeec878ae3fe3d5&counts=2×tamp=1613982600000efvtoken
#拼接参数
counts为请求多少次就过期
timestamp为过期的13位时间戳+设置的key值,比如现在16:50:16,10分钟后过期,就是17:00:16,就把17:00:16转化为13位时间戳
接下来使用md5
加密该字符串,生成32
位小写,然后拿到这个32
位小写027e1575ff97deaad7cfe223b6cf6001
。
最后获取能播放的url
链接如下:
http://127.0.0.1:3000/movie/auto/61f68205eeeec878ae3fe3d5.m3u8?counts=2×tamp=1613982600000&key=027e1575ff97deaad7cfe223b6cf6001
注意最后的url
链接counts
和拼接的值一样;timestamp
只要时间戳,后面不需要加设置的KEY
值;key
值为拼接字符串md5
加密的值。
且拼接加密的时候counts
前面用的&
,而最后的url
链接counts
前面是?
,一定要区分清楚,不然对接会播放不了。
JS演示示例
const crypto = require('crypto');
function getKey(url, tokenKey) {
const nowstamp = Date.now();
const dutestamp = nowstamp * 1 + 60 * 1000 * 60;
const newurl = url.replace('/movie', '').replace('.m3u8', '');
const tokenurl = newurl + '&counts=' + 2 + '×tamp=' + dutestamp + tokenKey;
const md5 = crypto.createHash('md5');
const md5token = md5.update(tokenurl).digest('hex');
const outurl = '/movie' + newurl + '.m3u8' + '?counts=' + 2 + '×tamp=' + dutestamp + '&key=' + md5token;
console.log(outurl);
}
//2个参数为视频自适应M3U8链接和时间戳KEY值
getKey("/movie/auto/61f68205eeeec878ae3fe3d5.m3u8", "efvtoken");
分辨率M3U8对接步骤
首先点击EFV
后台左侧 ⇒ 转码相关 ⇒ 防盗链/图片加密设置,开启时间戳+播放次数防盗链
并设置KEY
值,且值为efvtoken
。
比如我想播放如下链接:
http://127.0.0.1:3000/videos/202201/31/61f68205eeeec878ae3fe3d5/217g7g/index.m3u8
这个链接不需要域名,只需要/videos
开头到m3u8
结尾的链接,比如:
/videos/202201/31/61f68205eeeec878ae3fe3d5/217g7g/index.m3u8
然后拼接字符串,拼接如下:
#拼接后的字符串
/videos/202201/31/61f68205eeeec878ae3fe3d5/217g7g/index.m3u8&counts=2×tamp=1613982600000efvtoken
#拼接参数
counts为请求多少次就过期
timestamp为过期的13位时间戳+设置的key值,比如现在16:50:16,10分钟后过期,就是17:00:16,就把17:00:16转化为13位时间戳
接下来使用md5
加密该字符串,生成32
位小写,然后拿到这个32
位小写027e1575ff97deaad7cfe223b6cf6001
。
最后获取能播放的url
链接如下:
http://127.0.0.1:3000/videos/202201/31/61f68205eeeec878ae3fe3d5/217g7g/index.m3u8?counts=2×tamp=1613982600000&key=027e1575ff97deaad7cfe223b6cf6001
注意最后的url
链接counts
和拼接的值一样;timestamp
只要时间戳,后面不需要加设置的KEY
值;key
值为拼接字符串md5
加密的值。
且拼接加密的时候counts
前面用的&
,而最后的url
链接counts
前面是?
,一定要区分清楚,不然对接会播放不了。
JS演示示例
const crypto = require('crypto');
function getKey(url, tokenKey) {
const nowstamp = Date.now();
const dutestamp = nowstamp * 1 + 60 * 1000 * 60;
const tokenurl = url + '&counts=' + 2 + '×tamp=' + dutestamp + tokenKey;
const md5 = crypto.createHash('md5');
const md5token = md5.update(tokenurl).digest('hex');
const outurl = url + '?counts=' + 2 + '×tamp=' + dutestamp + '&key=' + md5token;
console.log(outurl);
}
//2个参数为分辨率M3U8链接和时间戳KEY值
getKey("/videos/202201/31/61f68205eeeec878ae3fe3d5/217g7g/index.m3u8", "efvtoken");
相关提示
强烈建议切片开启TS
加密功能,可在转码设置
开启该功能,开启后切片的key
文件会自动加入到时间戳验证环节,从而时间戳会更有效。
且时间戳间隔可以尽量改短点,比如5s
、10s
,只需要让用户播放获取到m3u8
后几秒就失效,根据自己服务器网络读取速度决定。
counts
次数最少设置为2
,或者3
次,有些手机浏览器会替换播放器,导致需要多加载1
次,甚至2
次才能播放,自行调整即可。