mirror of
https://github.com/lyz05/danmaku.git
synced 2026-02-02 17:59:53 +08:00
72 lines
2.5 KiB
JavaScript
72 lines
2.5 KiB
JavaScript
import { filesize } from "filesize";
|
||
|
||
export default class BaseSource {
|
||
// 构造函数,初始化通用配置
|
||
constructor() {
|
||
this.name = "";
|
||
this.domain = "";
|
||
this.example_urls = [];
|
||
}
|
||
|
||
content_template = {
|
||
timepoint: 0, // 弹幕发送时间(秒)
|
||
ct: 1, // 弹幕类型,1-3 为滚动弹幕、4 为底部、5 为顶端、6 为逆向、7 为精确、8 为高级
|
||
size: 25, //字体大小,25 为中,18 为小
|
||
color: 16777215, //弹幕颜色,RGB 颜色转为十进制后的值,16777215 为白色
|
||
unixtime: Math.floor(Date.now() / 1000), //Unix 时间戳格式
|
||
uid: 0, //发送人的 id
|
||
content: "",
|
||
}
|
||
|
||
time_to_second(time) {
|
||
const t = time.split(":");
|
||
let s = 0;
|
||
let m = 1;
|
||
while (t.length > 0) {
|
||
s += m * parseInt(t.pop(), 10);
|
||
m *= 60;
|
||
}
|
||
return s;
|
||
}
|
||
|
||
memory() {
|
||
const memoryUsage = process.memoryUsage();
|
||
console.log("memory", JSON.stringify({
|
||
rss: filesize(memoryUsage.rss),//RAM 中保存的进程占用的内存部分,包括代码本身、栈、堆。
|
||
heapTotal: filesize(memoryUsage.heapTotal),//堆中总共申请到的内存量。
|
||
heapUsed: filesize(memoryUsage.heapUsed),//堆中目前用到的内存量,判断内存泄漏我们主要以这个字段为准。
|
||
external: filesize(memoryUsage.external),// V8 引擎内部的 C++ 对象占用的内存。
|
||
}));
|
||
}
|
||
|
||
// 解析传入的视频网址,获取弹幕请求地址(Promise数组)
|
||
async resolve(url) {
|
||
throw new Error("Method 'resolve()' must be implemented.");
|
||
}
|
||
|
||
// 请求弹幕资源,返回标准化弹幕内容
|
||
async parse(datas) {
|
||
throw new Error("Method 'parse()' must be implemented.");
|
||
}
|
||
|
||
// 综合处理入口,返回最终弹幕内容
|
||
async work(url) {
|
||
const promises = await this.resolve(url);
|
||
if (!this.error_msg) {
|
||
console.log(this.name, "API lens:", promises.length);
|
||
this.memory(); //显示内存使用量
|
||
// 并发请求弹幕数据,等待所有请求完成。
|
||
let datas = (await Promise.allSettled(promises))
|
||
.filter(x => x.status === "fulfilled")
|
||
.map(x => x.value.data);
|
||
this.memory(); //显示内存使用量
|
||
this.content = await this.parse(datas);
|
||
}
|
||
return {
|
||
title: this.title,
|
||
content: this.content,
|
||
msg: this.error_msg? this.error_msg: "ok"
|
||
};
|
||
}
|
||
|
||
} |