import type { Nullable } from "homebridge-plugin-utils";
import type { ChannelProfile } from "./resolution.ts";
import { EventEmitter } from "node:events";
import type { ProtectCameraHost } from "./camera-host.ts";
export type TimeshiftStopCause = "ended" | "giveUp";
export type SegmentRole = "blob" | "live";
interface TimeshiftBufferEvents {
    discontinuity: [];
    segment: [data: Buffer, role: SegmentRole];
    stopped: [cause: TimeshiftStopCause];
    terminated: [];
}
interface KeyframeAlignedStart {
    seekOffsetMs: number;
    startIndex: number;
}
export type SnapshotSource = {
    data: Buffer;
    fps: number;
    kind: "fresh";
} | {
    kind: "empty";
} | {
    kind: "stale";
};
export declare class ProtectTimeshiftBuffer extends EventEmitter<TimeshiftBufferEvents> {
    private _channelProfile;
    private _isTransmitting;
    private _lastKeyframeTime;
    private _pendingDiscontinuity;
    private _pendingStopCause;
    private _segments;
    private readonly _segmentLength;
    private readonly clock;
    private readonly log;
    private readonly protectCamera;
    private segmentCount;
    private subscription?;
    constructor(protectCamera: ProtectCameraHost);
    start(channelProfile: ChannelProfile): Promise<boolean>;
    private consumeSegments;
    private selfHeal;
    private finalizeSubscription;
    private processSegment;
    stop(): boolean;
    private clearBuffer;
    transmitStart(startIndex?: number): Nullable<number>;
    transmitStop(): boolean;
    getLast(duration: number): Nullable<Buffer>;
    snapshotSource(): SnapshotSource;
    getKeyframeAlignedStart(prebufferMs: number): Nullable<KeyframeAlignedStart>;
    get buffer(): Nullable<Buffer>;
    get channelProfile(): Nullable<ChannelProfile>;
    get isRestarting(): boolean;
    get isStarted(): boolean;
    get isTransmitting(): boolean;
    get time(): number;
    get configuredDuration(): number;
    set configuredDuration(bufferMillis: number);
    get segmentLength(): number;
}
export {};
//# sourceMappingURL=timeshift.d.ts.map