import EventEmitter from "node:events";
import { createRecordExtraDataController } from "../xml_stream_controller.js";
import type { RecorderCreateOpts } from "../recorder.js";
import type { TrueVideoFormat } from "../index.js";
import type { XmlStreamStats } from "../xml_stream_controller.js";
export type GetSavePath = (data: {
    startTime: number;
    title?: string;
    extraMs?: boolean;
}) => string;
type RecorderType = Exclude<RecorderCreateOpts["recorderType"], undefined | "auto">;
export interface VideoFileCompletedPayload {
    filename: string;
    stats?: XmlStreamStats;
}
export declare class Segment extends EventEmitter {
    extraDataController: ReturnType<typeof createRecordExtraDataController> | null;
    init: boolean;
    getSavePath: GetSavePath;
    /** 原始的文件名，用于重命名 */
    rawRecordingVideoPath: string;
    /** 输出文件名名，不包含拓展名 */
    outputVideoFilePath: string;
    disableDanma: boolean;
    videoExt: TrueVideoFormat;
    options?: {
        firstStartTime: number;
    };
    constructor(getSavePath: GetSavePath, disableDanma: boolean, videoExt: TrueVideoFormat, options?: {
        firstStartTime: number;
    });
    private getVideoFileCompletedPayload;
    handleSegmentEnd(): Promise<void>;
    onSegmentStart(stderrLine: string, callBack?: {
        onUpdateLiveInfo: () => Promise<{
            title?: string;
            cover?: string;
        }>;
    }): Promise<void>;
    get outputFilePath(): string;
}
export declare class StreamManager extends EventEmitter {
    private segment;
    private extraDataController;
    recordSavePath: string;
    recordStartTime?: number;
    hasSegment: boolean;
    recorderType: RecorderType;
    private videoFormat;
    private callBack?;
    constructor(getSavePath: GetSavePath, hasSegment: boolean, disableDanma: boolean, recorderType: RecorderType, videoFormat: TrueVideoFormat, callBack?: {
        onUpdateLiveInfo: () => Promise<{
            title?: string;
            cover?: string;
        }>;
    });
    handleVideoStarted(stderrLine: string): Promise<void>;
    handleVideoCompleted(): Promise<void>;
    getExtraDataController(): import("../xml_stream_controller.js").XmlStreamController | null;
    get videoExt(): TrueVideoFormat;
    get videoFilePath(): string;
}
export {};
