UNPKG

unified-video-framework

Version:

Cross-platform video player framework supporting iOS, Android, Web, Smart TVs (Samsung/LG), Roku, and more

321 lines 9.07 kB
export interface FallbackSource { url: string; type?: 'mp4' | 'hls' | 'dash' | 'webm' | 'auto'; priority?: number; } export interface VideoSource { url: string; type?: 'mp4' | 'hls' | 'dash' | 'webm' | 'auto'; drm?: DRMConfig; subtitles?: SubtitleTrack[]; metadata?: VideoMetadata; fallbackSources?: FallbackSource[]; fallbackPoster?: string; fallbackShowErrorMessage?: boolean; fallbackRetryDelay?: number; fallbackRetryAttempts?: number; onAllSourcesFailed?: (errors: Array<{ url: string; error: any; }>) => void; } export interface DRMConfig { licenseUrl: string; certificateUrl?: string; headers?: Record<string, string>; type: 'widevine' | 'playready' | 'fairplay' | 'clearkey'; } export interface SubtitleTrack { url: string; language: string; label: string; kind: 'subtitles' | 'captions' | 'descriptions'; default?: boolean; } export interface VideoMetadata { id?: string; videoId?: string; title?: string; description?: string; duration?: number; thumbnailUrl?: string; posterUrl?: string; } export interface Quality { height: number; width: number; bitrate: number; label: string; index: number; } export interface PlayerState { isPlaying: boolean; isPaused: boolean; isBuffering: boolean; isEnded: boolean; isError: boolean; currentTime: number; duration: number; bufferedPercentage: number; volume: number; isMuted: boolean; playbackRate: number; currentQuality?: Quality; availableQualities: Quality[]; } export interface PlayerEvents { onReady?: () => void; onPlay?: () => void; onPause?: () => void; onEnded?: () => void; onTimeUpdate?: (time: number) => void; onBuffering?: (isBuffering: boolean) => void; onError?: (error: PlayerError) => void; onQualityChanged?: (quality: Quality) => void; onVolumeChanged?: (volume: number) => void; onFullscreenChanged?: (isFullscreen: boolean) => void; onProgress?: (buffered: number) => void; onSeeking?: () => void; onSeeked?: () => void; onLoadedMetadata?: (metadata: VideoMetadata) => void; onFreePreviewEnded?: () => void; epgToggle?: (data?: any) => void; epgDataSet?: (data?: any) => void; frameworkBrandingClick?: (data: { timestamp: number; url: string; userAgent: string; }) => void; chapterchange?: (chapter: any) => void; segmententered?: (segment: any) => void; segmentexited?: (segment: any) => void; segmentskipped?: (segment: any) => void; chapterSegmentEntered?: (data: any) => void; chapterSegmentSkipped?: (data: any) => void; chapterSkipButtonShown?: (data: any) => void; chapterSkipButtonHidden?: (data: any) => void; chaptersLoaded?: (data: any) => void; chaptersLoadError?: (data: any) => void; navigationBackClicked?: () => void; navigationCloseClicked?: () => void; onLiveStreamWaiting?: () => void; onLiveStreamReady?: () => void; onBandwidthDetected?: (data: { bandwidth: number | null; tier: string; method: string; }) => void; onBandwidthTierChanged?: (data: { tier: string; bandwidth: number | null; }) => void; } export interface PlayerError { code: string; message: string; type: 'network' | 'media' | 'drm' | 'unknown'; fatal: boolean; details?: any; } export interface PaywallConfig { enabled: boolean; apiBase: string; userId: string; videoId: string; gateways: Array<'stripe' | 'cashfree'>; branding?: { title?: string; description?: string; logoUrl?: string; theme?: any; }; popup?: { width?: number; height?: number; }; emailAuth?: { enabled: boolean; skipIfAuthenticated?: boolean; sessionStorage?: { tokenKey?: string; refreshTokenKey?: string; userIdKey?: string; }; api?: { requestOtp: string; verifyOtp: string; refreshToken?: string; logout?: string; }; ui?: { title?: string; description?: string; emailPlaceholder?: string; otpPlaceholder?: string; submitButtonText?: string; resendButtonText?: string; resendCooldown?: number; }; validation?: { otpLength?: number; otpTimeout?: number; rateLimiting?: { maxAttempts?: number; windowMinutes?: number; }; }; }; } export interface ShareConfig { enabled?: boolean; url?: string; title?: string; text?: string; generateUrl?: (videoData: { videoId?: string; metadata?: any; }) => string; } export interface ControlsVisibilityConfig { playback?: { centerPlayButton?: boolean; playPauseButton?: boolean; skipButtons?: boolean; previousButton?: boolean; nextButton?: boolean; }; audio?: { volumeButton?: boolean; volumeSlider?: boolean; }; progress?: { progressBar?: boolean; timeDisplay?: boolean; }; quality?: { badge?: boolean; settingsButton?: boolean; }; display?: { fullscreenButton?: boolean; pipButton?: boolean; }; features?: { epgButton?: boolean; playlistButton?: boolean; castButton?: boolean; shareButton?: boolean; }; chrome?: { navigationButtons?: boolean; frameworkBranding?: boolean; }; } export interface PlayerConfig { autoPlay?: boolean; muted?: boolean; volume?: number; controls?: boolean; loop?: boolean; preload?: 'none' | 'metadata' | 'auto'; crossOrigin?: 'anonymous' | 'use-credentials'; playsInline?: boolean; defaultQuality?: number; enableAdaptiveBitrate?: boolean; debug?: boolean; startTime?: number; freeDuration?: number; isLive?: boolean; liveWaitingMessages?: { waitingForStream?: string; loading?: string; comingBack?: string; }; liveMessageRotationInterval?: number; liveRetryInterval?: number; liveMaxRetryAttempts?: number; liveCountdown?: { nextProgramStartTime?: number; noProgramMessage?: string; countdownMessage?: string; timerColor?: string; onCountdownComplete?: () => void; autoReloadOnComplete?: boolean; updateInterval?: number; }; paywall?: PaywallConfig; share?: ShareConfig; adaptiveBitrate?: { startBitrate?: number; }; playlist?: { showPrevNext?: boolean; onPreviousTrack?: () => void; onNextTrack?: () => void; replaceSkipWithPrevNext?: boolean; onPlaylistToggle?: () => void; }; controlsVisibility?: ControlsVisibilityConfig; settings?: { enabled?: boolean; speed?: boolean; quality?: boolean; subtitles?: boolean; }; navigation?: { onBack?: () => void; onClose?: () => void; }; showFrameworkBranding?: boolean; fullscreenElement?: HTMLElement; } export interface IVideoPlayer { initialize(container: HTMLElement | string, config?: PlayerConfig): Promise<void>; destroy(): Promise<void>; load(source: VideoSource): Promise<void>; play(): Promise<void>; pause(): void; stop(): void; seek(time: number): void; setVolume(level: number): void; mute(): void; unmute(): void; toggleMute(): void; getQualities(): Quality[]; getCurrentQuality(): Quality | null; setQuality(index: number): void; setAutoQuality(enabled: boolean): void; setPlaybackRate(rate: number): void; getPlaybackRate(): number; getCurrentTime(): number; getDuration(): number; getBufferedPercentage(): number; getState(): PlayerState; isPlaying(): boolean; isPaused(): boolean; isEnded(): boolean; enterFullscreen(): Promise<void>; exitFullscreen(): Promise<void>; toggleFullscreen(): Promise<void>; enterPictureInPicture(): Promise<void>; exitPictureInPicture(): Promise<void>; on(event: string, handler: Function): void; off(event: string, handler?: Function): void; once(event: string, handler: Function): void; getSubtitles(): SubtitleTrack[]; setSubtitleTrack(index: number): void; disableSubtitles(): void; setAudioTrack?(index: number): void; getAudioTracks?(): any[]; getThumbnail?(time: number): string; getStats?(): any; setFreeDuration?(seconds: number): void; resetFreePreviewGate?(): void; getBandwidthInfo?(): { estimated: number | null; tier: string | null; method: string | null; }; redetectBandwidth?(): Promise<void>; } //# sourceMappingURL=IVideoPlayer.d.ts.map