/**
 * Plyr 播放器封装模块
 * 提供简单易用的接口来创建和管理 Plyr 播放器实例
 *
 * @requires plyr 播放器库
 */
/**
 * Plyr 播放器配置选项
 */
export interface PlyrOptions {
    container: string | HTMLElement | (() => HTMLElement);
    source?: PlyrSource;
    autoplay?: boolean;
    muted?: boolean;
    loop?: {
        active: boolean;
    };
    volume?: number;
    controls?: string[] | null;
    hideControls?: boolean;
    resetOnEnd?: boolean;
    fullscreen?: {
        enabled: boolean;
        fallback: boolean;
        iosNative: boolean;
    };
    ratio?: string;
    storage?: {
        enabled: boolean;
        key: string;
    };
    speed?: {
        selected: number;
        options: number[];
    };
    quality?: {
        default: string;
        options: string[];
    };
    invertTime?: boolean;
    displayDuration?: boolean;
    markers?: {
        enabled: boolean;
        points: any[];
    };
    i18n?: Record<string, any>;
    debug?: boolean;
    loadSprite?: boolean;
}
/**
 * 媒体源配置
 */
export interface PlyrSource {
    type: 'audio' | 'video';
    title?: string;
    sources: PlyrMediaSource[];
    poster?: string;
    tracks?: PlyrTrack[];
}
/**
 * 媒体源
 */
export interface PlyrMediaSource {
    src: string;
    type?: string;
    provider?: string;
    size?: number;
}
/**
 * 字幕/章节轨道
 */
export interface PlyrTrack {
    kind: string;
    label: string;
    src: string;
    srclang?: string;
    default?: boolean;
}
/**
 * Plyr播放器事件类型
 */
export type PlyrEventType = 'ready' | 'play' | 'pause' | 'ended' | 'timeupdate' | 'seeking' | 'seeked' | 'volumechange' | 'enterfullscreen' | 'exitfullscreen' | 'captionsenabled' | 'captionsdisabled' | 'languagechange' | 'controlshidden' | 'controlsshown' | 'loading' | 'loadeddata' | 'loadedmetadata' | 'canplay' | 'canplaythrough' | 'playing' | 'progress' | 'error';
/**
 * Plyr播放器类型
 */
export interface PlyrPlayer {
    play(): Promise<void>;
    pause(): void;
    stop(): void;
    restart(): void;
    rewind(seekTime: number): void;
    forward(seekTime: number): void;
    increaseVolume(step: number): void;
    decreaseVolume(step: number): void;
    togglePlay(toggle?: boolean): void;
    toggleMute(toggle?: boolean): void;
    isPlaying(): boolean;
    isPaused(): boolean;
    playing: boolean;
    paused: boolean;
    stopped: boolean;
    source: PlyrSource;
    media: HTMLMediaElement;
    elements: Record<string, HTMLElement>;
    volume: number;
    muted: boolean;
    duration: number;
    currentTime: number;
    loop: boolean;
    speed: number;
    quality?: string;
    currentTrack: number;
    language: string;
    fullscreen: {
        active: boolean;
        enabled: boolean;
    };
    on(event: PlyrEventType, callback: (event: Event) => void): void;
    once(event: PlyrEventType, callback: (event: Event) => void): void;
    off(event: PlyrEventType, callback: (event: Event) => void): void;
    destroy(): void;
    supports(type: string): boolean;
    toggleCaptions(toggle?: boolean): void;
    airplay(): void;
    storage: Record<string, any>;
}
/**
 * 创建Plyr播放器的选项
 */
export interface CreatePlyrOptions extends PlyrOptions {
    plyrLibOptions?: {
        source?: 'cdn' | 'local' | 'external' | 'npm';
        cdnUrl?: string;
        cssUrl?: string;
        externalLib?: any;
    };
    initOnLoad?: boolean;
    autoCreateCss?: boolean;
}
/**
 * 增强型Plyr播放器
 */
export interface EnhancedPlyrPlayer extends PlyrPlayer {
    setSource(source: PlyrSource | string): Promise<void>;
    changeAspectRatio(ratio: string): void;
    getContainer(): HTMLElement;
    getDefaultOptions(): PlyrOptions;
    addShortcut(key: string, action: () => void): void;
    getCaptureImage(): string | null;
    downloadMedia(filename?: string): void;
    setPoster(url: string): void;
    isFullscreen(): boolean;
    enterPictureInPicture(): Promise<void>;
    exitPictureInPicture(): Promise<void>;
    togglePictureInPicture(): Promise<void>;
    reload(): void;
    getQualityOptions(): string[];
    setQuality(quality: string): void;
    getSpeedOptions(): number[];
    setCustomControls(controls: string[]): void;
    addMarker(time: number, label?: string, color?: string): void;
    removeMarker(time: number): void;
    clearMarkers(): void;
}
declare const DEFAULT_OPTIONS: Partial<PlyrOptions>;
/**
 * 创建增强型Plyr播放器
 * @param options 播放器选项
 * @returns 增强型播放器实例
 */
export declare function createPlyrPlayer(options: CreatePlyrOptions): Promise<EnhancedPlyrPlayer>;
/**
 * 快速创建Plyr播放器
 * @param source 媒体源URL或配置
 * @param container 容器元素或选择器
 * @param options 附加选项
 * @returns 播放器实例
 */
export declare function playWithPlyr(source: string | PlyrSource, container: string | HTMLElement, options?: Partial<CreatePlyrOptions>): Promise<EnhancedPlyrPlayer>;
/**
 * 创建播放列表
 * @param sources 媒体源列表
 * @param container 容器元素或选择器
 * @param options 播放器选项
 * @returns 播放器实例和列表控制器
 */
export declare function createPlaylist(sources: (string | PlyrSource)[], container: string | HTMLElement, options?: Partial<CreatePlyrOptions>): Promise<{
    player: EnhancedPlyrPlayer;
    next: () => Promise<void>;
    previous: () => Promise<void>;
    playIndex: (index: number) => Promise<void>;
    currentIndex: number;
    sources: (string | PlyrSource)[];
}>;
export { DEFAULT_OPTIONS as defaultPlyrOptions };
