nsplayer
Version:
NSPlayer, a player which supports quality list of dash and hls
132 lines (131 loc) • 6.11 kB
TypeScript
import { Event } from '@newstudios/common';
export declare type Size = {
width: number;
height: number;
};
declare global {
interface HTMLMediaElementEventMap {
enterpictureinpicture: globalThis.Event;
leavepictureinpicture: globalThis.Event;
webkitplaybacktargetavailabilitychanged: WebKitPlaybackTargetAvailabilityEvent;
}
/** airplay */
interface WebKitPlaybackTargetAvailabilityEvent extends globalThis.Event {
availability: 'available' | 'not-available';
}
/** airplay */
interface Window {
WebKitPlaybackTargetAvailabilityEvent?: WebKitPlaybackTargetAvailabilityEvent;
}
interface Document {
readonly pictureInPictureElement?: HTMLVideoElement | null;
}
interface HTMLVideoElement {
readonly webkitShowPlaybackTargetPicker?: () => void;
readonly webkitSupportsFullscreen?: boolean;
readonly webkitDisplayingFullscreen?: boolean;
readonly webkitEnterFullscreen?: () => void;
readonly webkitExitFullscreen?: () => void;
}
}
export declare const VideoEventNameMap: {
readonly onEncypted: "encrypted";
readonly onWaitingForKey: "waitingforkey";
readonly onCanPlay: "canplay";
readonly onCanPlayThrough: "canplaythrough";
readonly onCueChange: "cuechange";
readonly onDurationChange: "durationchange";
readonly onEmptied: "emptied";
readonly onEnded: "ended";
readonly onError: "error";
readonly onLoad: "load";
readonly onLoadedData: "loadeddata";
readonly onLoadedMetaData: "loadedmetadata";
readonly onLoadStart: "loadstart";
readonly onPause: "pause";
readonly onPlay: "play";
readonly onPlaying: "playing";
readonly onProgress: "progress";
readonly onRateChange: "ratechange";
readonly onSeeked: "seeked";
readonly onSeeking: "seeking";
readonly onStalled: "stalled";
readonly onSuspend: "suspend";
readonly onTimeUpdate: "timeupdate";
readonly onVolumeChange: "volumechange";
readonly onWaiting: "waiting";
readonly onEnterPictureInPicture: "enterpictureinpicture";
readonly onLeavePictureInPicture: "leavepictureinpicture";
readonly onWebkitPlaybackTargetAvailabilityChanged: "webkitplaybacktargetavailabilitychanged";
};
export declare type VideoEventNameMap = typeof VideoEventNameMap;
declare type BasePlayerEventName = keyof VideoEventNameMap;
export declare type BasePlayerWithEvent = {
readonly [key in BasePlayerEventName]: Event<HTMLMediaElementEventMap[VideoEventNameMap[key]]>;
};
export declare type VideoEventName = keyof VideoEventNameMap;
export declare const VideoEventNameArray: ("onEncypted" | "onWaitingForKey" | "onCanPlay" | "onCanPlayThrough" | "onCueChange" | "onDurationChange" | "onEmptied" | "onEnded" | "onError" | "onLoad" | "onLoadedData" | "onLoadedMetaData" | "onLoadStart" | "onPause" | "onPlay" | "onPlaying" | "onProgress" | "onRateChange" | "onSeeked" | "onSeeking" | "onStalled" | "onSuspend" | "onTimeUpdate" | "onVolumeChange" | "onWaiting" | "onEnterPictureInPicture" | "onLeavePictureInPicture" | "onWebkitPlaybackTargetAvailabilityChanged")[];
export declare const Quality: {
readonly Q240: "240p";
readonly Q320: "320p";
readonly Q360: "360p";
readonly Q480: "480p";
readonly Q540: "540p";
readonly Q640: "640p";
readonly Q720: "720p";
readonly Q1080: "1080p";
readonly Q1440: "1440p";
readonly Q2160: "2160p";
};
export declare type QualityMap = typeof Quality;
export declare type QualityKey = keyof QualityMap;
export declare type Quality = QualityMap[QualityKey];
export declare function is4K(quality: Quality): quality is '2160p';
export declare function is2K(quality: Quality): quality is '1440p';
export declare function isFHD(quality: Quality): quality is '1080p';
export declare function isHD(quality: Quality): quality is '720p';
export declare function isSD(quality: Quality): quality is '640p' | '540p';
export declare const MimeTypeMap: {
readonly m3u8: readonly ["application/x-mpegURL", "application/vnd.apple.mpegURL"];
readonly mpd: readonly ["application/dash+xml"];
readonly mp4: readonly ["video/mp4"];
readonly m4s: readonly ["video/iso.segment"];
readonly m4a: readonly ["audio/mp4"];
readonly mp3: readonly ["audio/mpeg"];
readonly aac: readonly ["audio/aac"];
readonly ts: readonly ["video/mp2t"];
};
export declare type MimeTypeMap = typeof MimeTypeMap;
export declare type Extension = keyof MimeTypeMap;
export declare type MimeType = MimeTypeMap[Extension][number];
export declare type SupportedExtension = 'm3u8' | 'mpd' | 'mp4';
export declare type SupportedMimeType = MimeTypeMap[SupportedExtension][number];
export declare const SupportedMimeTypes: ("application/x-mpegURL" | "application/vnd.apple.mpegURL" | "application/dash+xml" | "video/mp4")[];
export declare const MimeTypes: ("application/x-mpegURL" | "application/vnd.apple.mpegURL" | "application/dash+xml" | "video/mp4" | "video/iso.segment" | "audio/mp4" | "audio/mpeg" | "audio/aac" | "video/mp2t")[];
export declare function isSupportedMimeType(mimeType: string): mimeType is SupportedMimeType;
export declare function isHls(mimeType: string): mimeType is MimeTypeMap['m3u8'][number];
export declare function isDash(mimeType: string): mimeType is MimeTypeMap['mpd'][number];
export declare function isMp4(mimeType: string): mimeType is MimeTypeMap['mp4'][number];
export declare function getMimeType(src: string): MimeType | undefined;
export declare function isSafari(): boolean;
export declare function isMobile(): boolean;
export declare function assert<T>(target: T, message?: string): asserts target is NonNullable<T>;
/**
* format the seconds time
* @param timeInSeconds the number of seconds
* @param format h:mm:ss.SSS
*/
export declare function formatTime(timeInSeconds: number, format: string): string;
export interface Source {
src: string;
fps?: string;
width?: number;
height?: number;
bitrate?: number;
mime?: MimeType;
}
export interface ChangeDetail<T> {
prev: T;
next: T;
}
export {};