UNPKG

mstf-kit

Version:

一个现代化的 JavaScript/TypeScript 工具库,提供了丰富的常用工具函数

196 lines (195 loc) 5.61 kB
/** * 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 };