import { type AudioFrame, type Room, type RpcInvocationData, type TrackKind } from '@livekit/rtc-node';
import { AudioOutput } from '../io.js';
export interface DataStreamAudioOutputOptions {
    room: Room;
    destinationIdentity: string;
    sampleRate?: number;
    waitRemoteTrack?: TrackKind;
    /**
     * When true, defer the `playbackStarted` event until the remote participant invokes the
     * `lk.playback_started` RPC. When false (default), the event fires eagerly the moment the
     * first audio frame is captured. Set to true when the remote avatar worker can notify
     * actual playout start (e.g. an `AvatarRunner`).
     */
    waitPlaybackStart?: boolean;
}
/**
 * AudioOutput implementation that streams audio to a remote avatar worker using LiveKit DataStream.
 */
export declare class DataStreamAudioOutput extends AudioOutput {
    #private;
    static _playbackFinishedRpcRegistered: boolean;
    static _playbackFinishedHandlers: Record<string, (data: RpcInvocationData) => string>;
    static _playbackStartedRpcRegistered: boolean;
    static _playbackStartedHandlers: Record<string, (data: RpcInvocationData) => string>;
    private room;
    private destinationIdentity;
    private roomConnectedFuture;
    private waitRemoteTrack?;
    private waitPlaybackStart;
    private streamWriter?;
    private pushedDuration;
    private started;
    private lock;
    private startTask?;
    private firstFrameEmitted;
    constructor(opts: DataStreamAudioOutputOptions);
    private _start;
    captureFrame(frame: AudioFrame): Promise<void>;
    flush(): void;
    clearBuffer(): void;
    private handlePlaybackFinished;
    static registerPlaybackFinishedRpc({ room, callerIdentity, handler, }: {
        room: Room;
        callerIdentity: string;
        handler: (data: RpcInvocationData) => string;
    }): void;
    private handlePlaybackStarted;
    static registerPlaybackStartedRpc({ room, callerIdentity, handler, }: {
        room: Room;
        callerIdentity: string;
        handler: (data: RpcInvocationData) => string;
    }): void;
}
//# sourceMappingURL=datastream_io.d.ts.map