unified-video-framework
Version:
Cross-platform video player framework supporting iOS, Android, Web, Smart TVs (Samsung/LG), Roku, and more
435 lines • 14.7 kB
TypeScript
import { BasePlayer } from '../../core/dist/BasePlayer';
import { ControlsVisibilityConfig, Chapter, ChapterSegment } from '../../core/dist/index';
import { ChapterConfig, VideoChapters, VideoSegment } from './chapters/types/ChapterTypes';
import type { FlashNewsTickerConfig } from './react/types/FlashNewsTickerTypes';
import type { ThumbnailPreviewConfig } from './react/types/ThumbnailPreviewTypes';
declare global {
interface Window {
Hls: any;
dashjs: any;
cast?: any;
chrome?: any;
YT?: any;
__onGCastApiAvailable?: (isAvailable: boolean) => void;
}
}
export declare class WebPlayer extends BasePlayer {
protected video: HTMLVideoElement | null;
private hls;
private dash;
private qualities;
private currentQualityIndex;
private autoQuality;
private currentStreamType;
private useCustomControls;
private controlsContainer;
private volumeHideTimeout;
private hideControlsTimeout;
private isVolumeSliding;
private availableQualities;
private availableSubtitles;
private currentQuality;
private currentSubtitle;
private currentPlaybackRate;
private isDragging;
private globalMouseMoveHandler;
private globalTouchMoveHandler;
private globalMouseUpHandler;
private globalTouchEndHandler;
private settingsConfig;
private controlsVisibility;
private watermarkCanvas;
private playerWrapper;
private instanceId;
private static instanceCounter;
private cachedElements;
private flashTickerContainer;
private flashTickerTopElement;
private flashTickerBottomElement;
private tickerCurrentItemIndex;
private tickerCycleTimer;
private tickerConfig;
private tickerHeadlineElement;
private tickerDetailElement;
private tickerIntroOverlay;
private tickerProgressBar;
private tickerProgressFill;
private tickerIsPaused;
private tickerPauseStartTime;
private tickerRemainingTime;
private previewGateHit;
private paymentSuccessTime;
private paymentSuccessful;
private isPaywallActive;
private authValidationInterval;
private overlayRemovalAttempts;
private maxOverlayRemovalAttempts;
private lastSecurityCheck;
private castContext;
private remotePlayer;
private remoteController;
private isCasting;
private _castTrackIdByKey;
private selectedSubtitleKey;
private _kiTo;
private paywallController;
private _playPromise;
private _deferredPause;
private _lastToggleAt;
private _TOGGLE_DEBOUNCE_MS;
private hasTriedButtonFallback;
private lastUserInteraction;
private showTimeTooltip;
private tapStartTime;
private tapStartX;
private tapStartY;
private lastTapTime;
private lastTapX;
private tapCount;
private longPressTimer;
private isLongPressing;
private longPressPlaybackRate;
private tapResetTimer;
private fastBackwardInterval;
private handleSingleTap;
private handleDoubleTap;
private handleLongPress;
private handleLongPressEnd;
private autoplayCapabilities;
private autoplayRetryPending;
private autoplayRetryAttempts;
private maxAutoplayRetries;
private chapterManager;
private drmManager;
private isDRMProtected;
private hasAppliedStartTime;
private coreChapterManager;
private chapterConfig;
private qualityFilter;
private premiumQualities;
private youtubeNativeControls;
private isAdPlaying;
private fallbackSourceIndex;
private fallbackErrors;
private isLoadingFallback;
private currentRetryAttempt;
private lastFailedUrl;
private isFallbackPosterMode;
private hlsErrorRetryCount;
private readonly MAX_HLS_ERROR_RETRIES;
private lastDuration;
private isDetectedAsLive;
private isWaitingForLiveStream;
private liveRetryTimer;
private liveRetryAttempts;
private bandwidthDetector;
private readonly BANDWIDTH_TIERS;
private liveStreamOriginalSource;
private liveMessageRotationTimer;
private liveMessageIndex;
private liveBufferingTimeoutTimer;
private liveCountdownTimer;
private liveCountdownRemainingSeconds;
private isShowingLiveCountdown;
private hasCountdownCompleted;
private isReloadingAfterCountdown;
private countdownCallbackFired;
private thumbnailPreviewConfig;
private thumbnailEntries;
private preloadedThumbnails;
private currentThumbnailUrl;
private thumbnailPreviewEnabled;
private subtitleBlobUrls;
private subtitleOverlay;
private debugLog;
private debugError;
private debugWarn;
private isLiveStreamNotReady;
private startLiveStreamWaiting;
private stopLiveStreamWaiting;
private scheduleLiveStreamRetry;
private retryLiveStreamLoad;
private showLiveWaitingUI;
private updateLiveWaitingMessage;
private getLiveWaitingMessages;
private rotateLoadingMessage;
private showLiveCountdown;
private sanitizeHtml;
private updateLiveCountdownDisplay;
private tickCountdown;
private handleCountdownComplete;
private stopLiveCountdown;
updateLiveCountdown(config: any): void;
private getElementId;
private getElement;
private cacheElementReferences;
private deepMergeControlsConfig;
private setElementVisibility;
private applyControlsVisibility;
setControlsEnabled(enabled: boolean): void;
setControlsVisibility(config: Partial<ControlsVisibilityConfig>): void;
initializeThumbnailPreview(config: ThumbnailPreviewConfig): void;
private transformThumbnailData;
private findThumbnailForTime;
private preloadThumbnailImages;
private applyThumbnailStyles;
private updateThumbnailPreview;
private hideThumbnailPreview;
setThumbnailPreview(config: ThumbnailPreviewConfig | null): void;
initialize(container: HTMLElement | string, config?: any): Promise<void>;
protected setupPlayer(): Promise<void>;
private autoplayAttempted;
private setupVideoEventListeners;
private getMediaErrorMessage;
private updateBufferProgress;
load(source: any): Promise<void>;
private loadVideoSource;
private initializeDRM;
private handleDRMError;
private tryFallbackSource;
private showFallbackPoster;
private detectSourceType;
private loadHLS;
private handleHLSError;
private loadDASH;
private updateDASHQuality;
private detectBandwidth;
private getBandwidthTier;
private getOptimizedHLSConfig;
private getOptimizedDASHSettings;
private setupBandwidthMonitoring;
private reoptimizePlayback;
getBandwidthInfo(): {
estimated: number | null;
tier: 'high' | 'medium' | 'low' | null;
method: 'probe' | 'manifest' | 'fallback' | null;
};
redetectBandwidth(): Promise<void>;
private loadNative;
private loadYouTube;
private youtubePlayer;
private youtubePlayerReady;
private youtubeIframe;
private createYouTubePlayer;
private loadYouTubeAPI;
private waitForYouTubeAPI;
private onYouTubePlayerReady;
private onYouTubePlayerStateChange;
private updateYouTubeUI;
private onYouTubePlayerError;
private youtubeTimeTrackingInterval;
private startYouTubeTimeTracking;
private updateYouTubeProgressBar;
protected loadScript(src: string): Promise<void>;
private loadSubtitles;
private updateSubtitleOverlay;
private isAbortPlayError;
private isAutoplayRestrictionError;
private detectAutoplayCapabilities;
private hasUserActivation;
private attemptIntelligentAutoplay;
private setupAutoplayRetry;
private showUnmuteButton;
private setupClickToUnmute;
private clickToUnmuteHandler;
private hideUnmuteButton;
private updateTimeTooltip;
private hideTimeTooltip;
private setupUserInteractionTracking;
play(): Promise<void>;
pause(): void;
requestPause(): void;
private safeSetCurrentTime;
seek(time: number): void;
setVolume(level: number): void;
mute(): void;
unmute(): void;
getCurrentTime(): number;
getQualities(): any[];
getCurrentQuality(): any;
setQuality(index: number): void;
setPlaybackRate(rate: number): void;
setFlashNewsTicker(config: FlashNewsTickerConfig): void;
private createTickerElement;
private createSimpleTickerElement;
private createBroadcastTickerElement;
private getBroadcastThemeColors;
private createBroadcast1Element;
private createSeamlessScrollingTrack;
private createGlobeElement;
private createLiveBadgeElement;
private ensureTickerAnimations;
private calculateTickerDuration;
private createProfessionalTickerElement;
private createProfessionalHeader;
private createDecorativeSeparator;
private createTwoLineBody;
private createProgressBar;
private createIntroOverlay;
private playIntroAnimation;
private startItemCycling;
private stopItemCycling;
private pauseItemCycling;
private resumeItemCycling;
private animateProgress;
private transitionToNextItem;
private applyItemTransition;
private formatHeadlineText;
private escapeHtml;
private updateItemContent;
setAutoQuality(enabled: boolean): void;
enterFullscreen(): Promise<void>;
exitFullscreen(): Promise<void>;
enterPictureInPicture(): Promise<void>;
exitPictureInPicture(): Promise<void>;
focusPlayer(): void;
showFullscreenTip(): void;
private isBraveBrowser;
private checkFullscreenPermissions;
private isPrivateWindow;
triggerFullscreenButton(): void;
private performFullscreenButtonClick;
private requestFullscreenPermissionBrave;
enterFullscreenWithBraveSupport(): Promise<void>;
showTemporaryMessage(message: string): void;
enterFullscreenSynchronously(): void;
requestFullscreenWithUserGesture(event: Event): Promise<boolean>;
showFullscreenInstructions(): void;
attemptFullscreen(): Promise<boolean>;
protected applySubtitleTrack(track: any): void;
protected removeSubtitles(): void;
private injectStyles;
private getPlayerStyles;
private createFrameworkBranding;
private resolveControlVisibility;
private createNavigationButtons;
private getNavigationIcon;
private createCustomControls;
private setupControlsEventListeners;
protected setupKeyboardShortcuts(): void;
protected setupWatermark(): void;
setPaywallConfig(config: any): void;
dismissPaywall(options?: {
resume?: boolean;
}): void;
private togglePlayPause;
private enforceFreePreviewGate;
setFreeDuration(seconds: number): void;
resetFreePreviewGate(): void;
resetPaymentStatus(): void;
private toggleMuteAction;
private isMobileDevice;
private isPipSupported;
private isIOSDevice;
private isAndroidDevice;
private isFullscreenSupported;
private lockOrientationLandscape;
private unlockOrientation;
private handleVolumeChange;
private seekToPosition;
private formatTime;
private formatCountdownTime;
private resetProgressBar;
private getYouTubeHeight;
private updateTimeDisplay;
private showControls;
private hideControls;
private scheduleHideControls;
private setupAdvancedTapHandling;
private startFastBackward;
private stopFastBackward;
private isFullscreen;
private setupFullscreenListeners;
private showShortcutIndicator;
setSettingsScrollbarStyle(mode: 'default' | 'compact' | 'overlay'): void;
setSettingsScrollbarConfig(options: {
widthPx?: number;
intensity?: number;
}): void;
private applyScrollbarPreferencesFromDataset;
private setupChapterManager;
private convertToChapters;
private convertToChapterSegments;
private mapSegmentAction;
loadChapters(chapters: VideoChapters): Promise<void>;
loadChaptersFromUrl(url: string): Promise<void>;
getCurrentSegment(): VideoSegment | null;
skipToSegment(segmentId: string): void;
getSegments(): VideoSegment[];
updateChapterConfig(newConfig: Partial<ChapterConfig>): void;
hasChapters(): boolean;
getChapters(): VideoChapters | null;
getCoreChapters(): Chapter[];
getCoreSegments(): ChapterSegment[];
getCurrentChapterInfo(): Chapter | null;
seekToChapter(chapterId: string): void;
getNextChapter(): Chapter | null;
getPreviousChapter(): Chapter | null;
setTheme(theme: any): void;
private _parseRgb;
private _rgbToString;
private _lightenRgb;
private _toRgba;
private changeVolume;
private setSpeed;
private setQualityByLabel;
private updateQualityBadgeText;
private updateQualityLabel;
private togglePiP;
private setupCastContextSafe;
private setupCastContext;
private enableCastRemoteControl;
private disableCastRemoteControl;
private _bindRemotePlayerEvents;
private updateVolumeUIFromRemote;
private _syncUIFromRemote;
private _syncCastButtons;
private updateSettingsMenu;
private generateAccordionMenu;
private detectAvailableQualities;
private applyQualityFilter;
setQualityFilter(filter: any): void;
setAdPlaying(isPlaying: boolean): void;
isAdCurrentlyPlaying(): boolean;
private isQualityPremium;
private isPremiumUser;
private handlePremiumQualityClick;
private detectAvailableSubtitles;
private setupSettingsEventListeners;
private toggleAccordionSection;
private hideSettingsMenu;
private updateAccordionAfterSelection;
private updateSettingsActiveStates;
private setPlaybackRateFromSettings;
private setQualityFromSettings;
private applyHLSQualityFilter;
private applyDASHQualityFilter;
private setSubtitle;
private _updateCastActiveTracks;
private onCastButtonClick;
private showAirPlayPicker;
private stopCasting;
private initCast;
private shareVideo;
private isTextTruncated;
private showTextTooltip;
private hideTextTooltip;
private setupTextTooltips;
private smartTruncateText;
private applySmartTextDisplay;
private updateMetadataUI;
private showNotification;
private canPlayVideo;
private enforcePaywallSecurity;
private startOverlayMonitoring;
private handleSecurityViolation;
private showSecurityViolationMessage;
private forceCleanupOverlays;
showEPGButton(): void;
hideEPGButton(): void;
setEPGData(epgData: any): void;
isEPGButtonVisible(): boolean;
private cleanup;
destroy(): Promise<void>;
}
//# sourceMappingURL=WebPlayer.d.ts.map