UNPKG

thunder-player-sdk

Version:

Thunder Player SDK - A WebAssembly-based H.264 video player for web browsers

413 lines (357 loc) 9.06 kB
/** * Thunder Player SDK TypeScript Type Definitions * @version 1.0.2 * @description 完整的TypeScript类型声明,支持IDE自动补全和类型检查 */ // ============ 类型定义 ============ /** * 播放器状态枚举 */ export enum PlayerState { /** 空闲状态 */ Idle = 0, /** 播放中 */ Playing = 1, /** 暂停中 */ Pausing = 2, /** 跳转中 */ Seeking = 3, /** 清理中 */ Cleaning = 4 } /** * SDK初始化参数 */ export interface SDKAuthParams { /** 应用ID(必需) */ appid: string; /** 用户ID(可选) */ uid?: string; /** SDK序列号(必需) */ sdk_sn: string; /** 认证服务器地址(可选,优先级最高) */ authServer?: string; } /** * 播放结果 */ export interface PlayResult { /** 错误码,0表示成功 */ e: number; /** 错误信息 */ m: string; } /** * 视频信息 */ export interface VideoInfo { /** 视频宽度 */ width: number; /** 视频高度 */ height: number; /** 视频编码格式 */ codec: string; /** 像素格式 */ pixelFormat: string; } /** * 音频信息 */ export interface AudioInfo { /** 音频编码格式 */ codec: string; /** 音频声道数 */ channels: number; /** 采样率 */ sampleRate: number; } /** * 缓冲区信息 */ export interface BufferInfo { /** 音频帧缓冲数量 */ audioFrames: number; /** 视频帧缓冲数量 */ videoFrames: number; /** 缓冲时长(秒) */ bufferTime: number; } /** * 媒体信息 */ export interface MediaInfo { /** 总时长(秒) */ duration: number; /** 当前播放时间(秒) */ currentTime: number; /** 播放进度(0-1) */ progress: number; /** 视频信息 */ video: VideoInfo; /** 音频信息 */ audio: AudioInfo; /** 播放器状态字符串 */ state: string; /** 缓冲区信息 */ bufferInfo: BufferInfo; } /** * 时间更新事件数据 */ export interface TimeUpdateEventData { /** 当前播放时间(秒) */ currentTime: number; /** 总时长(秒) */ duration: number; /** 播放进度(0-100) */ progress: number; } /** * 元数据加载事件数据 */ export interface LoadedMetadataEventData { /** 视频信息 */ video: VideoInfo; /** 音频信息 */ audio: AudioInfo; /** 总时长(秒) */ duration: number; } /** * 错误事件数据 */ export interface ErrorEventData { /** 错误码 */ code: string; /** 错误消息 */ message: string; /** 错误详情 */ details?: any; } // ============ 事件类型定义 ============ /** * 播放器事件名称 */ export type PlayerEventName = | 'play' // 开始播放 | 'pause' // 暂停 | 'resume' // 恢复播放 | 'stop' // 停止 | 'ended' // 播放结束 | 'timeupdate' // 时间更新 | 'loadedmetadata' // 元数据加载完成 | 'loadingstart' // 开始加载 | 'loadingend' // 加载结束 | 'error' // 错误 | 'statechange'; // 状态变化 /** * 事件数据映射表 */ export interface PlayerEventMap { 'play': {}; 'pause': {}; 'resume': {}; 'stop': {}; 'ended': {}; 'timeupdate': TimeUpdateEventData; 'loadedmetadata': LoadedMetadataEventData; 'loadingstart': {}; 'loadingend': {}; 'error': ErrorEventData; 'statechange': { state: PlayerState }; } /** * 事件回调函数类型 */ export type EventCallback<T extends PlayerEventName> = (data: PlayerEventMap[T]) => void; // ============ Player 类定义 ============ /** * Thunder Player SDK 主类 * * @example * ```typescript * const player = new Player(); * * // 初始化SDK * await player.initSDK({ * appid: 'your-app-id', * sdk_sn: 'your-sdk-sn', * authServer: 'https://your-auth-server.com' * }); * * // 播放视频 * const canvas = document.getElementById('video-canvas') as HTMLCanvasElement; * const result = player.play('https://example.com/video.ts', canvas); * * // 监听事件 * player.on('timeupdate', (data) => { * console.log(`当前播放时间: ${data.currentTime}秒`); * }); * ``` */ export class Player { // ============ 构造和初始化 ============ /** * 创建播放器实例 */ constructor(); /** * 初始化SDK环境(必须在播放前调用) * @param authParams 认证参数 * @returns Promise,初始化成功返回true * @throws 如果认证参数无效 */ initSDK(authParams: SDKAuthParams): Promise<boolean>; /** * 检查SDK是否已初始化 * @returns SDK是否已初始化 */ isSDKInitialized(): boolean; // ============ 播放控制 ============ /** * 播放视频 * @param url 视频URL(支持 .ts .ls .uls .mls 格式) * @param canvas Canvas元素用于视频渲染 * @param callback 可选的回调函数(已废弃,建议使用事件监听) * @returns 播放结果 */ play(url: string, canvas: HTMLCanvasElement, callback?: Function): PlayResult; /** * 暂停播放 */ pause(): void; /** * 恢复播放(暂停后) * @param fromSeek 是否来自跳转操作 */ resume(fromSeek?: boolean): void; /** * 停止播放 */ stop(): Promise<void>; /** * 跳转到指定时间 * @param timeMs 目标时间(毫秒) */ seekTo(timeMs: number): void; // ============ 音量控制 ============ /** * 设置音量 * @param volume 音量值(0.0 - 1.0) */ setVolume(volume: number): void; /** * 获取当前音量 * @returns 音量值(0.0 - 1.0) */ getVolume(): number; // ============ 播放速度控制 ============ /** * 设置播放速度 * @param speed 播放速度倍率(0.1 - 10.0,1.0为正常速度) */ setPlaybackSpeed(speed: number): void; /** * 获取当前播放速度 * @returns 播放速度倍率 */ getPlaybackSpeed(): number; // ============ 状态和信息获取 ============ /** * 获取播放器状态 * @returns 播放器状态码 */ getState(): PlayerState; /** * 获取当前播放时间 * @returns 当前时间(秒) */ getCurrentTime(): number; /** * 获取视频总时长 * @returns 总时长(秒) */ getDuration(): number; /** * 获取播放进度 * @returns 进度值(0.0 - 1.0) */ getProgress(): number; /** * 获取下载缓存进度 * @returns 缓存进度(0.0 - 1.0) */ getDownloadProgress(): number; /** * 获取完整的媒体信息 * @returns 媒体信息对象 */ getMediaInfo(): MediaInfo; /** * 获取缓冲区信息 * @returns 缓冲区信息 */ getBufferInfo(): BufferInfo; /** * 获取当前FPS * @returns FPS值 */ getCurrentFps(): number; /** * 获取SDK版本号 * @returns 版本号字符串 */ getVersion(): string; // ============ 事件系统 ============ /** * 注册事件监听器 * @param eventName 事件名称 * @param callback 回调函数 * @returns 播放器实例(支持链式调用) */ on<T extends PlayerEventName>(eventName: T, callback: EventCallback<T>): this; /** * 移除事件监听器 * @param eventName 事件名称 * @param callback 要移除的回调函数(可选,不传则移除该事件的所有监听器) * @returns 播放器实例(支持链式调用) */ off<T extends PlayerEventName>(eventName: T, callback?: EventCallback<T>): this; // ============ 资源管理 ============ /** * 销毁播放器实例,释放所有资源 * 推荐在页面卸载或不再需要播放器时调用 */ destroy(): void; // ============ 高级功能 ============ /** * 启用/禁用自动页面可见性处理 * @param enabled 是否启用 * @returns 播放器实例(支持链式调用) */ enableAutoVisibilityHandling(enabled: boolean): this; /** * 切换音轨 */ switchAudioTrack(): void; /** * 全屏播放 */ fullscreen(): void; } // ============ 默认导出 ============ export default Player; // ============ 全局类型扩展(如果通过script标签引入) ============ declare global { interface Window { Player: typeof Player; THUNDER_AUTH_SERVER?: string; THUNDER_CONFIG?: { authServer?: string; apiTimeout?: number; retryCount?: number; logLevel?: 'debug' | 'info' | 'warn' | 'error'; enableDebug?: boolean; }; } }