137 lines
3 KiB
TypeScript
137 lines
3 KiB
TypeScript
declare module 'mp4box' {
|
|
export interface MP4MediaTrack {
|
|
id: number;
|
|
created: Date;
|
|
modified: Date;
|
|
movie_duration: number;
|
|
movie_timescale: number;
|
|
layer: number;
|
|
alternate_group: number;
|
|
volume: number;
|
|
track_width: number;
|
|
track_height: number;
|
|
timescale: number;
|
|
duration: number;
|
|
bitrate: number;
|
|
codec: string;
|
|
language: string;
|
|
nb_samples: number;
|
|
}
|
|
|
|
export interface MP4VideoData {
|
|
width: number;
|
|
height: number;
|
|
}
|
|
|
|
export interface MP4VideoTrack extends MP4MediaTrack {
|
|
video: MP4VideoData;
|
|
}
|
|
|
|
export interface MP4AudioData {
|
|
sample_rate: number;
|
|
channel_count: number;
|
|
sample_size: number;
|
|
}
|
|
|
|
export interface MP4AudioTrack extends MP4MediaTrack {
|
|
audio: MP4AudioData;
|
|
}
|
|
|
|
export type MP4Track = MP4VideoTrack | MP4AudioTrack;
|
|
|
|
export interface MP4Info {
|
|
duration: number;
|
|
timescale: number;
|
|
fragment_duration: number;
|
|
isFragmented: boolean;
|
|
isProgressive: boolean;
|
|
hasIOD: boolean;
|
|
brands: string[];
|
|
created: Date;
|
|
modified: Date;
|
|
tracks: MP4Track[];
|
|
audioTracks: MP4AudioTrack[];
|
|
videoTracks: MP4VideoTrack[];
|
|
}
|
|
|
|
export interface MP4Sample {
|
|
alreadyRead: number;
|
|
chunk_index: number;
|
|
chunk_run_index: number;
|
|
cts: number;
|
|
data: Uint8Array;
|
|
degradation_priority: number;
|
|
depends_on: number;
|
|
description: unknown;
|
|
description_index: number;
|
|
dts: number;
|
|
duration: number;
|
|
has_redundancy: number;
|
|
is_depended_on: number;
|
|
is_leading: number;
|
|
is_sync: boolean;
|
|
number: number;
|
|
offset: number;
|
|
size: number;
|
|
timescale: number;
|
|
track_id: number;
|
|
}
|
|
|
|
export type MP4ArrayBuffer = ArrayBuffer & { fileStart: number };
|
|
|
|
export class DataStream {
|
|
static BIG_ENDIAN: boolean;
|
|
static LITTLE_ENDIAN: boolean;
|
|
buffer: ArrayBuffer;
|
|
constructor(
|
|
arrayBuffer?: ArrayBuffer,
|
|
byteOffset: number,
|
|
endianness: boolean
|
|
): void;
|
|
// TODO: Complete interface
|
|
}
|
|
|
|
export interface Trak {
|
|
mdia?: {
|
|
minf?: {
|
|
stbl?: {
|
|
stsd?: {
|
|
entries: {
|
|
avcC?: {
|
|
write: (stream: DataStream) => void;
|
|
};
|
|
hvcC?: {
|
|
write: (stream: DataStream) => void;
|
|
};
|
|
}[];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
// TODO: Complete interface
|
|
}
|
|
|
|
export interface MP4File {
|
|
[x: string]: unknown;
|
|
onMoovStart?: () => void;
|
|
onReady?: (info: MP4Info) => void;
|
|
onError?: (e: string) => void;
|
|
onSamples?: (id: number, user: unknown, samples: MP4Sample[]) => unknown;
|
|
|
|
appendBuffer(data: MP4ArrayBuffer): number;
|
|
start(): void;
|
|
stop(): void;
|
|
flush(): void;
|
|
releaseUsedSamples(trackId: number, sampleNumber: number): void;
|
|
setExtractionOptions(
|
|
trackId: number,
|
|
user?: unknown,
|
|
options?: { nbSamples?: number; rapAlignment?: number }
|
|
): void;
|
|
getTrackById(trackId: number): Trak;
|
|
}
|
|
|
|
export function createFile(): MP4File;
|
|
|
|
export {};
|
|
}
|