本文氢设计原创,此处仅作记录,爱奇艺Web端 k_ft1 算法(php,JS)
k_ft1参数是控制输出播放地址的形式,如MP4 ,M3U8地址,M3U8 ts内容,这个值其实是可以固定的,这里只是做个学习记录
之前也有写过一个 k_ft1 的算法,不过是比较旧的版本了,也可以看看。
https://www.h2sheji.com/art/156.html
下面是根据官方新写的
官方源JS
var Ta = i(86)
, Sa = i(103)
, xa = {
1: {
3: !0,
37: !1,
40: !0,
42: !0,
48: !0,
50: !0
},
2: {},
4: {
3: !1,
5: !1,
27: !0,
28: !1,
41: !1
},
5: {
1: !0
}
};
var Pa = {
getFT1: function() {
for (var e = [], t = 1; t <= 64; t++)
e.push(xa[1][t] ? 1 : 0);
return parseInt(e.reverse().join(""), 2)
},
getFT2: function() {
for (var e = [], t = 1; t <= 64; t++)
e.push(xa[2][t] ? 1 : 0);
return parseInt(e.reverse().join(""), 2)
},
getFT4: function() {
for (var e = [], t = 1; t <= 64; t++)
e.push(xa[4][t] ? 1 : 0);
return parseInt(e.reverse().join(""), 2)
},
getFT5: function() {
for (var e = [], t = 1; t <= 64; t++)
e.push(xa[5][t] ? 1 : 0);
return parseInt(e.reverse().join(""), 2)
},
getM3U8FT1: function() {
var e = [];
xa[1][37] = !0,
xa[1][38] = !0,
xa[1][50] = !0;
for (var t = 1; t <= 64; t++)
e.push(xa[1][t] ? 1 : 0);
return parseInt(e.reverse().join(""), 2)
},
getMP4FT1: function() {
var e = [];
xa[1][45] = !0,
xa[1][50] = !0;
for (var t = 1; t <= 64; t++)
e.push(xa[1][t] ? 1 : 0);
return parseInt(e.reverse().join(""), 2)
},
hasBit: function(e, t) {
return xa[e][t]
},
openBit: function(e, t) {
xa[e][t] = !0
},
closeBit: function(e, t) {
xa[e][t] = !1
}
};
PHP: