UNPKG

@byomakase/omakase-player

Version:

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

222 lines (221 loc) • 5.22 kB
import { Subject } from 'rxjs'; import { OmpAudioTrack } from '../types'; export type VideoProtocol = 'hls' | 'native'; export interface Video { sourceUrl: string; frameRate: number; dropFrame: boolean; duration: number; totalFrames: number; /** * Frame duration in seconds * @private */ frameDuration: number; /** * Time offset incurred by init segment * @private */ initSegmentTimeOffset?: number; audioOnly: boolean; /** * Is DRM applied */ drm: boolean; /** * Corrected duration field may be updated once when: * * video element changes video duration * * video ends on bare start of the last frame, which might not exist in that moment * * last hls segment ends of different time than it was initially calculated * * @private correctedDuration */ correctedDuration?: number; /** * Timecode offset */ ffomTimecodeObject?: TimecodeObject; } export interface TimecodeObject { hours: number; minutes: number; seconds: number; frames: number; dropFrame: boolean; audioOnly: boolean; } export interface PlaybackState { playing: boolean; pausing: boolean; paused: boolean; waiting: boolean; seeking: boolean; buffering: boolean; ended: boolean; } export declare class PlaybackStateMachine { readonly onChange$: Subject<PlaybackState>; private _state; constructor(); private updateState; private compare; get state(): PlaybackState; setPlaying(): void; setPaused(): void; get pausing(): boolean; setPausing(): void; setEnded(): void; get waiting(): boolean; set waiting(value: boolean); get seeking(): boolean; set seeking(value: boolean); get buffering(): boolean; set buffering(value: boolean); } export interface VideoLoadOptions { /** * Set video duration explicitly */ duration?: number; /** * Time offset timecode */ ffom?: string; /** * Is frame rate with drop frame or not */ dropFrame?: boolean; /** * Set to force video protocol loader, it will be set automatically otherwise */ protocol?: VideoProtocol; /** * Arbitrary key-value data provided on video load. Can be used to storevalues such as DRM tokens. */ data?: Record<string, any>; } /** * @internal */ export interface VideoLoadOptionsInternal { /** * Active {@link VideoWindowPlaybackState} when video loaded started * @internal */ videoWindowPlaybackState: VideoWindowPlaybackState; } export interface FrameRateModel { value: number; fraction?: string; dropFrameEnabled: boolean; dropFramesOnMinute?: number; } export interface VideoSafeZone { id?: string; /** * If provided {@link aspectRatio} will be ignored */ topRightBottomLeftPercent?: number[]; /** * Aspect ratio for safe zone */ aspectRatio?: string; /** * If used {@link aspectRatio} must be provided */ scalePercent?: number; htmlId?: string; htmlClass?: string; } export type VideoWindowPlaybackState = 'detaching' | 'detached' | 'attaching' | 'attached'; /** * Represents connected or disconnected {@link AudioNode} or input-output point */ export interface AudioInputOutputNode { /** * Input */ inputNumber: number; /** * Output */ outputNumber: number; /** * Connected status, true = connected, false = not connected */ connected: boolean; } /** * Audio peak processing strategy */ export type AudioMeterStandard = 'peak-sample' | 'true-peak'; export interface BufferedTimespan { start: number; end: number; } export interface OmpAudioState { /** * Audio router state */ audioRouterState: OmpAudioRouterState | undefined; /** * Main audio peak processor state */ audioPeakProcessorState: OmpAudioPeakProcessorState | undefined; /** * Source audio node channel count */ numberOfChannels: number; } /** * Main audio state */ export interface OmpMainAudioState extends OmpAudioState { } /** * Sidecar audio state */ export interface OmpSidecarAudioState extends OmpAudioState { /** * Sidecar audio track */ audioTrack: OmpAudioTrack; /** * Number of channels from {@link AudioBuffer}.numberOfChannels From {@link AudioBuffer} in which sidecar audio is loaded */ numberOfChannels: number; } /** * Audio router state */ export interface OmpAudioRouterState { /** * Number of audio inputs */ inputsNumber: number; /** * Number of audio outputs */ outputsNumber: number; /** * Audio routing matrix */ audioInputOutputNodes: AudioInputOutputNode[][]; } /** * Peak processor state */ export interface OmpAudioPeakProcessorState { /** * Audio peak processing strategy */ audioMeterStandard: AudioMeterStandard; } export interface OmpPeakProcessorDataMessage { type: 'message'; message: number[][]; } export interface OmpPeakProcessorDataPeaks { type: 'peaks'; peaks: number[]; }