@bililive-tools/manager 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -0
- package/lib/FFMPEGRecorder.d.ts +36 -0
- package/lib/FFMPEGRecorder.js +108 -0
- package/lib/api.d.ts +1 -1
- package/lib/api.js +11 -8
- package/lib/common.d.ts +3 -1
- package/lib/common.js +3 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +4 -5
- package/lib/manager.d.ts +9 -3
- package/lib/manager.js +37 -27
- package/lib/record_extra_data_controller.js +0 -1
- package/lib/recorder.d.ts +14 -1
- package/lib/recorder.js +0 -1
- package/lib/streamManager.d.ts +12 -13
- package/lib/streamManager.js +52 -44
- package/lib/utils.d.ts +13 -2
- package/lib/utils.js +26 -7
- package/package.json +11 -2
- package/lib/api.js.map +0 -1
- package/lib/common.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/manager.js.map +0 -1
- package/lib/record_extra_data_controller.js.map +0 -1
- package/lib/recorder.js.map +0 -1
- package/lib/streamManager.js.map +0 -1
- package/lib/utils.js.map +0 -1
package/README.md
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
# 安装
|
|
8
8
|
|
|
9
|
+
**建议所有录制器和manager包都升级到最新版,我不会对兼容性做过多考虑**
|
|
10
|
+
|
|
9
11
|
`npm i @bililive-tools/manager`
|
|
10
12
|
|
|
11
13
|
## 支持的平台
|
|
@@ -44,8 +46,46 @@ manager.addRecorder({
|
|
|
44
46
|
manager.startCheckLoop();
|
|
45
47
|
```
|
|
46
48
|
|
|
49
|
+
### 函数
|
|
50
|
+
|
|
51
|
+
### addRecorder
|
|
52
|
+
|
|
53
|
+
添加录制器,具体参数见各录制插件
|
|
54
|
+
|
|
55
|
+
### removeRecorder
|
|
56
|
+
|
|
57
|
+
移除录制器
|
|
58
|
+
|
|
59
|
+
### startCheckLoop
|
|
60
|
+
|
|
61
|
+
开启自动监听
|
|
62
|
+
|
|
63
|
+
### stopCheckLoop
|
|
64
|
+
|
|
65
|
+
停止自动监听
|
|
66
|
+
|
|
67
|
+
### startRecord
|
|
68
|
+
|
|
69
|
+
手动开启录制
|
|
70
|
+
|
|
71
|
+
### stopRecord
|
|
72
|
+
|
|
73
|
+
手动开启录制
|
|
74
|
+
|
|
75
|
+
### setFFMPEGPath
|
|
76
|
+
|
|
77
|
+
设置ffmpeg可执行路径
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
import { setFFMPEGPath } from "@bililive-tools/manager";
|
|
81
|
+
|
|
82
|
+
setFFMPEGPath("ffmpeg.exe");
|
|
83
|
+
```
|
|
84
|
+
|
|
47
85
|
## savePathRule 占位符参数
|
|
48
86
|
|
|
87
|
+
默认值为 `{platform}/{owner}/{year}-{month}-{date} {hour}-{min}-{sec} {title}`
|
|
88
|
+
|
|
49
89
|
| 值 | 标签 |
|
|
50
90
|
| ----------- | ------ |
|
|
51
91
|
| {platform} | 平台 |
|
|
@@ -86,6 +126,14 @@ manager.startCheckLoop();
|
|
|
86
126
|
|
|
87
127
|
录制文件结束
|
|
88
128
|
|
|
129
|
+
### RecorderProgress
|
|
130
|
+
|
|
131
|
+
ffmpeg录制相关数据
|
|
132
|
+
|
|
133
|
+
### RecoderLiveStart
|
|
134
|
+
|
|
135
|
+
直播开始,**并非录制开始,同一场直播不会重复触发**
|
|
136
|
+
|
|
89
137
|
# 协议
|
|
90
138
|
|
|
91
139
|
与原项目保存一致为 LGPL
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import EventEmitter from "node:events";
|
|
2
|
+
export declare class FFMPEGRecorder extends EventEmitter {
|
|
3
|
+
private onEnd;
|
|
4
|
+
private command;
|
|
5
|
+
private streamManager;
|
|
6
|
+
private timeoutChecker;
|
|
7
|
+
hasSegment: boolean;
|
|
8
|
+
getSavePath: (data: {
|
|
9
|
+
startTime: number;
|
|
10
|
+
}) => string;
|
|
11
|
+
segment: number;
|
|
12
|
+
ffmpegOutputOptions: string[];
|
|
13
|
+
inputOptions: string[];
|
|
14
|
+
isHls: boolean;
|
|
15
|
+
disableDanma: boolean;
|
|
16
|
+
url: string;
|
|
17
|
+
constructor(opts: {
|
|
18
|
+
url: string;
|
|
19
|
+
getSavePath: (data: {
|
|
20
|
+
startTime: number;
|
|
21
|
+
}) => string;
|
|
22
|
+
segment: number;
|
|
23
|
+
outputOptions: string[];
|
|
24
|
+
inputOptions?: string[];
|
|
25
|
+
isHls?: boolean;
|
|
26
|
+
disableDanma?: boolean;
|
|
27
|
+
}, onEnd: (...args: unknown[]) => void);
|
|
28
|
+
private createCommand;
|
|
29
|
+
formatLine(line: string): {
|
|
30
|
+
time: string | null;
|
|
31
|
+
} | null;
|
|
32
|
+
run(): void;
|
|
33
|
+
getArguments(): string[];
|
|
34
|
+
stop(): Promise<void>;
|
|
35
|
+
getExtraDataController(): import("./record_extra_data_controller.js").RecordExtraDataController | null;
|
|
36
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import EventEmitter from "node:events";
|
|
2
|
+
import { createFFMPEGBuilder, StreamManager, utils } from "./index.js";
|
|
3
|
+
import { createInvalidStreamChecker, assert } from "./utils.js";
|
|
4
|
+
export class FFMPEGRecorder extends EventEmitter {
|
|
5
|
+
onEnd;
|
|
6
|
+
command;
|
|
7
|
+
streamManager;
|
|
8
|
+
timeoutChecker;
|
|
9
|
+
hasSegment;
|
|
10
|
+
getSavePath;
|
|
11
|
+
segment;
|
|
12
|
+
ffmpegOutputOptions = [];
|
|
13
|
+
inputOptions = [];
|
|
14
|
+
isHls = false;
|
|
15
|
+
disableDanma = false;
|
|
16
|
+
url;
|
|
17
|
+
constructor(opts, onEnd) {
|
|
18
|
+
super();
|
|
19
|
+
this.onEnd = onEnd;
|
|
20
|
+
const hasSegment = !!opts.segment;
|
|
21
|
+
this.disableDanma = opts.disableDanma ?? false;
|
|
22
|
+
this.streamManager = new StreamManager(opts.getSavePath, hasSegment, this.disableDanma);
|
|
23
|
+
this.timeoutChecker = utils.createTimeoutChecker(() => this.onEnd("ffmpeg timeout"), 3 * 10e3);
|
|
24
|
+
this.hasSegment = hasSegment;
|
|
25
|
+
this.getSavePath = opts.getSavePath;
|
|
26
|
+
this.ffmpegOutputOptions = opts.outputOptions;
|
|
27
|
+
this.inputOptions = opts.inputOptions ?? [];
|
|
28
|
+
this.url = opts.url;
|
|
29
|
+
this.segment = opts.segment;
|
|
30
|
+
this.isHls = opts.isHls ?? false;
|
|
31
|
+
this.command = this.createCommand();
|
|
32
|
+
this.streamManager.on("videoFileCreated", ({ filename }) => {
|
|
33
|
+
this.emit("videoFileCreated", { filename });
|
|
34
|
+
});
|
|
35
|
+
this.streamManager.on("videoFileCompleted", ({ filename }) => {
|
|
36
|
+
this.emit("videoFileCompleted", { filename });
|
|
37
|
+
});
|
|
38
|
+
this.streamManager.on("DebugLog", (data) => {
|
|
39
|
+
this.emit("DebugLog", data);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
createCommand() {
|
|
43
|
+
const invalidCount = this.isHls ? 35 : 15;
|
|
44
|
+
const isInvalidStream = createInvalidStreamChecker(invalidCount);
|
|
45
|
+
const command = createFFMPEGBuilder()
|
|
46
|
+
.input(this.url)
|
|
47
|
+
.inputOptions([
|
|
48
|
+
...this.inputOptions,
|
|
49
|
+
"-user_agent",
|
|
50
|
+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
|
|
51
|
+
])
|
|
52
|
+
.outputOptions(this.ffmpegOutputOptions)
|
|
53
|
+
.output(this.streamManager.videoFilePath)
|
|
54
|
+
.on("error", this.onEnd)
|
|
55
|
+
.on("end", () => this.onEnd("finished"))
|
|
56
|
+
.on("stderr", async (stderrLine) => {
|
|
57
|
+
assert(typeof stderrLine === "string");
|
|
58
|
+
await this.streamManager.handleVideoStarted(stderrLine);
|
|
59
|
+
// TODO:解析时间
|
|
60
|
+
this.emit("DebugLog", { type: "ffmpeg", text: stderrLine });
|
|
61
|
+
const info = this.formatLine(stderrLine);
|
|
62
|
+
if (info) {
|
|
63
|
+
this.emit("progress", info);
|
|
64
|
+
}
|
|
65
|
+
if (isInvalidStream(stderrLine)) {
|
|
66
|
+
this.onEnd("invalid stream");
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
.on("stderr", this.timeoutChecker.update);
|
|
70
|
+
if (this.hasSegment) {
|
|
71
|
+
command.outputOptions("-f", "segment", "-segment_time", String(this.segment * 60), "-reset_timestamps", "1");
|
|
72
|
+
}
|
|
73
|
+
return command;
|
|
74
|
+
}
|
|
75
|
+
formatLine(line) {
|
|
76
|
+
if (!line.includes("time=")) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
let time = null;
|
|
80
|
+
const timeMatch = line.match(/time=([0-9:.]+)/);
|
|
81
|
+
if (timeMatch) {
|
|
82
|
+
time = timeMatch[1];
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
time,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
run() {
|
|
89
|
+
this.command.run();
|
|
90
|
+
}
|
|
91
|
+
getArguments() {
|
|
92
|
+
return this.command._getArguments();
|
|
93
|
+
}
|
|
94
|
+
async stop() {
|
|
95
|
+
this.timeoutChecker.stop();
|
|
96
|
+
try {
|
|
97
|
+
// @ts-ignore
|
|
98
|
+
this.command.ffmpegProc?.stdin?.write("q");
|
|
99
|
+
await this.streamManager.handleVideoCompleted();
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
this.emit("DebugLog", { type: "common", text: String(err) });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
getExtraDataController() {
|
|
106
|
+
return this.streamManager?.getExtraDataController();
|
|
107
|
+
}
|
|
108
|
+
}
|
package/lib/api.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function
|
|
1
|
+
export declare function getBiliStatusInfoByRoomIds<RoomId extends number>(RoomIds: RoomId[]): Promise<Record<string, boolean>>;
|
package/lib/api.js
CHANGED
|
@@ -6,16 +6,19 @@ const requester = axios.create({
|
|
|
6
6
|
// 但会导致请求报错 "Client network socket disconnected before secure TLS connection was established"。
|
|
7
7
|
proxy: false,
|
|
8
8
|
});
|
|
9
|
-
export async function
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
});
|
|
9
|
+
export async function getBiliStatusInfoByRoomIds(RoomIds) {
|
|
10
|
+
const roomParams = `${RoomIds.map((id) => `room_ids=${id}`).join("&")}`;
|
|
11
|
+
const res = await requester.get(`https://api.live.bilibili.com/xlive/web-room/v1/index/getRoomBaseInfo?${roomParams}&req_biz=web_room_componet`);
|
|
13
12
|
assert(res.data.code === 0, `Unexpected resp, code ${res.data.code}, msg ${res.data.message}`);
|
|
14
13
|
const obj = {};
|
|
15
|
-
for (const
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
for (const roomId of RoomIds) {
|
|
15
|
+
try {
|
|
16
|
+
const data = res.data.data.by_room_ids[roomId];
|
|
17
|
+
obj[roomId] = data?.live_status === 1;
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
18
22
|
}
|
|
19
23
|
return obj;
|
|
20
24
|
}
|
|
21
|
-
//# sourceMappingURL=api.js.map
|
package/lib/common.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ export type ChannelId = string;
|
|
|
3
3
|
export declare const Qualities: readonly ["lowest", "low", "medium", "high", "highest"];
|
|
4
4
|
export declare const BiliQualities: readonly [30000, 20000, 10000, 400, 250, 150, 80];
|
|
5
5
|
export declare const DouyuQualities: readonly [0, 2, 3, 4, 8];
|
|
6
|
-
export
|
|
6
|
+
export declare const HuYaQualities: readonly [0, 20000, 14100, 14000, 10000, 8000, 4200, 4000, 2000, 500];
|
|
7
|
+
export declare const DouYinQualities: readonly ["origin", "uhd", "hd", "sd", "ld", "ao"];
|
|
8
|
+
export type Quality = (typeof Qualities)[number] | (typeof BiliQualities)[number] | (typeof DouyuQualities)[number] | (typeof HuYaQualities)[number] | (typeof DouYinQualities)[number];
|
|
7
9
|
export interface MessageSender<E extends AnyObject = UnknownObject> {
|
|
8
10
|
uid?: string;
|
|
9
11
|
name: string;
|
package/lib/common.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export const Qualities = ["lowest", "low", "medium", "high", "highest"];
|
|
2
2
|
export const BiliQualities = [30000, 20000, 10000, 400, 250, 150, 80];
|
|
3
3
|
export const DouyuQualities = [0, 2, 3, 4, 8];
|
|
4
|
-
|
|
4
|
+
// 14100: 2K HDR;14000:2K;4200:HDR(10M);0:原画;8000:蓝光8M;4000:蓝光4M;2000:超清;500:流畅
|
|
5
|
+
export const HuYaQualities = [0, 20000, 14100, 14000, 10000, 8000, 4200, 4000, 2000, 500];
|
|
6
|
+
export const DouYinQualities = ["origin", "uhd", "hd", "sd", "ld", "ao"];
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// forked from https://github.com/WhiteMinds/LiveAutoRecord
|
|
2
2
|
import ffmpeg from "@renmu/fluent-ffmpeg";
|
|
3
3
|
import { omit, pick } from "lodash-es";
|
|
4
|
-
import { v4 as uuid } from "uuid";
|
|
5
4
|
import utils from "./utils.js";
|
|
6
5
|
export * from "./common.js";
|
|
7
6
|
export * from "./recorder.js";
|
|
8
7
|
export * from "./manager.js";
|
|
9
8
|
export * from "./record_extra_data_controller.js";
|
|
9
|
+
export * from "./FFMPEGRecorder.js";
|
|
10
10
|
export { utils };
|
|
11
11
|
/**
|
|
12
12
|
* 提供一些 utils
|
|
@@ -35,16 +35,17 @@ export function defaultToJSON(provider, recorder) {
|
|
|
35
35
|
"disableProvideCommentsWhenRecording",
|
|
36
36
|
"liveInfo",
|
|
37
37
|
"uid",
|
|
38
|
+
"titleKeywords",
|
|
38
39
|
]),
|
|
39
40
|
};
|
|
40
41
|
}
|
|
41
42
|
// 目前是假设使用环境的规模都比较小,不太容易遇到性能问题,所以用 string uuid 作为 id 来简化开发的复杂度。
|
|
42
43
|
// 后面如果需要再高一些的规模,可以优化成分布式 id 生成器,或者其他的异步生成 id 的方案。
|
|
43
44
|
export function genRecorderUUID() {
|
|
44
|
-
return uuid();
|
|
45
|
+
return utils.uuid();
|
|
45
46
|
}
|
|
46
47
|
export function genRecordUUID() {
|
|
47
|
-
return uuid();
|
|
48
|
+
return utils.uuid();
|
|
48
49
|
}
|
|
49
50
|
let ffmpegPath = "ffmpeg";
|
|
50
51
|
export function setFFMPEGPath(newPath) {
|
|
@@ -55,7 +56,5 @@ export const createFFMPEGBuilder = (...args) => {
|
|
|
55
56
|
return ffmpeg(...args);
|
|
56
57
|
};
|
|
57
58
|
export function getDataFolderPath(provider) {
|
|
58
|
-
// TODO: 改成 AppData 之类的目录
|
|
59
59
|
return "./" + provider.id;
|
|
60
60
|
}
|
|
61
|
-
//# sourceMappingURL=index.js.map
|
package/lib/manager.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Emitter } from "mitt";
|
|
2
2
|
import { ChannelId, Message } from "./common.js";
|
|
3
|
-
import { RecorderCreateOpts, Recorder, SerializedRecorder, RecordHandle, DebugLog } from "./recorder.js";
|
|
3
|
+
import { RecorderCreateOpts, Recorder, SerializedRecorder, RecordHandle, DebugLog, Progress } from "./recorder.js";
|
|
4
4
|
import { AnyObject, UnknownObject } from "./utils.js";
|
|
5
5
|
import { StreamManager } from "./streamManager.js";
|
|
6
6
|
export interface RecorderProvider<E extends AnyObject> {
|
|
@@ -18,7 +18,7 @@ export interface RecorderProvider<E extends AnyObject> {
|
|
|
18
18
|
fromJSON: <T extends SerializedRecorder<E>>(this: RecorderProvider<E>, json: T) => Recorder<E>;
|
|
19
19
|
setFFMPEGOutputArgs: (this: RecorderProvider<E>, args: string[]) => void;
|
|
20
20
|
}
|
|
21
|
-
declare const configurableProps: readonly ["savePathRule", "autoRemoveSystemReservedChars", "
|
|
21
|
+
declare const configurableProps: readonly ["savePathRule", "autoRemoveSystemReservedChars", "autoCheckInterval", "ffmpegOutputArgs", "biliBatchQuery"];
|
|
22
22
|
type ConfigurableProp = (typeof configurableProps)[number];
|
|
23
23
|
export interface RecorderManager<ME extends UnknownObject, P extends RecorderProvider<AnyObject> = RecorderProvider<UnknownObject>, PE extends AnyObject = GetProviderExtra<P>, E extends AnyObject = ME & PE> extends Emitter<{
|
|
24
24
|
error: {
|
|
@@ -41,6 +41,13 @@ export interface RecorderManager<ME extends UnknownObject, P extends RecorderPro
|
|
|
41
41
|
recorder: Recorder<E>;
|
|
42
42
|
filename: string;
|
|
43
43
|
};
|
|
44
|
+
RecorderProgress: {
|
|
45
|
+
recorder: Recorder<E>;
|
|
46
|
+
progress: Progress;
|
|
47
|
+
};
|
|
48
|
+
RecoderLiveStart: {
|
|
49
|
+
recorder: Recorder<E>;
|
|
50
|
+
};
|
|
44
51
|
RecordStop: {
|
|
45
52
|
recorder: Recorder<E>;
|
|
46
53
|
recordHandle: RecordHandle;
|
|
@@ -68,7 +75,6 @@ export interface RecorderManager<ME extends UnknownObject, P extends RecorderPro
|
|
|
68
75
|
removeRecorder: (this: RecorderManager<ME, P, PE, E>, recorder: Recorder<E>) => void;
|
|
69
76
|
startRecord: (this: RecorderManager<ME, P, PE, E>, id: string) => Promise<Recorder<E> | undefined>;
|
|
70
77
|
stopRecord: (this: RecorderManager<ME, P, PE, E>, id: string) => Promise<Recorder<E> | undefined>;
|
|
71
|
-
autoCheckLiveStatusAndRecord: boolean;
|
|
72
78
|
autoCheckInterval: number;
|
|
73
79
|
isCheckLoopRunning: boolean;
|
|
74
80
|
startCheckLoop: (this: RecorderManager<ME, P, PE, E>) => void;
|
package/lib/manager.js
CHANGED
|
@@ -2,13 +2,12 @@ import path from "node:path";
|
|
|
2
2
|
import mitt from "mitt";
|
|
3
3
|
import { omit, range } from "lodash-es";
|
|
4
4
|
import { parseArgsStringToArgv } from "string-argv";
|
|
5
|
-
import {
|
|
6
|
-
import { formatDate, removeSystemReservedChars, formatTemplate, } from "./utils.js";
|
|
5
|
+
import { getBiliStatusInfoByRoomIds } from "./api.js";
|
|
6
|
+
import { formatDate, removeSystemReservedChars, formatTemplate, replaceExtName, downloadImage, } from "./utils.js";
|
|
7
7
|
import { StreamManager } from "./streamManager.js";
|
|
8
8
|
const configurableProps = [
|
|
9
9
|
"savePathRule",
|
|
10
10
|
"autoRemoveSystemReservedChars",
|
|
11
|
-
"autoCheckLiveStatusAndRecord",
|
|
12
11
|
"autoCheckInterval",
|
|
13
12
|
"ffmpegOutputArgs",
|
|
14
13
|
"biliBatchQuery",
|
|
@@ -21,11 +20,12 @@ export function createRecorderManager(opts) {
|
|
|
21
20
|
let checkLoopTimer;
|
|
22
21
|
const multiThreadCheck = async (manager) => {
|
|
23
22
|
const handleBatchQuery = async (obj) => {
|
|
24
|
-
for (const recorder of recorders
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const isLive = obj[recorder.
|
|
28
|
-
|
|
23
|
+
for (const recorder of recorders
|
|
24
|
+
.filter((r) => !r.disableAutoCheck)
|
|
25
|
+
.filter((r) => r.providerId === "Bilibili")) {
|
|
26
|
+
const isLive = obj[recorder.channelId];
|
|
27
|
+
// 如果是undefined,说明这个接口查不到相关信息,使用录制器内的再查一次
|
|
28
|
+
if (isLive === true || isLive === undefined) {
|
|
29
29
|
await recorder.checkLiveStatusAndRecord({
|
|
30
30
|
getSavePath(data) {
|
|
31
31
|
return genSavePathFromRule(manager, recorder, data);
|
|
@@ -41,25 +41,19 @@ export function createRecorderManager(opts) {
|
|
|
41
41
|
let needCheckRecorders = recorders.filter((r) => !r.disableAutoCheck);
|
|
42
42
|
let threads = [];
|
|
43
43
|
if (manager.biliBatchQuery) {
|
|
44
|
-
const biliNeedCheckRecorders = needCheckRecorders
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return true;
|
|
50
|
-
return false;
|
|
51
|
-
});
|
|
52
|
-
const uids = biliNeedCheckRecorders.map((r) => r.extra?.recorderUid);
|
|
53
|
-
// console.log("uids", uids);
|
|
44
|
+
const biliNeedCheckRecorders = needCheckRecorders
|
|
45
|
+
.filter((r) => r.providerId === "Bilibili")
|
|
46
|
+
.filter((r) => r.recordHandle == null);
|
|
47
|
+
needCheckRecorders = needCheckRecorders.filter((r) => r.providerId !== "Bilibili");
|
|
48
|
+
const roomIds = biliNeedCheckRecorders.map((r) => r.channelId).map(Number);
|
|
54
49
|
try {
|
|
55
|
-
if (
|
|
56
|
-
const biliStatus = await
|
|
57
|
-
// console.log("biliStatus", biliStatus);
|
|
50
|
+
if (roomIds.length !== 0) {
|
|
51
|
+
const biliStatus = await getBiliStatusInfoByRoomIds(roomIds);
|
|
58
52
|
threads.push(handleBatchQuery(biliStatus));
|
|
59
53
|
}
|
|
60
54
|
}
|
|
61
55
|
catch (err) {
|
|
62
|
-
manager.emit("error", { source: "
|
|
56
|
+
manager.emit("error", { source: "getBiliStatusInfoByRoomIds", err });
|
|
63
57
|
}
|
|
64
58
|
}
|
|
65
59
|
const checkOnce = async () => {
|
|
@@ -88,6 +82,8 @@ export function createRecorderManager(opts) {
|
|
|
88
82
|
};
|
|
89
83
|
// 用于记录暂时被 ban 掉的直播间
|
|
90
84
|
const tempBanObj = {};
|
|
85
|
+
// 用于是否触发LiveStart事件,不要重复触发
|
|
86
|
+
const liveStartObj = {};
|
|
91
87
|
const manager = {
|
|
92
88
|
// @ts-ignore
|
|
93
89
|
...mitt(),
|
|
@@ -106,12 +102,28 @@ export function createRecorderManager(opts) {
|
|
|
106
102
|
this.recorders.push(recorder);
|
|
107
103
|
recorder.on("RecordStart", (recordHandle) => this.emit("RecordStart", { recorder, recordHandle }));
|
|
108
104
|
recorder.on("RecordSegment", (recordHandle) => this.emit("RecordSegment", { recorder, recordHandle }));
|
|
109
|
-
recorder.on("videoFileCreated", ({ filename }) =>
|
|
105
|
+
recorder.on("videoFileCreated", ({ filename }) => {
|
|
106
|
+
if (recorder.saveCover && recorder?.liveInfo?.cover) {
|
|
107
|
+
const coverPath = replaceExtName(filename, ".jpg");
|
|
108
|
+
downloadImage(recorder?.liveInfo?.cover, coverPath);
|
|
109
|
+
}
|
|
110
|
+
this.emit("videoFileCreated", { recorder, filename });
|
|
111
|
+
});
|
|
110
112
|
recorder.on("videoFileCompleted", ({ filename }) => this.emit("videoFileCompleted", { recorder, filename }));
|
|
111
113
|
recorder.on("RecordStop", ({ recordHandle, reason }) => this.emit("RecordStop", { recorder, recordHandle, reason }));
|
|
112
114
|
recorder.on("Message", (message) => this.emit("Message", { recorder, message }));
|
|
113
115
|
recorder.on("Updated", (keys) => this.emit("RecorderUpdated", { recorder, keys }));
|
|
114
116
|
recorder.on("DebugLog", (log) => this.emit("RecorderDebugLog", { recorder, ...log }));
|
|
117
|
+
recorder.on("progress", (progress) => {
|
|
118
|
+
this.emit("RecorderProgress", { recorder, progress });
|
|
119
|
+
});
|
|
120
|
+
recorder.on("LiveStart", ({ liveId }) => {
|
|
121
|
+
const key = `${recorder.channelId}-${liveId}`;
|
|
122
|
+
if (liveStartObj[key])
|
|
123
|
+
return;
|
|
124
|
+
liveStartObj[key] = true;
|
|
125
|
+
this.emit("RecoderLiveStart", { recorder });
|
|
126
|
+
});
|
|
115
127
|
this.emit("RecorderAdded", recorder);
|
|
116
128
|
return recorder;
|
|
117
129
|
},
|
|
@@ -134,7 +146,7 @@ export function createRecorderManager(opts) {
|
|
|
134
146
|
getSavePath(data) {
|
|
135
147
|
return genSavePathFromRule(manager, recorder, data);
|
|
136
148
|
},
|
|
137
|
-
|
|
149
|
+
isManualStart: true,
|
|
138
150
|
});
|
|
139
151
|
delete tempBanObj[recorder.channelId];
|
|
140
152
|
recorder.tempStopIntervalCheck = false;
|
|
@@ -154,7 +166,6 @@ export function createRecorderManager(opts) {
|
|
|
154
166
|
}
|
|
155
167
|
return recorder;
|
|
156
168
|
},
|
|
157
|
-
autoCheckLiveStatusAndRecord: opts.autoCheckLiveStatusAndRecord ?? true,
|
|
158
169
|
autoCheckInterval: opts.autoCheckInterval ?? 1000,
|
|
159
170
|
isCheckLoopRunning: false,
|
|
160
171
|
startCheckLoop() {
|
|
@@ -188,7 +199,7 @@ export function createRecorderManager(opts) {
|
|
|
188
199
|
clearTimeout(checkLoopTimer);
|
|
189
200
|
},
|
|
190
201
|
savePathRule: opts.savePathRule ??
|
|
191
|
-
path.join(process.cwd(), "{platform}/{owner}/{year}-{month}-{date} {hour}-{min}-{sec} {title}
|
|
202
|
+
path.join(process.cwd(), "{platform}/{owner}/{year}-{month}-{date} {hour}-{min}-{sec} {title}"),
|
|
192
203
|
autoRemoveSystemReservedChars: opts.autoRemoveSystemReservedChars ?? true,
|
|
193
204
|
biliBatchQuery: opts.biliBatchQuery ?? false,
|
|
194
205
|
ffmpegOutputArgs: opts.ffmpegOutputArgs ??
|
|
@@ -253,4 +264,3 @@ export function genSavePathFromRule(manager, recorder, extData) {
|
|
|
253
264
|
return formatTemplate(manager.savePathRule, params);
|
|
254
265
|
}
|
|
255
266
|
export { StreamManager };
|
|
256
|
-
//# sourceMappingURL=manager.js.map
|
package/lib/recorder.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export interface RecorderCreateOpts<E extends AnyObject = UnknownObject> {
|
|
|
14
14
|
quality: Quality;
|
|
15
15
|
streamPriorities: string[];
|
|
16
16
|
sourcePriorities: string[];
|
|
17
|
+
formatPriorities?: string[];
|
|
17
18
|
segment?: number;
|
|
18
19
|
saveGiftDanma?: boolean;
|
|
19
20
|
saveSCDanma?: boolean;
|
|
@@ -33,16 +34,24 @@ export interface RecorderCreateOpts<E extends AnyObject = UnknownObject> {
|
|
|
33
34
|
formatName?: FormatName;
|
|
34
35
|
/** 流编码 */
|
|
35
36
|
codecName?: CodecName;
|
|
37
|
+
/** 选择使用的api,虎牙支持 */
|
|
38
|
+
api?: "auto" | "web" | "mp";
|
|
39
|
+
/** 标题关键词,如果直播间标题包含这些关键词,则不会自动录制(仅对斗鱼有效),多个关键词用英文逗号分隔 */
|
|
40
|
+
titleKeywords?: string;
|
|
36
41
|
extra?: Partial<E>;
|
|
37
42
|
}
|
|
38
43
|
export type SerializedRecorder<E extends AnyObject> = PickRequired<RecorderCreateOpts<E>, "id">;
|
|
39
44
|
export type RecorderState = "idle" | "recording" | "stopping-record";
|
|
45
|
+
export type Progress = {
|
|
46
|
+
time: string | null;
|
|
47
|
+
};
|
|
40
48
|
export interface RecordHandle {
|
|
41
49
|
id: string;
|
|
42
50
|
stream: string;
|
|
43
51
|
source: string;
|
|
44
52
|
url: string;
|
|
45
53
|
ffmpegArgs?: string[];
|
|
54
|
+
progress?: Progress;
|
|
46
55
|
savePath: string;
|
|
47
56
|
stop: (this: RecordHandle, reason?: string, tempStopIntervalCheck?: boolean) => Promise<void>;
|
|
48
57
|
}
|
|
@@ -64,6 +73,10 @@ export interface Recorder<E extends AnyObject = UnknownObject> extends Emitter<{
|
|
|
64
73
|
videoFileCompleted: {
|
|
65
74
|
filename: string;
|
|
66
75
|
};
|
|
76
|
+
progress: Progress;
|
|
77
|
+
LiveStart: {
|
|
78
|
+
liveId: string;
|
|
79
|
+
};
|
|
67
80
|
RecordStop: {
|
|
68
81
|
recordHandle: RecordHandle;
|
|
69
82
|
reason?: string;
|
|
@@ -95,8 +108,8 @@ export interface Recorder<E extends AnyObject = UnknownObject> extends Emitter<{
|
|
|
95
108
|
getChannelURL: (this: Recorder<E>) => string;
|
|
96
109
|
checkLiveStatusAndRecord: (this: Recorder<E>, opts: {
|
|
97
110
|
getSavePath: GetSavePath;
|
|
98
|
-
qualityRetry?: number;
|
|
99
111
|
banLiveId?: string;
|
|
112
|
+
isManualStart?: boolean;
|
|
100
113
|
}) => Promise<RecordHandle | null>;
|
|
101
114
|
recordHandle?: RecordHandle;
|
|
102
115
|
toJSON: (this: Recorder<E>) => SerializedRecorder<E>;
|
package/lib/recorder.js
CHANGED
package/lib/streamManager.d.ts
CHANGED
|
@@ -1,29 +1,28 @@
|
|
|
1
|
+
import EventEmitter from "node:events";
|
|
1
2
|
import { createRecordExtraDataController } from "./record_extra_data_controller.js";
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
export type GetSavePath = (data: {
|
|
4
|
+
startTime: number;
|
|
5
|
+
}) => string;
|
|
6
|
+
export declare class Segment extends EventEmitter {
|
|
4
7
|
extraDataController: ReturnType<typeof createRecordExtraDataController> | null;
|
|
5
8
|
init: boolean;
|
|
6
9
|
getSavePath: GetSavePath;
|
|
7
|
-
owner: string;
|
|
8
|
-
title: string;
|
|
9
|
-
recorder: Recorder;
|
|
10
10
|
/** 原始的ffmpeg文件名,用于重命名 */
|
|
11
11
|
rawRecordingVideoPath: string;
|
|
12
12
|
/** 输出文件名名,不包含拓展名 */
|
|
13
13
|
outputVideoFilePath: string;
|
|
14
|
-
|
|
14
|
+
disableDanma: boolean;
|
|
15
|
+
constructor(getSavePath: GetSavePath, disableDanma: boolean);
|
|
15
16
|
handleSegmentEnd(): Promise<void>;
|
|
16
17
|
onSegmentStart(stderrLine: string): Promise<void>;
|
|
17
18
|
}
|
|
18
|
-
export declare class StreamManager {
|
|
19
|
-
private
|
|
19
|
+
export declare class StreamManager extends EventEmitter {
|
|
20
|
+
private segment;
|
|
20
21
|
private extraDataController;
|
|
21
|
-
recorder: Recorder;
|
|
22
|
-
owner: string;
|
|
23
|
-
title: string;
|
|
24
22
|
recordSavePath: string;
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
recordStartTime?: number;
|
|
24
|
+
constructor(getSavePath: GetSavePath, hasSegment: boolean, disableDanma: boolean);
|
|
25
|
+
handleVideoStarted(stderrLine: string): Promise<void>;
|
|
27
26
|
handleVideoCompleted(): Promise<void>;
|
|
28
27
|
getExtraDataController(): import("./record_extra_data_controller.js").RecordExtraDataController | null;
|
|
29
28
|
get videoFilePath(): string;
|
package/lib/streamManager.js
CHANGED
|
@@ -1,41 +1,38 @@
|
|
|
1
|
+
import EventEmitter from "node:events";
|
|
1
2
|
import fs from "fs-extra";
|
|
2
3
|
import { createRecordExtraDataController } from "./record_extra_data_controller.js";
|
|
3
|
-
import { replaceExtName, ensureFolderExist } from "./utils.js";
|
|
4
|
-
export class Segment {
|
|
4
|
+
import { replaceExtName, ensureFolderExist, isFfmpegStartSegment, isFfmpegStart } from "./utils.js";
|
|
5
|
+
export class Segment extends EventEmitter {
|
|
5
6
|
extraDataController = null;
|
|
6
7
|
init = true;
|
|
7
8
|
getSavePath;
|
|
8
|
-
owner;
|
|
9
|
-
title;
|
|
10
|
-
recorder;
|
|
11
9
|
/** 原始的ffmpeg文件名,用于重命名 */
|
|
12
10
|
rawRecordingVideoPath;
|
|
13
11
|
/** 输出文件名名,不包含拓展名 */
|
|
14
12
|
outputVideoFilePath;
|
|
15
|
-
|
|
13
|
+
disableDanma;
|
|
14
|
+
constructor(getSavePath, disableDanma) {
|
|
15
|
+
super();
|
|
16
16
|
this.getSavePath = getSavePath;
|
|
17
|
-
this.
|
|
18
|
-
this.title = title;
|
|
19
|
-
this.recorder = recorder;
|
|
17
|
+
this.disableDanma = disableDanma;
|
|
20
18
|
}
|
|
21
19
|
async handleSegmentEnd() {
|
|
22
20
|
if (!this.outputVideoFilePath) {
|
|
23
|
-
this.
|
|
21
|
+
this.emit("DebugLog", {
|
|
24
22
|
type: "common",
|
|
25
23
|
text: "Should call onSegmentStart first",
|
|
26
24
|
});
|
|
27
25
|
return;
|
|
28
26
|
}
|
|
29
|
-
this.extraDataController?.setMeta({ recordStopTimestamp: Date.now() });
|
|
30
27
|
try {
|
|
31
28
|
await Promise.all([
|
|
32
29
|
fs.rename(this.rawRecordingVideoPath, `${this.outputVideoFilePath}.ts`),
|
|
33
30
|
this.extraDataController?.flush(),
|
|
34
31
|
]);
|
|
35
|
-
this.
|
|
32
|
+
this.emit("videoFileCompleted", { filename: `${this.outputVideoFilePath}.ts` });
|
|
36
33
|
}
|
|
37
34
|
catch (err) {
|
|
38
|
-
this.
|
|
35
|
+
this.emit("DebugLog", {
|
|
39
36
|
type: "common",
|
|
40
37
|
text: "videoFileCompleted error " + String(err),
|
|
41
38
|
});
|
|
@@ -48,72 +45,83 @@ export class Segment {
|
|
|
48
45
|
this.init = false;
|
|
49
46
|
const startTime = Date.now();
|
|
50
47
|
this.outputVideoFilePath = this.getSavePath({
|
|
51
|
-
owner: this.owner,
|
|
52
|
-
title: this.title,
|
|
53
48
|
startTime: startTime,
|
|
54
49
|
});
|
|
55
50
|
ensureFolderExist(this.outputVideoFilePath);
|
|
56
|
-
|
|
57
|
-
|
|
51
|
+
if (!this.disableDanma) {
|
|
52
|
+
this.extraDataController = createRecordExtraDataController(`${this.outputVideoFilePath}.json`);
|
|
53
|
+
}
|
|
58
54
|
const regex = /'([^']+)'/;
|
|
59
55
|
const match = stderrLine.match(regex);
|
|
60
56
|
if (match) {
|
|
61
57
|
const filename = match[1];
|
|
62
58
|
this.rawRecordingVideoPath = filename;
|
|
63
|
-
this.
|
|
59
|
+
this.emit("videoFileCreated", { filename: `${this.outputVideoFilePath}.ts` });
|
|
64
60
|
}
|
|
65
61
|
else {
|
|
66
|
-
this.
|
|
62
|
+
this.emit("DebugLog", { type: "ffmpeg", text: "No match found" });
|
|
67
63
|
}
|
|
68
64
|
}
|
|
69
65
|
}
|
|
70
|
-
export class StreamManager {
|
|
71
|
-
|
|
66
|
+
export class StreamManager extends EventEmitter {
|
|
67
|
+
segment = null;
|
|
72
68
|
extraDataController = null;
|
|
73
|
-
recorder;
|
|
74
|
-
owner;
|
|
75
|
-
title;
|
|
76
69
|
recordSavePath;
|
|
77
|
-
|
|
70
|
+
recordStartTime;
|
|
71
|
+
constructor(getSavePath, hasSegment, disableDanma) {
|
|
72
|
+
super();
|
|
73
|
+
const recordSavePath = getSavePath({ startTime: Date.now() });
|
|
78
74
|
this.recordSavePath = recordSavePath;
|
|
79
|
-
this.recorder = recorder;
|
|
80
|
-
this.owner = owner;
|
|
81
|
-
this.title = title;
|
|
82
75
|
if (hasSegment) {
|
|
83
|
-
this.
|
|
76
|
+
this.segment = new Segment(getSavePath, disableDanma);
|
|
77
|
+
this.segment.on("DebugLog", (data) => {
|
|
78
|
+
this.emit("DebugLog", data);
|
|
79
|
+
});
|
|
80
|
+
this.segment.on("videoFileCreated", (data) => {
|
|
81
|
+
this.emit("videoFileCreated", data);
|
|
82
|
+
});
|
|
83
|
+
this.segment.on("videoFileCompleted", (data) => {
|
|
84
|
+
this.emit("videoFileCompleted", data);
|
|
85
|
+
});
|
|
84
86
|
}
|
|
85
87
|
else {
|
|
86
88
|
const extraDataSavePath = replaceExtName(recordSavePath, ".json");
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
if (!disableDanma) {
|
|
90
|
+
this.extraDataController = createRecordExtraDataController(extraDataSavePath);
|
|
91
|
+
}
|
|
90
92
|
}
|
|
91
93
|
}
|
|
92
94
|
async handleVideoStarted(stderrLine) {
|
|
93
|
-
if (this.
|
|
94
|
-
if (stderrLine) {
|
|
95
|
-
await this.
|
|
95
|
+
if (this.segment) {
|
|
96
|
+
if (isFfmpegStartSegment(stderrLine)) {
|
|
97
|
+
await this.segment.onSegmentStart(stderrLine);
|
|
96
98
|
}
|
|
97
99
|
}
|
|
98
100
|
else {
|
|
99
|
-
|
|
101
|
+
// 不能直接在onStart回调进行判断,在某些情况下会链接无法录制的情况
|
|
102
|
+
if (isFfmpegStart(stderrLine)) {
|
|
103
|
+
if (this.recordStartTime)
|
|
104
|
+
return;
|
|
105
|
+
this.recordStartTime = Date.now();
|
|
106
|
+
this.emit("videoFileCreated", { filename: this.videoFilePath });
|
|
107
|
+
}
|
|
100
108
|
}
|
|
101
109
|
}
|
|
102
110
|
async handleVideoCompleted() {
|
|
103
|
-
if (this.
|
|
104
|
-
await this.
|
|
111
|
+
if (this.segment) {
|
|
112
|
+
await this.segment.handleSegmentEnd();
|
|
105
113
|
}
|
|
106
114
|
else {
|
|
107
|
-
this.
|
|
108
|
-
|
|
109
|
-
|
|
115
|
+
if (this.recordStartTime) {
|
|
116
|
+
await this.getExtraDataController()?.flush();
|
|
117
|
+
this.emit("videoFileCompleted", { filename: this.videoFilePath });
|
|
118
|
+
}
|
|
110
119
|
}
|
|
111
120
|
}
|
|
112
121
|
getExtraDataController() {
|
|
113
|
-
return this.
|
|
122
|
+
return this.segment?.extraDataController || this.extraDataController;
|
|
114
123
|
}
|
|
115
124
|
get videoFilePath() {
|
|
116
|
-
return this.
|
|
125
|
+
return this.segment ? `${this.recordSavePath}-PART%03d.ts` : `${this.recordSavePath}.ts`;
|
|
117
126
|
}
|
|
118
127
|
}
|
|
119
|
-
//# sourceMappingURL=streamManager.js.map
|
package/lib/utils.d.ts
CHANGED
|
@@ -36,13 +36,22 @@ export declare function assertObjectType(data: unknown, msg?: string): asserts d
|
|
|
36
36
|
export declare function formatDate(date: Date, format: string): string;
|
|
37
37
|
export declare function removeSystemReservedChars(filename: string): string;
|
|
38
38
|
export declare function isFfmpegStartSegment(line: string): boolean;
|
|
39
|
+
export declare function isFfmpegStart(line: string): boolean;
|
|
39
40
|
export declare const formatTemplate: (string: string, ...args: any[]) => string;
|
|
40
|
-
export declare function createInvalidStreamChecker(): (ffmpegLogLine: string) => boolean;
|
|
41
|
+
export declare function createInvalidStreamChecker(count?: number): (ffmpegLogLine: string) => boolean;
|
|
41
42
|
export declare function createTimeoutChecker(onTimeout: () => void, time: number): {
|
|
42
43
|
update: () => void;
|
|
43
44
|
stop: () => void;
|
|
44
45
|
};
|
|
45
|
-
declare function downloadImage(imageUrl: string, savePath: string): Promise<void>;
|
|
46
|
+
export declare function downloadImage(imageUrl: string, savePath: string): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* 根据指定的顺序对对象数组进行排序
|
|
49
|
+
* @param objects 要排序的对象数组
|
|
50
|
+
* @param order 指定的顺序
|
|
51
|
+
* @param key 用于排序的键
|
|
52
|
+
* @returns 排序后的对象数组
|
|
53
|
+
*/
|
|
54
|
+
export declare function sortByKeyOrder<T, K extends keyof T>(objects: T[], order: T[K][], key: K): T[];
|
|
46
55
|
declare const _default: {
|
|
47
56
|
replaceExtName: typeof replaceExtName;
|
|
48
57
|
singleton: typeof singleton;
|
|
@@ -58,5 +67,7 @@ declare const _default: {
|
|
|
58
67
|
createTimeoutChecker: typeof createTimeoutChecker;
|
|
59
68
|
downloadImage: typeof downloadImage;
|
|
60
69
|
md5: (str: string) => string;
|
|
70
|
+
uuid: () => `${string}-${string}-${string}-${string}-${string}`;
|
|
71
|
+
sortByKeyOrder: typeof sortByKeyOrder;
|
|
61
72
|
};
|
|
62
73
|
export default _default;
|
package/lib/utils.js
CHANGED
|
@@ -126,6 +126,9 @@ export function removeSystemReservedChars(filename) {
|
|
|
126
126
|
export function isFfmpegStartSegment(line) {
|
|
127
127
|
return line.includes("Opening ") && line.includes("for writing");
|
|
128
128
|
}
|
|
129
|
+
export function isFfmpegStart(line) {
|
|
130
|
+
return line.includes("frame=") && line.includes("fps=");
|
|
131
|
+
}
|
|
129
132
|
export const formatTemplate = function template(string, ...args) {
|
|
130
133
|
const nargs = /\{([0-9a-zA-Z_]+)\}/g;
|
|
131
134
|
let params;
|
|
@@ -152,7 +155,7 @@ export const formatTemplate = function template(string, ...args) {
|
|
|
152
155
|
}
|
|
153
156
|
});
|
|
154
157
|
};
|
|
155
|
-
export function createInvalidStreamChecker() {
|
|
158
|
+
export function createInvalidStreamChecker(count = 15) {
|
|
156
159
|
let prevFrame = 0;
|
|
157
160
|
let frameUnchangedCount = 0;
|
|
158
161
|
return (ffmpegLogLine) => {
|
|
@@ -161,7 +164,7 @@ export function createInvalidStreamChecker() {
|
|
|
161
164
|
const [, frameText] = streamInfo;
|
|
162
165
|
const frame = Number(frameText);
|
|
163
166
|
if (frame === prevFrame) {
|
|
164
|
-
if (++frameUnchangedCount >=
|
|
167
|
+
if (++frameUnchangedCount >= count) {
|
|
165
168
|
return true;
|
|
166
169
|
}
|
|
167
170
|
}
|
|
@@ -171,9 +174,6 @@ export function createInvalidStreamChecker() {
|
|
|
171
174
|
}
|
|
172
175
|
return false;
|
|
173
176
|
}
|
|
174
|
-
if (ffmpegLogLine.includes("HTTP error 404 Not Found")) {
|
|
175
|
-
return true;
|
|
176
|
-
}
|
|
177
177
|
return false;
|
|
178
178
|
};
|
|
179
179
|
}
|
|
@@ -201,7 +201,7 @@ export function createTimeoutChecker(onTimeout, time) {
|
|
|
201
201
|
},
|
|
202
202
|
};
|
|
203
203
|
}
|
|
204
|
-
async function downloadImage(imageUrl, savePath) {
|
|
204
|
+
export async function downloadImage(imageUrl, savePath) {
|
|
205
205
|
const res = await fetch(imageUrl);
|
|
206
206
|
if (!res.body) {
|
|
207
207
|
throw new Error("No body in response");
|
|
@@ -213,6 +213,24 @@ async function downloadImage(imageUrl, savePath) {
|
|
|
213
213
|
const md5 = (str) => {
|
|
214
214
|
return crypto.createHash("md5").update(str).digest("hex");
|
|
215
215
|
};
|
|
216
|
+
const uuid = () => {
|
|
217
|
+
return crypto.randomUUID();
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* 根据指定的顺序对对象数组进行排序
|
|
221
|
+
* @param objects 要排序的对象数组
|
|
222
|
+
* @param order 指定的顺序
|
|
223
|
+
* @param key 用于排序的键
|
|
224
|
+
* @returns 排序后的对象数组
|
|
225
|
+
*/
|
|
226
|
+
export function sortByKeyOrder(objects, order, key) {
|
|
227
|
+
const orderMap = new Map(order.map((value, index) => [value, index]));
|
|
228
|
+
return [...objects].sort((a, b) => {
|
|
229
|
+
const indexA = orderMap.get(a[key]) ?? Number.MAX_VALUE;
|
|
230
|
+
const indexB = orderMap.get(b[key]) ?? Number.MAX_VALUE;
|
|
231
|
+
return indexA - indexB;
|
|
232
|
+
});
|
|
233
|
+
}
|
|
216
234
|
export default {
|
|
217
235
|
replaceExtName,
|
|
218
236
|
singleton,
|
|
@@ -228,5 +246,6 @@ export default {
|
|
|
228
246
|
createTimeoutChecker,
|
|
229
247
|
downloadImage,
|
|
230
248
|
md5,
|
|
249
|
+
uuid,
|
|
250
|
+
sortByKeyOrder,
|
|
231
251
|
};
|
|
232
|
-
//# sourceMappingURL=utils.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bililive-tools/manager",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Batch scheduling recorders",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -22,6 +22,12 @@
|
|
|
22
22
|
"files": [
|
|
23
23
|
"lib"
|
|
24
24
|
],
|
|
25
|
+
"keywords": [
|
|
26
|
+
"bililive-tools",
|
|
27
|
+
"manager",
|
|
28
|
+
"scheduling",
|
|
29
|
+
"recorders"
|
|
30
|
+
],
|
|
25
31
|
"repository": "https://github.com/renmu123/biliLive-tools",
|
|
26
32
|
"author": "renmu123",
|
|
27
33
|
"license": "LGPL",
|
|
@@ -30,7 +36,10 @@
|
|
|
30
36
|
"fast-xml-parser": "^4.5.0",
|
|
31
37
|
"filenamify": "^6.0.0",
|
|
32
38
|
"mitt": "^3.0.1",
|
|
33
|
-
"string-argv": "^0.3.2"
|
|
39
|
+
"string-argv": "^0.3.2",
|
|
40
|
+
"lodash-es": "^4.17.21",
|
|
41
|
+
"axios": "^1.7.8",
|
|
42
|
+
"fs-extra": "^11.2.0"
|
|
34
43
|
},
|
|
35
44
|
"scripts": {
|
|
36
45
|
"build": "pnpm run test && tsc",
|
package/lib/api.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,OAAO,EAAE,IAAI;IACb,kDAAkD;IAClD,8FAA8F;IAC9F,KAAK,EAAE,KAAK;CACb,CAAC,CAAC;AAiBH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAqB,OAAc;IAC9E,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,CAiB7B,mEAAmE,EAAE;QACrE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KAC1B,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,yBAAyB,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAE/F,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,WAAW,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/lib/common.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAU,CAAC;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,CAAC"}
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAIlC,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB;;GAEG;AAEH,MAAM,UAAU,eAAe,CAC7B,QAA6B,EAC7B,IAA2B;IAE3B,OAAO,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,QAA6B,EAC7B,QAAqB;IAErB,aAAa;IACb,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,GAAG,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI;YACJ,WAAW;YACX,OAAO;YACP,SAAS;YACT,kBAAkB;YAClB,SAAS;YACT,kBAAkB;YAClB,kBAAkB;YAClB,OAAO;YACP,SAAS;YACT,aAAa;YACb,WAAW;YACX,eAAe;YACf,qCAAqC;YACrC,UAAU;YACV,KAAK;SACN,CAAC;KACH,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,kDAAkD;AAClD,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC;AACD,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC;AAED,IAAI,UAAU,GAAW,QAAQ,CAAC;AAClC,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,UAAU,GAAG,OAAO,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAA+B,EAAE,EAAE;IACxE,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAsB,QAA6B;IAClF,yBAAyB;IACzB,OAAO,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC;AAC5B,CAAC"}
|
package/lib/manager.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"record_extra_data_controller.js","sourceRoot":"","sources":["../src/record_extra_data_controller.ts"],"names":[],"mappings":"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"}
|
package/lib/recorder.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":""}
|
package/lib/streamManager.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streamManager.js","sourceRoot":"","sources":["../src/streamManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAI/D,MAAM,OAAO,OAAO;IAClB,mBAAmB,GAA8D,IAAI,CAAC;IACtF,IAAI,GAAG,IAAI,CAAC;IACZ,WAAW,CAAc;IACzB,KAAK,CAAS;IACd,KAAK,CAAS;IACd,QAAQ,CAAW;IACnB,yBAAyB;IACzB,qBAAqB,CAAU;IAC/B,oBAAoB;IACpB,mBAAmB,CAAU;IAE7B,YAAY,QAAkB,EAAE,WAAwB,EAAE,KAAa,EAAE,KAAa;QACpF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC7B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,kCAAkC;aACzC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,mBAAmB,KAAK,CAAC;gBACvE,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE;aAClC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC7B,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAC;aAChD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAkB;QACrC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;QAEH,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAE5C,IAAI,CAAC,mBAAmB,GAAG,+BAA+B,CAAC,GAAG,IAAI,CAAC,mBAAmB,OAAO,CAAC,CAAC;QAC/F,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAE/E,MAAM,KAAK,GAAG,WAAW,CAAC;QAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,aAAa;IAChB,cAAc,GAAmB,IAAI,CAAC;IACtC,mBAAmB,GAA8D,IAAI,CAAC;IAC9F,QAAQ,CAAW;IACnB,KAAK,CAAS;IACd,KAAK,CAAS;IACd,cAAc,CAAS;IAEvB,YACE,QAAkB,EAClB,WAAwB,EACxB,KAAa,EACb,KAAa,EACb,cAAsB,EACtB,UAAmB;QAEnB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,MAAM,iBAAiB,GAAG,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,mBAAmB,GAAG,+BAA+B,CAAC,iBAAiB,CAAC,CAAC;YAC9E,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9D,4BAA4B;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,UAAmB;QAC1C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,sBAAsB,EAAE,EAAE,OAAO,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5E,MAAM,IAAI,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,sBAAsB;QACpB,OAAO,IAAI,CAAC,cAAc,EAAE,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC;IAC9E,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,KAAK,CAAC;IAClG,CAAC;CACF"}
|
package/lib/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|