FreeEx
2023-07-12 19:33:51 +08:00
看了一下源码,播放的并不是视频,而是一个类似 GIF 的东西。因为后缀是 mp4 的时候调用的是 remove ,反之将 canvas 传入了一个对象中。
让 AI 反混淆后的源码如下:
```
function getPlayer(element, container, options, autoplay = false, placeholder, startTime) {
return new Promise(resolve => {
let compatibilityLevel;
const canvas = container.querySelector('canvas');
const img = container.querySelector('img');
const video = container.querySelector('video');
if (!this.isSupported || placeholder || (compatibilityLevel = this.app.plgs.fps?.compatLevel) > 0) {
// 如果不支持或需要占位图,则删除 video 和 canvas 元素
canvas.remove();
video?.remove();
resolve(new Player(null));
return;
}
Promise.all([
new Promise(resolve => {
// 检查兼容性
const level = this.app.plgs.fps?.compatLevel;
if (level === undefined) {
resolve(0);
} else if (level > -1) {
resolve(level);
}
// 监听兼容性变化
window.addEventListener(COMPAT_EVENT, ({detail: {level}}) => {
resolve(level);
});
}),
new Promise(resolve => this.onReady(() => resolve()))
]).then(() => {
let src = this.app.isPc() ? element.dataSrcPc : element.dataSrcMo || element.dataSrc;
if (this.app.isPad() && element.dataSrcPad) {
src = element.dataSrcPad;
}
if (!src) {
throw new Error('Video source not specified');
}
if (src.endsWith('mp4')) {
// MP4 视频
if (条件 1 && 条件 2) {
// 不支持,删除元素
canvas.remove();
video?.remove();
resolve(new Player(null));
return;
}
// 删除图片占位符
img.remove();
// 初始化视频
resolve(new Player(video));
video && this.initVideoWithOptions(video, container, src, options);
return;
} else {
// GIF animation
video?.remove();
const player = new GifPlayer(src, this.manager, canvas, options);
if (!autoplay && !startTime) {
// 显示占位图像
img.remove();
} else if (autoplay) {
// 自动播放时删除占位图
player.onFirstFrame(() => {
img.remove();
});
} else if (startTime) {
// 指定 startTime 时删除占位图并 seek 到指定时间
img.remove();
player.seek(startTime);
}
this.players.push(player);
resolve(player);
}
});
});
}
```