/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
/// <reference types="node" />
import { CameraController, CameraRecordingConfiguration, CameraRecordingDelegate, HDSProtocolSpecificErrorReason, RecordingPacket } from 'homebridge';
import { ChildProcess } from 'child_process';
import { Socket, Server } from 'net';
import { Readable } from 'stream';
import { LoxonePlatform } from '../../LoxonePlatform';
export interface MP4Atom {
    header: Buffer;
    length: number;
    type: string;
    data: Buffer;
}
export interface FFMpegFragmentedMP4Session {
    socket: Socket;
    cp: ChildProcess;
    generator: AsyncGenerator<MP4Atom>;
}
export declare const PREBUFFER_LENGTH = 4000;
export declare const FRAGMENTS_LENGTH = 4000;
export declare function listenServer(server: Server): Promise<number>;
export declare function readLength(readable: Readable, length: number): Promise<Buffer>;
export declare function parseFragmentedMP4(readable: Readable): AsyncGenerator<MP4Atom>;
export declare class RecordingDelegate implements CameraRecordingDelegate {
    readonly platform: LoxonePlatform;
    private readonly hap;
    private readonly log;
    private readonly cameraName;
    private process;
    private readonly videoProcessor;
    readonly controller: CameraController | undefined;
    private preBufferSession;
    private preBuffer;
    constructor(platform: LoxonePlatform, ip: string);
    updateRecordingActive(active: boolean): void;
    updateRecordingConfiguration(configuration: CameraRecordingConfiguration | undefined): void;
    handleRecordingStreamRequest(streamId: number): AsyncGenerator<RecordingPacket, any, unknown>;
    acknowledgeStream?(streamId: number): void;
    closeRecordingStream(streamId: number, reason: HDSProtocolSpecificErrorReason | undefined): void;
    startPreBuffer(): Promise<void>;
    handleFragmentsRequests(configuration: CameraRecordingConfiguration): AsyncGenerator<Buffer, void, unknown>;
    startFFMPegFragmetedMP4Session(ffmpegPath: string, ffmpegInput: string[], audioOutputArgs: string[], videoOutputArgs: string[]): Promise<FFMpegFragmentedMP4Session>;
}
//# sourceMappingURL=RecordingDelegate.d.ts.map