@byomakase/omakase-player
Version:
## Omakase Player - Open source JavaScript framework for building frame accurate video experiences
121 lines (120 loc) • 5.46 kB
TypeScript
import { Observable, Subject } from 'rxjs';
import { OmakaseTextTrack, VideoFullscreenChangeEvent, VideoSafeZoneChangeEvent } from '../types';
import { VideoControllerApi } from './video-controller-api';
import { VideoSafeZone } from './model';
import { VideoDomControllerApi } from './video-dom-controller-api';
import { MediaChromeButton, MediaController, MediaTooltip } from 'media-chrome';
import { OmakasePreviewThumbnail, OmakaseTimeDisplay, OmakaseTimeRange } from '../components';
import { VttAdapter } from '../common/vtt-adapter';
import { ThumbnailVttFile } from '../vtt';
import { OmakaseDropdown } from '../components/omakase-dropdown';
export type MediaChromeVisibility = 'disabled' | 'enabled' | 'fullscreen-only';
export interface VideoDomControllerConfig {
playerHTMLElementId: string;
crossorigin: 'anonymous' | 'use-credentials';
detachedPlayer: boolean;
mediaChrome: MediaChromeVisibility;
mediaChromeHTMLElementId?: string;
thumbnailVttUrl?: string;
thumbnailFn?: (time: number) => string | undefined;
playerClickHandler?: () => void;
playbackRateOptions?: number[];
watermark?: string;
}
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;
/**
* Silent audio element, can be used for time synchronization or keepalive
* @protected
*/
protected _audioUtilElement: HTMLAudioElement;
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 _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 _currentTimecode?: OmakaseTimeDisplay;
protected _previewTimecode?: OmakaseTimeDisplay;
protected _previewThumbnail?: OmakasePreviewThumbnail;
protected _speedDropdown?: OmakaseDropdown;
protected _bitcEnabled: boolean;
protected _showTemporaryOnMouseMoveTimeoutId?: ReturnType<typeof setTimeout>;
protected _fullscreenChangeHandler: () => void;
protected _enterPictureInPictureHandler: () => void;
protected _leavePictureInPictureHandler: () => void;
protected _videoSafeZones: VideoSafeZone[];
protected _silentWavUrl: string;
constructor(config: Partial<VideoDomControllerConfig>);
private createDom;
private getMediaChromeTemplate;
private getPlaybackRateOptions;
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): Observable<void>;
loadThumbnailVtt(vttUrl: string): Observable<void>;
attachVideoController(videoController: VideoControllerApi): void;
private togglePIP;
getVideoElement(): HTMLVideoElement;
getAudioUtilElement(): HTMLAudioElement;
destroy(): void;
private static createHTMLTrackElement;
appendHTMLTrackElement(omakaseTextTrack: OmakaseTextTrack): Observable<HTMLTrackElement | undefined>;
getTextTrackList(): TextTrackList | undefined;
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;
}