import type { KvPair } from '../moq/moqt.js';
import { type LOCMediaType } from './loc_packager.js';
export type PackagerFormat = 'loc' | 'cmaf';
/** Extras a packager may need that are not part of the encoded chunk itself. */
export interface PackagerSourceInfo {
    codedWidth?: number;
    codedHeight?: number;
    durationUs?: number;
    startsGroup?: boolean;
}
/**
 * What the sender needs from a packager to turn one encoded chunk into one MoQ
 * object: set the chunk, then read back the payload and the object properties.
 */
export interface MediaPackager {
    SetData(timestamp: number | undefined, timescale: number | undefined, codec: string | undefined, config: Uint8Array | ArrayBuffer | undefined, data: any, isDelta: boolean | undefined): void;
    PayloadToBytes(): any;
    Properties(): KvPair[];
    IsDelta(): boolean | undefined;
    GetDataStr(): string;
    SetSourceInfo?(info: PackagerSourceInfo): void;
}
/** One received object, decoded far enough to feed a WebCodecs decoder. */
export interface ParsedMediaData {
    mediaType: LOCMediaType;
    timestamp: number | undefined;
    timescale: number | undefined;
    codec: string | undefined;
    config: Uint8Array | ArrayBuffer | undefined;
    data: any;
}
/**
 * The mirror image of MediaPackager: what the receiver needs to turn one MoQ
 * object back into an encoded frame.
 *
 * A depackager instance belongs to ONE track and is kept for the lifetime of
 * the subscription: CMSF spreads its track description over the objects that
 * carry a CMAF Header, so the parser has to remember it. Until one has been
 * received, `GetData()` reports an undefined timescale and the object cannot be
 * decoded.
 */
export interface MediaDepackager {
    ParseData(readerStream: any, properties: KvPair[], payloadLength?: number): Promise<void>;
    GetData(): ParsedMediaData;
    GetDataStr(): string;
    IsDelta(): boolean | undefined;
    IsEof(): boolean;
}
/**
 * One packager instance per media type. CMAF instances are stateful (they carry
 * the `moof` sequence number and the initialization header), so the caller must
 * keep them for the lifetime of the track rather than creating one per chunk.
 *
 * CMAF describes audio and video only, so any other media type (an opaque
 * `data` track) is rejected rather than silently packaged as something else.
 */
export declare function createPackager(format: PackagerFormat, mediaType: LOCMediaType): MediaPackager;
/**
 * One depackager instance per subscribed track, kept for the lifetime of the
 * subscription (see MediaDepackager). Like createPackager, CMAF covers audio
 * and video only.
 */
export declare function createDepackager(format: PackagerFormat, mediaType: LOCMediaType): MediaDepackager;
/**
 * MOQT track name for a media type. The same in both formats, so switching
 * packagers does not change the names a subscriber has to ask for.
 */
export declare function getMediaTrackName(trackPrefix: string, isAudio: boolean, suffix?: string): string;
//# sourceMappingURL=media_packager.d.ts.map