UNPKG

@byomakase/omakase-player

Version:

## Omakase Player - Open source JavaScript framework for building frame accurate video experiences

137 lines (136 loc) • 6.58 kB
import { Observable, Subject } from 'rxjs'; import { OmakaseTextTrack, VideoFullscreenChangeEvent, VideoSafeZoneChangeEvent } from '../types'; import { VideoControllerApi } from './video-controller-api'; import { MarkerTrackConfig, VideoSafeZone } from './model'; import { VideoDomControllerApi } from './video-dom-controller-api'; import { MediaChromeButton, MediaController, MediaTooltip } from 'media-chrome'; import { OmakaseMarkerBar, OmakasePreviewThumbnail, OmakaseTimeDisplay, OmakaseTimeRange } from '../components'; import { VttAdapter } from '../common/vtt-adapter'; import { ThumbnailVttFile } from '../vtt'; import { OmakaseDropdown } from '../components/omakase-dropdown'; import { OmakaseVolumeRange } from '../components/omakase-volume-range'; import { OmakaseMuteButton } from '../components/omakase-mute-button'; import { OmakaseDropdownList } from '../components/omakase-dropdown-list'; import { OmakaseDropdownToggle } from '../components/omakase-dropdown-toggle'; import { ChromelessChroming, CustomChroming, DefaultChroming, StampChroming } from './../player-chroming/model'; import { MarkerTrackApi } from '../api'; import { TimeRangeMarkerTrackApi } from '../api/time-range-marker-track-api'; export interface VideoDomControllerConfig { playerHTMLElementId: string; crossorigin: 'anonymous' | 'use-credentials'; detachedPlayer: boolean; disablePictureInPicture: boolean; playerChroming: DefaultChroming | StampChroming | CustomChroming | ChromelessChroming; playerClickHandler?: () => void; } export declare const VIDEO_DOM_CONTROLLER_CONFIG_DEFAULT: VideoDomControllerConfig; export declare class VideoDomController implements VideoDomControllerApi { readonly onFullscreenChange$: Subject<VideoFullscreenChangeEvent>; readonly onVideoSafeZoneChange$: Subject<VideoSafeZoneChangeEvent>; protected readonly _config: VideoDomControllerConfig; protected readonly _vttAdapter: VttAdapter<ThumbnailVttFile>; protected readonly _divPlayer: HTMLElement; protected _videoController: VideoControllerApi; protected _videoEventBreaker$: Subject<void>; /** * Main video element * @protected */ protected _videoElement: HTMLVideoElement; protected _mediaControllerElement: MediaController; protected _divPlayerWrapper: HTMLElement; protected _divButtonOverlayPlay?: HTMLElement; protected _divButtonOverlayPause?: HTMLElement; protected _divButtonOverlayLoading?: HTMLElement; protected _divButtonOverlayError?: HTMLElement; protected _divButtonOverlayReplay?: HTMLElement; protected _divButtonOverlayAttach?: HTMLElement; protected _divButtonHelp?: HTMLElement; protected _divHelp: HTMLElement; protected _divHelpMenu?: HTMLElement; protected _audioTextToggle?: OmakaseDropdownToggle; protected _divSectionBottomRight: HTMLElement; protected _divButtonAttach: HTMLElement; protected _divButtonFullscreen: HTMLElement; protected _divErrorMessage: HTMLElement; protected _divSafeZoneWrapper: HTMLElement; protected _divWatermarkWrapper: HTMLElement; protected _divWatermark: HTMLElement; protected _divAlerts: HTMLElement; protected _divBackgroundImage: HTMLElement; protected _divDetachedBackground: HTMLElement; protected _divTimecode?: HTMLElement; protected _buttonFastRewind?: MediaChromeButton; protected _buttonRewind?: MediaChromeButton; protected _buttonForward?: MediaChromeButton; protected _buttonFastForward?: MediaChromeButton; protected _buttonAttach?: MediaChromeButton; protected _buttonDetach?: MediaChromeButton; protected _buttonBitc?: MediaChromeButton; protected _tooltipBitc?: MediaTooltip; protected _timeRangeControl?: OmakaseTimeRange; protected _volumeRangeControl?: OmakaseVolumeRange; protected _currentTimecode?: OmakaseTimeDisplay; protected _previewTimecode?: OmakaseTimeDisplay; protected _previewThumbnail?: OmakasePreviewThumbnail; protected _muteButton?: OmakaseMuteButton; protected _textButton?: MediaChromeButton; protected _speedDropdown?: OmakaseDropdown; protected _audioDropdown?: OmakaseDropdown; protected _speedDropdownList?: OmakaseDropdownList; protected _audioDropdownList?: OmakaseDropdownList; protected _textDropdownList?: OmakaseDropdownList; protected _sidecarDropdownList?: OmakaseDropdownList; protected _audioDropdownToggle?: OmakaseDropdownToggle; protected _markerBar?: OmakaseMarkerBar; protected _bitcEnabled: boolean; protected _showTemporaryOnMouseMoveTimeoutId?: ReturnType<typeof setTimeout>; protected _fullscreenChangeHandler: () => void; protected _enterPictureInPictureHandler: () => void; protected _leavePictureInPictureHandler: () => void; protected _videoSafeZones: VideoSafeZone[]; protected _destroyed$: Subject<void>; constructor(config: Partial<VideoDomControllerConfig>); private createPlayerDom; private getMediaChromeTemplate; private getVisibilityClass; private getAudioTextDropdown; private alignAudioTextDropdown; private getPlayerElement; private getPlayerElements; private showElements; private isShown; private hideElements; private onHelpMenuChangeHandler; isFullscreen(): boolean; toggleFullscreen(): Observable<void>; clearSafeZones(): Observable<void>; addSafeZone(videoSafeZone: VideoSafeZone): Observable<VideoSafeZone>; removeSafeZone(id: string): Observable<void>; getSafeZones(): VideoSafeZone[]; setSafeZoneAspectRatio(aspectRatio: string): void; loadThumbnailVtt(vttUrl: string): Observable<void>; setWatermark(watermark: string): void; isPiPSupported(): boolean; attachVideoController(videoController: VideoControllerApi): void; private togglePIP; getVideoElement(): HTMLVideoElement; private createHTMLTrackElement; appendHTMLTrackElement(omakaseTextTrack: OmakaseTextTrack): Observable<HTMLTrackElement | undefined>; getTextTrackList(): TextTrackList; getTextTrackById(id: string): TextTrack | undefined; /** * https://github.com/whatwg/html/issues/1921 * https://github.com/web-platform-tests/wpt/pull/6594 * * @param id * @private */ removeTextTrackById(id: string): boolean; private getMainAudioOptions; private getSidecarOptions; private getUnifiedAudioOptions; createMarkerTrack(config: MarkerTrackConfig): MarkerTrackApi; getProgressMarkerTrack(): TimeRangeMarkerTrackApi | undefined; destroy(): void; }