TypeScript Types Documentation
MediaFox provides comprehensive TypeScript support with detailed type definitions for all APIs. This document covers all the available types and interfaces.
Core Player Types
PlayerOptions
typescript
interface PlayerOptions {
/** Canvas element for video rendering */
renderTarget?: HTMLCanvasElement | OffscreenCanvas;
/** Audio context for audio playback */
audioContext?: AudioContext;
/** Initial volume level (0-1) */
volume?: number;
/** Initial mute state */
muted?: boolean;
/** Initial playback speed (0.25-4) */
playbackRate?: number;
/** Auto-play when media loads */
autoplay?: boolean;
/** Preloading strategy */
preload?: 'none' | 'metadata' | 'auto';
/** CORS setting for cross-origin content */
crossOrigin?: string;
/** Maximum cache size for buffering */
maxCacheSize?: number;
}PlayerStateData
typescript
interface PlayerStateData {
/** Overall player state */
state: PlayerState;
/** Current playback time in seconds */
currentTime: number;
/** Total duration in seconds */
duration: number;
/** Buffered time ranges */
buffered: TimeRange[];
/** Volume level (0-1) */
volume: number;
/** Mute state */
muted: boolean;
/** Playback speed */
playbackRate: number;
/** Whether media is actively playing */
playing: boolean;
/** Whether playback is paused */
paused: boolean;
/** Whether playback has ended */
ended: boolean;
/** Whether seeking is in progress */
seeking: boolean;
/** Current error, if any */
error: Error | null;
/** Media information */
mediaInfo: MediaInfo | null;
/** Available video tracks */
videoTracks: VideoTrackInfo[];
/** Available audio tracks */
audioTracks: AudioTrackInfo[];
/** Available subtitle tracks */
subtitleTracks: SubtitleTrackInfo[];
/** Currently selected video track ID */
selectedVideoTrack: string | null;
/** Currently selected audio track ID */
selectedAudioTrack: string | null;
/** Currently selected subtitle track ID */
selectedSubtitleTrack: string | null;
/** Whether playback can start */
canPlay: boolean;
/** Whether playback can continue without buffering */
canPlayThrough: boolean;
/** Whether this is a live stream */
isLive: boolean;
}PlayerState Enum
typescript
type PlayerState = 'idle' | 'loading' | 'ready' | 'playing' | 'paused' | 'ended' | 'error';duration: number; buffered: TimeRanges | null; seekable: TimeRanges | null;
/** Audio properties */ volume: number; muted: boolean;
/** Loading and seeking state */ loading: boolean; seeking: boolean; readyState: ReadyState;
/** Media dimensions */ videoWidth: number; videoHeight: number;
/** Playback configuration */ playbackRate: number;
/** Current track selections */ currentVideoTrack: number; currentAudioTrack: number;
/** Error state */ error: Error | null; }
### ReadyState
```typescript
enum ReadyState {
/** No information available */
HAVE_NOTHING = 0,
/** Metadata loaded */
HAVE_METADATA = 1,
/** Current frame available */
HAVE_CURRENT_DATA = 2,
/** Future frames available */
HAVE_FUTURE_DATA = 3,
/** Enough data for continuous playback */
HAVE_ENOUGH_DATA = 4
}Event Types
PlayerEvents
typescript
interface PlayerEvents {
// Playback events
play: () => void;
pause: () => void;
ended: () => void;
seeking: () => void;
seeked: () => void;
timeupdate: (currentTime: number) => void;
ratechange: (playbackRate: number) => void;
// Loading events
loadstart: () => void;
loadedmetadata: () => void;
loadeddata: () => void;
canplay: () => void;
canplaythrough: () => void;
progress: (buffered: TimeRanges) => void;
waiting: () => void;
stalled: () => void;
// Audio events
volumechange: (volume: number, muted: boolean) => void;
// Error events
error: (error: Error) => void;
// Track events
tracksChanged: (tracks: TrackList) => void;
trackChanged: (type: 'video' | 'audio', trackIndex: number) => void;
trackSwitching: (type: 'video' | 'audio') => void;
trackSwitched: (type: 'video' | 'audio', trackIndex: number) => void;
// Source events
sourceChanged: (source: string) => void;
// Player lifecycle
ready: () => void;
destroy: () => void;
// Frame events
frameChanged: (frame: VideoFrame) => void;
frameRendered: (timestamp: number) => void;
// Memory events
memoryUsage: (bytes: number) => void;
// Custom events
[key: string]: (...args: any[]) => void;
}EventEmitterEvents
typescript
interface EventEmitterEvents {
/** Fired when a new listener is added */
newListener: (event: string, listener: Function) => void;
/** Fired when a listener is removed */
removeListener: (event: string, listener: Function) => void;
/** Fired when max listeners limit is exceeded */
maxListeners: (event: string, count: number) => void;
}Track Types
TrackList
typescript
interface TrackList {
video: VideoTrack[];
audio: AudioTrack[];
}VideoTrack
typescript
interface VideoTrack {
/** Unique track identifier */
id: string;
/** Human-readable track label */
label?: string;
/** Track language code */
language?: string;
/** Video dimensions */
width: number;
height: number;
/** Frame rate in fps */
frameRate: number;
/** Bitrate in bits per second */
bitrate?: number;
/** Video codec information */
codec: string;
/** Whether track is currently enabled */
enabled: boolean;
/** Additional metadata */
metadata?: Record<string, any>;
}AudioTrack
typescript
interface AudioTrack {
/** Unique track identifier */
id: string;
/** Human-readable track label */
label?: string;
/** Track language code */
language?: string;
/** Number of audio channels */
channels: number;
/** Sample rate in Hz */
sampleRate: number;
/** Bitrate in bits per second */
bitrate?: number;
/** Audio codec information */
codec: string;
/** Whether track is currently enabled */
enabled: boolean;
/** Additional metadata */
metadata?: Record<string, any>;
}Source Types
SourceInput
typescript
type SourceInput =
| string // URL
| File // File object
| Blob // Blob object
| ArrayBuffer // Raw buffer
| MediaStream // Live stream
| MediaSource // Media Source Extension
| HTMLVideoElement // Video element
| SourceConfig; // Complex source configurationSourceConfig
typescript
interface SourceConfig {
/** Source URL or data */
src: string | File | Blob | ArrayBuffer | MediaStream;
/** MIME type override */
type?: string;
/** Source metadata */
metadata?: SourceMetadata;
/** Loading options */
options?: SourceOptions;
}SourceMetadata
typescript
interface SourceMetadata {
/** Media title */
title?: string;
/** Media duration (if known) */
duration?: number;
/** Media dimensions (if known) */
width?: number;
height?: number;
/** Available tracks information */
tracks?: Partial<TrackList>;
/** Custom metadata */
[key: string]: any;
}SourceOptions
typescript
interface SourceOptions {
/** Preload strategy */
preload?: 'none' | 'metadata' | 'auto';
/** CORS mode */
crossOrigin?: 'anonymous' | 'use-credentials';
/** Custom headers for requests */
headers?: Record<string, string>;
/** Timeout for loading operations */
timeout?: number;
/** Enable progressive loading */
progressive?: boolean;
/** Initial buffer size */
bufferSize?: number;
}Store Types
StoreOptions
typescript
interface StoreOptions {
/** Initial state */
initialState?: Partial<PlayerState>;
/** Enable batched updates */
batchUpdates?: boolean;
/** Batch update interval in ms */
batchInterval?: number;
/** Maximum number of subscribers */
maxSubscribers?: number;
}StoreSubscriber
typescript
type StoreSubscriber<T> = (state: T) => void;
interface StoreUnsubscribe {
(): void;
}Error Types
PlayerError
typescript
class PlayerError extends Error {
readonly code: PlayerErrorCode;
readonly details?: any;
readonly timestamp: number;
constructor(
code: PlayerErrorCode,
message: string,
details?: any
);
}PlayerErrorCode
typescript
enum PlayerErrorCode {
/** Generic unknown error */
UNKNOWN = 'UNKNOWN',
/** Network-related errors */
NETWORK_ERROR = 'NETWORK_ERROR',
NETWORK_TIMEOUT = 'NETWORK_TIMEOUT',
NETWORK_ABORT = 'NETWORK_ABORT',
/** Media format errors */
MEDIA_FORMAT_ERROR = 'MEDIA_FORMAT_ERROR',
MEDIA_DECODE_ERROR = 'MEDIA_DECODE_ERROR',
MEDIA_UNSUPPORTED = 'MEDIA_UNSUPPORTED',
/** Source errors */
SOURCE_NOT_FOUND = 'SOURCE_NOT_FOUND',
SOURCE_INVALID = 'SOURCE_INVALID',
SOURCE_CORRUPTED = 'SOURCE_CORRUPTED',
/** Player state errors */
INVALID_STATE = 'INVALID_STATE',
OPERATION_ABORTED = 'OPERATION_ABORTED',
PERMISSION_DENIED = 'PERMISSION_DENIED',
/** Track errors */
TRACK_NOT_FOUND = 'TRACK_NOT_FOUND',
TRACK_SWITCH_FAILED = 'TRACK_SWITCH_FAILED',
/** Memory errors */
OUT_OF_MEMORY = 'OUT_OF_MEMORY',
MEMORY_LIMIT_EXCEEDED = 'MEMORY_LIMIT_EXCEEDED'
}MediaError
typescript
interface MediaError extends Error {
readonly code: number;
readonly MEDIA_ERR_ABORTED: 1;
readonly MEDIA_ERR_NETWORK: 2;
readonly MEDIA_ERR_DECODE: 3;
readonly MEDIA_ERR_SRC_NOT_SUPPORTED: 4;
}Plugin Types
Plugin
typescript
interface Plugin {
/** Plugin name */
readonly name: string;
/** Plugin version */
readonly version: string;
/** Initialize the plugin */
init(player: MediaFox, options?: any): void | Promise<void>;
/** Cleanup when plugin is destroyed */
destroy?(): void | Promise<void>;
}PluginOptions
typescript
interface PluginOptions {
[key: string]: any;
}Utility Types
TimeRanges
typescript
interface TimeRanges {
readonly length: number;
start(index: number): number;
end(index: number): number;
}CanvasPool
typescript
interface CanvasPool {
getCanvas(width: number, height: number): HTMLCanvasElement;
returnCanvas(canvas: HTMLCanvasElement): void;
clear(): void;
}VideoFrame
typescript
interface VideoFrame {
readonly displayWidth: number;
readonly displayHeight: number;
readonly duration: number;
readonly timestamp: number;
readonly format: string;
close(): void;
clone(): VideoFrame;
}AudioBuffer
typescript
interface AudioBuffer {
readonly length: number;
readonly duration: number;
readonly sampleRate: number;
readonly numberOfChannels: number;
getChannelData(channel: number): Float32Array;
copyFromChannel(
destination: Float32Array,
channelNumber: number,
startInChannel?: number
): void;
copyToChannel(
source: Float32Array,
channelNumber: number,
startInChannel?: number
): void;
}Generic Types
EventMap
typescript
type EventMap = Record<string, (...args: any[]) => void>;Listener
typescript
type Listener<T extends EventMap, K extends keyof T> = T[K];EventNames
typescript
type EventNames<T extends EventMap> = keyof T;Parameters
typescript
type EventParameters<
T extends EventMap,
K extends keyof T
> = Parameters<T[K]>;Type Guards
Source Type Guards
typescript
function isFile(source: SourceInput): source is File;
function isBlob(source: SourceInput): source is Blob;
function isMediaStream(source: SourceInput): source is MediaStream;
function isURL(source: SourceInput): source is string;
function isSourceConfig(source: SourceInput): source is SourceConfig;Error Type Guards
typescript
function isPlayerError(error: Error): error is PlayerError;
function isMediaError(error: Error): error is MediaError;
function isNetworkError(error: Error): boolean;
function isDecodeError(error: Error): boolean;Track Type Guards
typescript
function isVideoTrack(track: VideoTrack | AudioTrack): track is VideoTrack;
function isAudioTrack(track: VideoTrack | AudioTrack): track is AudioTrack;Constants
Default Values
typescript
const DEFAULT_PLAYER_OPTIONS: Required<Omit<PlayerOptions, 'canvas'>> = {
autoplay: false,
muted: false,
volume: 1,
playbackRate: 1,
frameBufferSize: 10,
maxMemoryUsage: 100 * 1024 * 1024, // 100MB
canvasPool: undefined,
debug: false
};
const DEFAULT_STORE_OPTIONS: Required<StoreOptions> = {
initialState: {},
batchUpdates: true,
batchInterval: 16, // ~60fps
maxSubscribers: 100
};Event Names
typescript
const PLAYER_EVENTS = [
'play', 'pause', 'ended', 'seeking', 'seeked', 'timeupdate',
'ratechange', 'loadstart', 'loadedmetadata', 'loadeddata',
'canplay', 'canplaythrough', 'progress', 'waiting', 'stalled',
'volumechange', 'error', 'tracksChanged', 'trackChanged',
'sourceChanged', 'ready', 'destroy'
] as const;
type PlayerEventName = typeof PLAYER_EVENTS[number];Module Declarations
Window Extensions
typescript
declare global {
interface Window {
MediaFox: typeof MediaFox;
}
}Canvas Extensions
typescript
declare module 'html-canvas-element' {
interface HTMLCanvasElement {
mediafoxPlayer?: MediaFox;
}
}This comprehensive type system provides full IntelliSense support and compile-time safety when using MediaFox with TypeScript.
