UNPKG

@bililive-tools/manager

Version:
99 lines (98 loc) 4.44 kB
import { Emitter } from "mitt"; import { ChannelId, Message } from "./common.js"; import { RecorderCreateOpts, Recorder, SerializedRecorder, RecordHandle, DebugLog, Progress } from "./recorder.js"; import { AnyObject, UnknownObject } from "./utils.js"; import { StreamManager } from "./streamManager.js"; export interface RecorderProvider<E extends AnyObject> { id: string; name: string; siteURL: string; matchURL: (this: RecorderProvider<E>, channelURL: string) => boolean; resolveChannelInfoFromURL: (this: RecorderProvider<E>, channelURL: string) => Promise<{ id: ChannelId; title: string; owner: string; uid?: number; } | null>; createRecorder: (this: RecorderProvider<E>, opts: Omit<RecorderCreateOpts<E>, "providerId">) => Recorder<E>; fromJSON: <T extends SerializedRecorder<E>>(this: RecorderProvider<E>, json: T) => Recorder<E>; setFFMPEGOutputArgs: (this: RecorderProvider<E>, args: string[]) => void; } declare const configurableProps: readonly ["savePathRule", "autoRemoveSystemReservedChars", "autoCheckInterval", "ffmpegOutputArgs", "biliBatchQuery"]; type ConfigurableProp = (typeof configurableProps)[number]; export interface RecorderManager<ME extends UnknownObject, P extends RecorderProvider<AnyObject> = RecorderProvider<UnknownObject>, PE extends AnyObject = GetProviderExtra<P>, E extends AnyObject = ME & PE> extends Emitter<{ error: { source: string; err: unknown; }; RecordStart: { recorder: Recorder<E>; recordHandle: RecordHandle; }; RecordSegment: { recorder: Recorder<E>; recordHandle?: RecordHandle; }; videoFileCreated: { recorder: Recorder<E>; filename: string; }; videoFileCompleted: { recorder: Recorder<E>; filename: string; }; RecorderProgress: { recorder: Recorder<E>; progress: Progress; }; RecoderLiveStart: { recorder: Recorder<E>; }; RecordStop: { recorder: Recorder<E>; recordHandle: RecordHandle; reason?: string; }; Message: { recorder: Recorder<E>; message: Message; }; RecorderUpdated: { recorder: Recorder<E>; keys: (string | keyof Recorder<E>)[]; }; RecorderAdded: Recorder<E>; RecorderRemoved: Recorder<E>; RecorderDebugLog: DebugLog & { recorder: Recorder<E>; }; Updated: ConfigurableProp[]; }> { providers: P[]; getChannelURLMatchedRecorderProviders: (this: RecorderManager<ME, P, PE, E>, channelURL: string) => P[]; recorders: Recorder<E>[]; addRecorder: (this: RecorderManager<ME, P, PE, E>, opts: RecorderCreateOpts<E>) => Recorder<E>; removeRecorder: (this: RecorderManager<ME, P, PE, E>, recorder: Recorder<E>) => void; startRecord: (this: RecorderManager<ME, P, PE, E>, id: string) => Promise<Recorder<E> | undefined>; stopRecord: (this: RecorderManager<ME, P, PE, E>, id: string) => Promise<Recorder<E> | undefined>; autoCheckInterval: number; isCheckLoopRunning: boolean; startCheckLoop: (this: RecorderManager<ME, P, PE, E>) => void; stopCheckLoop: (this: RecorderManager<ME, P, PE, E>) => void; savePathRule: string; autoRemoveSystemReservedChars: boolean; ffmpegOutputArgs: string; /** b站使用批量查询接口 */ biliBatchQuery: boolean; } export type RecorderManagerCreateOpts<ME extends AnyObject = UnknownObject, P extends RecorderProvider<AnyObject> = RecorderProvider<UnknownObject>, PE extends AnyObject = GetProviderExtra<P>, E extends AnyObject = ME & PE> = Partial<Pick<RecorderManager<ME, P, PE, E>, ConfigurableProp>> & { providers: P[]; }; export declare function createRecorderManager<ME extends AnyObject = UnknownObject, P extends RecorderProvider<AnyObject> = RecorderProvider<UnknownObject>, PE extends AnyObject = GetProviderExtra<P>, E extends AnyObject = ME & PE>(opts: RecorderManagerCreateOpts<ME, P, PE, E>): RecorderManager<ME, P, PE, E>; export declare function genSavePathFromRule<ME extends AnyObject, P extends RecorderProvider<AnyObject>, PE extends AnyObject, E extends AnyObject>(manager: RecorderManager<ME, P, PE, E>, recorder: Recorder<E>, extData: { owner: string; title: string; startTime?: number; }): string; export type GetProviderExtra<P> = P extends RecorderProvider<infer E> ? E : never; export { StreamManager };