mstf-kit
Version:
一个现代化的 JavaScript/TypeScript 工具库,提供了丰富的常用工具函数
196 lines (195 loc) • 5.61 kB
TypeScript
/**
* 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 };