184 lines
9.2 KiB
TypeScript
184 lines
9.2 KiB
TypeScript
import type { M3uStream } from './containers/m3u/get-streams';
|
|
import type { SelectM3uAssociatedPlaylistsFn, SelectM3uStreamFn } from './containers/m3u/select-stream';
|
|
import type { MediaParserController } from './controller/media-parser-controller';
|
|
import type { Options, ParseMediaFields } from './fields';
|
|
import type { MediaParserDimensions } from './get-dimensions';
|
|
import type { MediaParserLocation } from './get-location';
|
|
import type { MediaParserAudioCodec, MediaParserTrack, MediaParserVideoCodec } from './get-tracks';
|
|
import type { MediaParserLogLevel } from './log';
|
|
import type { MediaParserMetadataEntry } from './metadata/get-metadata';
|
|
import type { IsoBaseMediaStructure, MediaParserStructureUnstable } from './parse-result';
|
|
import type { MediaParserReaderInterface } from './readers/reader';
|
|
import type { SeekingHints } from './seeking-hints';
|
|
import type { MediaParserEmbeddedImage } from './state/images';
|
|
import type { InternalStats } from './state/parser-state';
|
|
import type { MediaParserOnAudioTrack, MediaParserOnVideoTrack } from './webcodec-sample-types';
|
|
import type { WriterInterface } from './writers/writer';
|
|
export type KnownAudioCodecs = 'aac' | 'mp3' | 'aiff' | 'opus' | 'pcm' | 'vorbis' | 'unknown';
|
|
export type AllParseMediaFields = {
|
|
dimensions: true;
|
|
durationInSeconds: true;
|
|
slowDurationInSeconds: true;
|
|
slowNumberOfFrames: true;
|
|
slowFps: true;
|
|
slowStructure: true;
|
|
fps: true;
|
|
videoCodec: true;
|
|
audioCodec: true;
|
|
tracks: true;
|
|
rotation: true;
|
|
unrotatedDimensions: true;
|
|
internalStats: true;
|
|
size: true;
|
|
name: true;
|
|
container: true;
|
|
isHdr: true;
|
|
metadata: true;
|
|
location: true;
|
|
mimeType: true;
|
|
keyframes: true;
|
|
slowKeyframes: true;
|
|
images: true;
|
|
sampleRate: true;
|
|
numberOfAudioChannels: true;
|
|
slowVideoBitrate: true;
|
|
slowAudioBitrate: true;
|
|
m3uStreams: true;
|
|
};
|
|
export type MediaParserContainer = 'mp4' | 'webm' | 'avi' | 'transport-stream' | 'mp3' | 'aac' | 'flac' | 'm3u8' | 'wav';
|
|
export type MediaParserKeyframe = {
|
|
positionInBytes: number;
|
|
sizeInBytes: number;
|
|
presentationTimeInSeconds: number;
|
|
decodingTimeInSeconds: number;
|
|
trackId: number;
|
|
};
|
|
export type ParseMediaCallbacksMandatory = {
|
|
onDimensions: null | ((dimensions: MediaParserDimensions | null) => unknown | Promise<unknown>);
|
|
onDurationInSeconds: null | ((durationInSeconds: number | null) => unknown | Promise<unknown>);
|
|
onSlowDurationInSeconds: null | ((durationInSeconds: number) => unknown | Promise<unknown>);
|
|
onSlowFps: null | ((fps: number) => unknown | Promise<unknown>);
|
|
onSlowStructure: null | ((structure: MediaParserStructureUnstable) => unknown | Promise<unknown>);
|
|
onFps: null | ((fps: number | null) => unknown | Promise<unknown>);
|
|
onVideoCodec: null | ((codec: MediaParserVideoCodec | null) => unknown | Promise<unknown>);
|
|
onAudioCodec: null | ((codec: MediaParserAudioCodec | null) => unknown | Promise<unknown>);
|
|
onTracks: null | ((tracks: MediaParserTrack[]) => unknown | Promise<unknown>);
|
|
onRotation: null | ((rotation: number | null) => unknown | Promise<unknown>);
|
|
onUnrotatedDimensions: null | ((dimensions: MediaParserDimensions | null) => unknown | Promise<unknown>);
|
|
onInternalStats: null | ((internalStats: InternalStats) => unknown | Promise<unknown>);
|
|
onSize: null | ((size: number | null) => unknown | Promise<unknown>);
|
|
onName: null | ((name: string) => unknown | Promise<unknown>);
|
|
onContainer: null | ((container: MediaParserContainer) => unknown | Promise<unknown>);
|
|
onIsHdr: null | ((isHdr: boolean) => unknown | Promise<unknown>);
|
|
onMetadata: null | ((metadata: MediaParserMetadataEntry[]) => unknown | Promise<unknown>);
|
|
onLocation: null | ((location: MediaParserLocation | null) => unknown | Promise<unknown>);
|
|
onMimeType: null | ((mimeType: string | null) => unknown | Promise<unknown>);
|
|
onKeyframes: null | ((keyframes: MediaParserKeyframe[] | null) => unknown | Promise<unknown>);
|
|
onSlowKeyframes: null | ((keyframes: MediaParserKeyframe[]) => unknown | Promise<unknown>);
|
|
onSlowNumberOfFrames: null | ((samples: number) => unknown | Promise<unknown>);
|
|
onImages: null | ((images: MediaParserEmbeddedImage[]) => unknown | Promise<unknown>);
|
|
onSampleRate: null | ((sampleRate: number | null) => unknown | Promise<unknown>);
|
|
onNumberOfAudioChannels: null | ((numberOfChannels: number | null) => unknown | Promise<unknown>);
|
|
onSlowVideoBitrate: null | ((videoBitrate: number | null) => unknown | Promise<unknown>);
|
|
onSlowAudioBitrate: null | ((audioBitrate: number | null) => unknown | Promise<unknown>);
|
|
onM3uStreams: null | ((streams: M3uStream[] | null) => unknown | Promise<unknown>);
|
|
};
|
|
export type ParseMediaCallbacks = Partial<ParseMediaCallbacksMandatory>;
|
|
export interface ParseMediaData {
|
|
dimensions: MediaParserDimensions | null;
|
|
durationInSeconds: number | null;
|
|
slowDurationInSeconds: number;
|
|
slowFps: number;
|
|
slowStructure: MediaParserStructureUnstable;
|
|
fps: number | null;
|
|
videoCodec: MediaParserVideoCodec | null;
|
|
audioCodec: MediaParserAudioCodec | null;
|
|
tracks: MediaParserTrack[];
|
|
rotation: number | null;
|
|
unrotatedDimensions: MediaParserDimensions | null;
|
|
isHdr: boolean;
|
|
internalStats: InternalStats;
|
|
size: number | null;
|
|
name: string;
|
|
metadata: MediaParserMetadataEntry[];
|
|
location: MediaParserLocation | null;
|
|
container: MediaParserContainer;
|
|
mimeType: string | null;
|
|
keyframes: MediaParserKeyframe[] | null;
|
|
slowKeyframes: MediaParserKeyframe[];
|
|
slowNumberOfFrames: number;
|
|
images: MediaParserEmbeddedImage[];
|
|
sampleRate: number | null;
|
|
numberOfAudioChannels: number | null;
|
|
slowVideoBitrate: number | null;
|
|
slowAudioBitrate: number | null;
|
|
m3uStreams: M3uStream[] | null;
|
|
}
|
|
export type ParseMediaResult<T extends Partial<ParseMediaFields>> = {} extends T ? Record<never, never> : {
|
|
[K in keyof T]: T[K] extends true ? K extends keyof ParseMediaData ? ParseMediaData[K] : never : never;
|
|
};
|
|
export type ParseMediaProgress = {
|
|
bytes: number;
|
|
percentage: number | null;
|
|
totalBytes: number | null;
|
|
};
|
|
export type ParseMediaOnProgress = (progress: ParseMediaProgress) => void | Promise<void>;
|
|
type ReaderParams = {
|
|
reader: MediaParserReaderInterface;
|
|
};
|
|
export type M3uPlaylistContext = {
|
|
mp4HeaderSegment: IsoBaseMediaStructure | null;
|
|
isLastChunkInPlaylist: boolean;
|
|
};
|
|
export type SerializeableOptionalParseMediaParams<F extends Options<ParseMediaFields>> = {
|
|
logLevel: MediaParserLogLevel;
|
|
progressIntervalInMs: number | null;
|
|
fields: F | null;
|
|
acknowledgeRemotionLicense: boolean;
|
|
m3uPlaylistContext: M3uPlaylistContext | null;
|
|
makeSamplesStartAtZero: boolean;
|
|
seekingHints: SeekingHints | null;
|
|
};
|
|
type OptionalParseMediaParams<F extends Options<ParseMediaFields>> = SerializeableOptionalParseMediaParams<F> & {
|
|
controller: MediaParserController | undefined;
|
|
onParseProgress: ParseMediaOnProgress | null;
|
|
selectM3uStream: SelectM3uStreamFn;
|
|
selectM3uAssociatedPlaylists: SelectM3uAssociatedPlaylistsFn;
|
|
};
|
|
type ParseMediaSampleCallbacks = {
|
|
onAudioTrack: MediaParserOnAudioTrack | null;
|
|
onVideoTrack: MediaParserOnVideoTrack | null;
|
|
};
|
|
export type ParseMediaMode = 'query' | 'download';
|
|
export type ParseMediaSrc = string | Blob | URL;
|
|
export type ParseMediaRange = [number, number] | number | null;
|
|
export type OnDiscardedData = (data: Uint8Array) => Promise<void>;
|
|
export type ContinueAfterError = {
|
|
action: 'fail';
|
|
} | {
|
|
action: 'download';
|
|
};
|
|
export type ParseMediaOnError = (error: Error) => ContinueAfterError | Promise<ContinueAfterError>;
|
|
type InternalOptions = {
|
|
onDiscardedData: OnDiscardedData | null;
|
|
mode: ParseMediaMode;
|
|
onError: ParseMediaOnError;
|
|
apiName: string;
|
|
};
|
|
export type ParseMediaMandatoryOptions = {
|
|
src: ParseMediaSrc;
|
|
};
|
|
type DownloadOptions = {
|
|
writer: WriterInterface;
|
|
onError?: ParseMediaOnError;
|
|
};
|
|
export type InternalParseMediaOptions<F extends Options<ParseMediaFields>> = ParseMediaMandatoryOptions & OptionalParseMediaParams<F> & ReaderParams & ParseMediaCallbacks & ParseMediaSampleCallbacks & InternalOptions;
|
|
export type ParseMediaOnWorkerOptions<F extends Options<ParseMediaFields>> = ParseMediaMandatoryOptions & Partial<OptionalParseMediaParams<F>> & Partial<ParseMediaCallbacks> & Partial<ParseMediaSampleCallbacks>;
|
|
export type ParseMediaOptions<F extends Options<ParseMediaFields>> = ParseMediaOnWorkerOptions<F> & Partial<ReaderParams>;
|
|
export type DownloadAndParseMediaOptions<F extends Options<ParseMediaFields>> = ParseMediaMandatoryOptions & DownloadOptions & Partial<OptionalParseMediaParams<F>> & Partial<ReaderParams> & Partial<ParseMediaCallbacks> & Partial<ParseMediaSampleCallbacks>;
|
|
export type InternalParseMedia = <F extends Options<ParseMediaFields>>(options: InternalParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
|
|
export type ParseMedia = <F extends Options<ParseMediaFields>>(options: ParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
|
|
export type ParseMediaOnWorker = <F extends Options<ParseMediaFields>>(options: ParseMediaOnWorkerOptions<F>) => Promise<ParseMediaResult<F>>;
|
|
export type DownloadAndParseMedia = <F extends Options<ParseMediaFields>>(options: DownloadAndParseMediaOptions<F>) => Promise<ParseMediaResult<F>>;
|
|
export {};
|