mp4box
Version:
JavaScript version of GPAC's MP4Box tool
1,580 lines (1,517 loc) • 167 kB
TypeScript
declare class MP4BoxBuffer extends ArrayBuffer {
fileStart: number;
usedBytes?: number;
constructor(byteLength: number);
static fromArrayBuffer(buffer: ArrayBufferLike, fileStart: number): MP4BoxBuffer;
}
declare class ContainerBox extends Box {
subBoxNames?: ReadonlyArray<string>;
/** @bundle box-write.js */
write(stream: MultiBufferStream | DataStream): void;
/** @bundle box-print.js */
print(output: Output): void;
/** @bundle box-parse.js */
parse(stream: MultiBufferStream): void;
}
declare class co64Box extends FullBox {
static readonly fourcc: "co64";
box_name: "ChunkLargeOffsetBox";
chunk_offsets: Array<number>;
parse(stream: MultiBufferStream): void;
/** @bundle writing/co64.js */
write(stream: MultiBufferStream): void;
}
declare class cslgBox extends FullBox {
static readonly fourcc: "cslg";
box_name: "CompositionToDecodeBox";
compositionToDTSShift: number;
leastDecodeToDisplayDelta: number;
greatestDecodeToDisplayDelta: number;
compositionStartTime: number;
compositionEndTime: number;
parse(stream: MultiBufferStream): void;
/** @bundle writing/cslg.js */
write(stream: MultiBufferStream): void;
}
declare class cttsBox extends FullBox {
static readonly fourcc: "ctts";
box_name: "CompositionOffsetBox";
sample_counts: Array<number>;
sample_offsets: Array<number>;
parse(stream: MultiBufferStream): void;
/** @bundle writing/ctts.js */
write(stream: MultiBufferStream): void;
/** @bundle box-unpack.js */
unpack(samples: Array<Sample>): void;
}
declare class elngBox extends FullBox {
static readonly fourcc: "elng";
box_name: "ExtendedLanguageBox";
extended_language: string;
parse(stream: MultiBufferStream): void;
/** @bundle writing/elng.js */
write(stream: MultiBufferStream): void;
}
declare class elstBox extends FullBox {
static readonly fourcc: "elst";
box_name: "EditListBox";
entries: Array<Entry>;
parse(stream: MultiBufferStream): void;
/** @bundle writing/elst.js */
write(stream: MultiBufferStream): void;
}
declare class hdlrBox extends FullBox {
static readonly fourcc: "hdlr";
box_name: "HandlerBox";
version: number;
handler: string;
name: string;
flags: number;
parse(stream: MultiBufferStream): void;
/** @bundle writing/hldr.js */
write(stream: MultiBufferStream): void;
}
interface Assocation {
id: number;
props: Array<{
property_index: number;
essential: boolean;
}>;
}
declare class ipmaBox extends FullBox {
static readonly fourcc: "ipma";
box_name: "ItemPropertyAssociationBox";
associations: Array<Assocation>;
version: number;
flags: number;
parse(stream: MultiBufferStream): void;
}
declare class kindBox extends FullBox {
static readonly fourcc: "kind";
box_name: "KindBox";
schemeURI: string;
value: string;
parse(stream: MultiBufferStream): void;
/** @bundle writing/kind.js */
write(stream: MultiBufferStream): void;
}
declare class mdhdBox extends FullBox {
static readonly fourcc: "mdhd";
box_name: "MediaHeaderBox";
creation_time: number;
modification_time: number;
timescale: number;
duration: number;
parse(stream: MultiBufferStream): void;
/** @bundle writing/mdhd.js */
write(stream: MultiBufferStream): void;
}
declare class mehdBox extends FullBox {
static readonly fourcc: "mehd";
box_name: "MovieExtendsHeaderBox";
fragment_duration: number;
parse(stream: MultiBufferStream): void;
/** @bundle writing/mehd.js */
write(stream: MultiBufferStream): void;
}
declare class mvhdBox extends FullBox {
static readonly fourcc: "mvhd";
box_name: "MovieHeaderBox";
creation_time: number;
modification_time: number;
timescale: number;
duration: number;
rate: number;
volume: number;
next_track_id: number;
matrix: Matrix;
parse(stream: MultiBufferStream): void;
/** @bundle writing/mvhd.js */
write(stream: MultiBufferStream): void;
/** @bundle box-print.js */
print(output: Output): void;
}
declare class psshBox extends FullBox {
static readonly fourcc: "pssh";
box_name: "ProtectionSystemSpecificHeaderBox";
system_id: string;
kid: Array<string>;
protection_data?: Uint8Array;
parse(stream: MultiBufferStream): void;
}
interface Entry$1 {
sample_count: number;
group_description_index: number;
}
declare class sbgpBox extends FullBox {
static readonly fourcc: "sbgp";
box_name: "SampleToGroupBox";
grouping_type: string;
grouping_type_parameter: number;
entries: Array<Entry$1>;
parse(stream: MultiBufferStream): void;
/** @bundle writing/sbgp.js */
write(stream: MultiBufferStream): void;
}
declare class sdtpBox extends FullBox {
static readonly fourcc: "sdtp";
box_name: "SampleDependencyTypeBox";
is_leading: Array<number>;
sample_depends_on: Array<number>;
sample_is_depended_on: Array<number>;
sample_has_redundancy: Array<number>;
parse(stream: MultiBufferStream): void;
}
declare class sgpdBox extends FullBox {
static readonly fourcc: "sgpd";
box_name: "SampleGroupDescriptionBox";
grouping_type: 'alst' | 'avll' | 'avss' | 'dtrt' | 'mvif' | 'prol' | 'rap' | 'rash' | 'roll' | 'scif' | 'scnm' | 'seig' | 'stsa' | 'sync' | 'tele' | 'tsas' | 'tscl' | 'vipr' | (string & {});
default_length: number;
default_group_description_index: number;
default_sample_description_index: number;
entries: Array<SampleGroupEntry>;
used: boolean;
parse(stream: MultiBufferStream): void;
/** @bundle writing/sgpd.js */
write(stream: MultiBufferStream): void;
}
declare class stcoBox extends FullBox {
static readonly fourcc: "stco";
box_name: "ChunkOffsetBox";
chunk_offsets: Array<number>;
parse(stream: MultiBufferStream): void;
/** @bundle writings/stco.js */
write(stream: MultiBufferStream): void;
/** @bundle box-unpack.js */
unpack(samples: Array<Sample>): void;
}
declare class stdpBox extends FullBox {
static readonly fourcc: "stpd";
box_name: "DegradationPriorityBox";
priority: Array<number>;
parse(stream: MultiBufferStream): void;
}
declare class stscBox extends FullBox {
static readonly fourcc: "stsc";
box_name: "SampleToChunkBox";
first_chunk: Array<number>;
samples_per_chunk: Array<number>;
sample_description_index: Array<number>;
parse(stream: MultiBufferStream): void;
write(stream: MultiBufferStream): void;
unpack(samples: Array<Sample>): void;
}
declare class av1CBox extends Box {
static readonly fourcc: "av1C";
box_name: "AV1CodecConfigurationBox";
version: number;
seq_profile: number;
seq_level_idx_0: number;
seq_tier_0: number;
high_bitdepth: number;
twelve_bit: number;
monochrome: number;
chroma_subsampling_x: number;
chroma_subsampling_y: number;
chroma_sample_position: number;
reserved_1: number;
initial_presentation_delay_present: number;
initial_presentation_delay_minus_one: number;
reserved_2: number;
configOBUs: Uint8Array;
parse(stream: MultiBufferStream): void;
}
declare class ParameterSetArray extends Array<Nalu> {
toString(): string;
}
declare class avcCBox extends Box {
static readonly fourcc: "avcC";
box_name: "AVCConfigurationBox";
configurationVersion: number;
AVCProfileIndication: number;
profile_compatibility: number;
AVCLevelIndication: number;
lengthSizeMinusOne: number;
nb_SPS_nalus: number;
SPS: ParameterSetArray;
nb_PPS_nalus: number;
PPS: ParameterSetArray;
ext: Uint8Array;
parse(stream: MultiBufferStream | DataStream): void;
/** @bundle writing/avcC.js */
write(stream: MultiBufferStream): void;
}
declare class NALUArrays extends Array<NaluArray> {
toString(): string;
}
declare class hvcCBox extends Box {
static readonly fourcc: "hvcC";
box_name: "HEVCConfigurationBox";
configurationVersion: number;
general_profile_space: number;
general_tier_flag: number;
general_profile_idc: number;
general_profile_compatibility: number;
general_constraint_indicator: Uint8Array;
general_level_idc: number;
min_spatial_segmentation_idc: number;
parallelismType: number;
chroma_format_idc: number;
bit_depth_luma_minus8: number;
bit_depth_chroma_minus8: number;
avgFrameRate: number;
constantFrameRate: number;
numTemporalLayers: number;
temporalIdNested: number;
lengthSizeMinusOne: number;
nalu_arrays: NALUArrays;
parse(stream: MultiBufferStream | DataStream): void;
/** @bundle writing/write.js */
write(stream: DataStream): void;
}
declare class vpcCBox extends FullBox {
static readonly fourcc: "vpcC";
box_name: "VPCodecConfigurationRecord";
profile: number;
level: number;
bitDepth: number;
chromaSubsampling: number;
videoFullRangeFlag: number;
colourPrimaries: number;
transferCharacteristics: number;
matrixCoefficients: number;
codecIntializationDataSize: number;
codecIntializationData: Uint8Array;
colorSpace: number;
transferFunction: number;
parse(stream: MultiBufferStream): void;
}
declare class vvcCBox extends FullBox {
static readonly fourcc: "vvcC";
box_name: "VvcConfigurationBox";
lengthSizeMinusOne: number;
ptl_present_flag: number;
ols_idx: number;
num_sublayers: number;
constant_frame_rate: number;
chroma_format_idc: number;
bit_depth_minus8: number;
num_bytes_constraint_info: number;
general_profile_idc: number;
general_tier_flag: number;
general_level_idc: number;
ptl_frame_only_constraint_flag: number;
ptl_multilayer_enabled_flag: number;
general_constraint_info: Uint8Array;
ptl_sublayer_present_mask: number;
sublayer_level_idc: Array<number>;
ptl_num_sub_profiles: number;
general_sub_profile_idc: Array<number>;
max_picture_width: number;
max_picture_height: number;
avg_frame_rate: number;
nalu_arrays: Array<NaluArray>;
parse(stream: MultiBufferStream): void;
}
declare class SampleEntry extends ContainerBox {
hdr_size?: number;
start?: number;
static readonly registryId: unique symbol;
data_reference_index?: number;
constructor(size?: number, hdr_size?: number, start?: number);
/** @bundle box-codecs.js */
isVideo(): boolean;
/** @bundle box-codecs.js */
isAudio(): boolean;
/** @bundle box-codecs.js */
isSubtitle(): boolean;
/** @bundle box-codecs.js */
isMetadata(): boolean;
/** @bundle box-codecs.js */
isHint(): boolean;
/** @bundle box-codecs.js */
getCodec(): string;
/** @bundle box-codecs.js */
getWidth(): number;
/** @bundle box-codecs.js */
getHeight(): number;
/** @bundle box-codecs.js */
getChannelCount(): number;
/** @bundle box-codecs.js */
getSampleRate(): number;
/** @bundle box-codecs.js */
getSampleSize(): number;
/** @bundle parsing/sampleentries/sampleentry.js */
parseHeader(stream: MultiBufferStream): void;
/** @bundle parsing/sampleentries/sampleentry.js */
parse(stream: MultiBufferStream): void;
/** @bundle parsing/sampleentries/sampleentry.js */
parseDataAndRewind(stream: MultiBufferStream): void;
/** @bundle parsing/sampleentries/sampleentry.js */
parseFooter(stream: MultiBufferStream): void;
/** @bundle writing/sampleentry.js */
writeHeader(stream: MultiBufferStream): void;
/** @bundle writing/sampleentry.js */
writeFooter(stream: MultiBufferStream): void;
/** @bundle writing/sampleentry.js */
write(stream: MultiBufferStream): void;
}
declare class HintSampleEntry extends SampleEntry {
}
declare class MetadataSampleEntry extends SampleEntry {
/** @bundle box-codecs.js */
isMetadata(): boolean;
}
declare class SubtitleSampleEntry extends SampleEntry {
/** @bundle box-codecs.js */
isSubtitle(): boolean;
}
declare class TextSampleEntry extends SampleEntry {
}
declare class VisualSampleEntry extends SampleEntry {
av1C?: av1CBox;
avcC?: avcCBox;
hvcC?: hvcCBox;
vpcC?: vpcCBox;
vvcC?: vvcCBox;
width: number;
height: number;
horizresolution: number;
vertresolution: number;
frame_count: number;
compressorname: string;
depth: number;
parse(stream: MultiBufferStream): void;
/** @bundle box-codecs.js */
isVideo(): boolean;
/** @bundle box-codecs.js */
getWidth(): number;
/** @bundle box-codecs.js */
getHeight(): number;
/** @bundle writing/sampleentries/sampleentry.js */
write(stream: MultiBufferStream): void;
}
declare class AudioSampleEntry extends SampleEntry {
version: number;
channel_count: number;
samplesize: number;
samplerate: number;
extensions: Uint8Array;
parse(stream: MultiBufferStream): void;
/** @bundle box-codecs.js */
isAudio(): boolean;
/** @bundle box-codecs.js */
getChannelCount(): number;
/** @bundle box-codecs.js */
getSampleRate(): number;
/** @bundle box-codecs.js */
getSampleSize(): number;
/** @bundle writing/sampleentry.js */
write(stream: MultiBufferStream): void;
}
declare class SystemSampleEntry extends SampleEntry {
parse(stream: MultiBufferStream): void;
/** @bundle writing/sampleentry.js */
write(stream: MultiBufferStream): void;
}
declare class stsdBox extends FullBox {
static readonly fourcc: "stsd";
box_name: "SampleDescriptionBox";
entries: Array<SampleEntry>;
parse(stream: MultiBufferStream): void;
/** @bundle writing/stsd.js */
write(stream: MultiBufferStream): void;
}
declare class stssBox extends FullBox {
static readonly fourcc: "stss";
box_name: "SyncSampleBox";
sample_numbers: Array<number>;
parse(stream: MultiBufferStream): void;
/** @bundle writing/stss.js */
write(stream: MultiBufferStream): void;
}
declare class stszBox extends FullBox {
static readonly fourcc: "stsz";
box_name: "SampleSizeBox";
sample_sizes: Array<number>;
sample_size: number;
sample_count: number;
parse(stream: MultiBufferStream): void;
/** @bundle writing/stsz.js */
write(stream: MultiBufferStream): void;
/** @bundle box-unpack.js */
unpack(samples: any): void;
}
declare class sttsBox extends FullBox {
static readonly fourcc: "stts";
box_name: "TimeToSampleBox";
sample_counts: Array<number>;
sample_deltas: Array<number>;
parse(stream: MultiBufferStream): void;
/** @bundle writing/stts.js */
write(stream: MultiBufferStream): void;
/** @bundle box-unpack.js */
unpack(samples: Array<Sample>): void;
}
declare class stz2Box extends FullBox {
static readonly fourcc: "stz2";
box_name: "CompactSampleSizeBox";
sample_sizes: Array<number>;
reserved: number;
field_size: number;
parse(stream: MultiBufferStream): void;
}
interface SampleInfo {
size: number;
sample_delta: number;
subsamples: Array<SubSample>;
}
declare class subsBox extends FullBox {
static readonly fourcc: "subs";
box_name: "SubSampleInformationBox";
entries: Array<SampleInfo>;
parse(stream: MultiBufferStream): void;
}
declare class tfdtBox extends FullBox {
static readonly fourcc: "tfdt";
box_name: "TrackFragmentBaseMediaDecodeTimeBox";
baseMediaDecodeTime: number;
parse(stream: MultiBufferStream): void;
/** @bundle writing/tdft.js */
write(stream: MultiBufferStream): void;
}
declare class tfhdBox extends FullBox {
static readonly fourcc: "tfhd";
box_name: "TrackFragmentHeaderBox";
track_id: number;
base_data_offset: number;
default_sample_description_index: number;
default_sample_duration: number;
default_sample_size: number;
default_sample_flags: number;
parse(stream: MultiBufferStream): void;
/** @bundle writing/tfhd.js */
write(stream: any): void;
}
declare class tfraBox extends FullBox {
static readonly fourcc: "tfra";
box_name: "TrackFragmentRandomAccessBox";
track_ID: number;
length_size_of_traf_num: number;
length_size_of_trun_num: number;
length_size_of_sample_num: number;
entries: Array<SampleEntry>;
time: number;
moof_offset: number;
traf_number: number;
trun_number: number;
sample_number: number;
parse(stream: MultiBufferStream): void;
}
declare class tkhdBox extends FullBox {
static readonly fourcc: "tkhd";
box_name: "TrackHeaderBox";
creation_time: number;
modification_time: number;
track_id: number;
duration: number;
layer: number;
alternate_group: number;
volume: number;
matrix: Matrix;
width: number;
height: number;
parse(stream: MultiBufferStream): void;
write(stream: MultiBufferStream): void;
/** @bundle box-print.js */
print(output: {
log: (arg: string) => void;
indent: string;
}): void;
}
declare class trefBox extends Box {
static readonly fourcc: "tref";
box_name: "TrackReferenceBox";
static allowed_types: readonly ["hint", "cdsc", "font", "hind", "vdep", "vplx", "subt", "thmb", "auxl", "cdtg", "shsc", "aest"];
references: Array<TrackReferenceTypeBox>;
parse(stream: MultiBufferStream): void;
}
declare class trexBox extends FullBox {
static readonly fourcc: "trex";
box_name: "TrackExtendsBox";
track_id: number;
default_sample_description_index: number;
default_sample_duration: number;
default_sample_size: number;
default_sample_flags: number;
parse(stream: MultiBufferStream): void;
write(stream: MultiBufferStream): void;
}
declare class trunBox extends FullBox {
static readonly fourcc: "trun";
box_name: "TrackRunBox";
sample_count: number;
data_offset: number;
first_sample_flags: number;
sample_duration: Array<number>;
sample_size: Array<number>;
sample_flags: Array<number>;
sample_composition_time_offset: Array<number>;
data_offset_position: number;
parse(stream: MultiBufferStream): void;
/** @bundle writing/trun.js */
write(stream: MultiBufferStream): void;
}
declare class tycoBox extends Box {
static readonly fourcc: "tyco";
box_name: "TypeCombinationBox";
compatible_brands: Array<string>;
parse(stream: MultiBufferStream): void;
}
declare class drefBox extends FullBox {
static readonly fourcc: "dref";
box_name: "DataReferenceBox";
entries: Array<Box>;
parse(stream: MultiBufferStream): void;
/** @bundle writing/dref.js */
write(stream: MultiBufferStream): void;
}
declare class EntityToGroup extends FullBox {
group_id: number;
num_entities_in_group: number;
entity_ids: Array<number>;
parse(stream: MultiBufferStream): void;
}
declare class mfhdBox extends FullBox {
static readonly fourcc: "mfhd";
box_name: "MovieFragmentHeaderBox";
sequence_number: number;
parse(stream: MultiBufferStream): void;
/** @bundle writing/mfhd.js */
write(stream: MultiBufferStream): void;
}
declare class smhdBox extends FullBox {
static readonly fourcc: "smhd";
box_name: "SoundMediaHeaderBox";
balance: number;
parse(stream: MultiBufferStream): void;
/** @bundle writing/smhd.js */
write(stream: MultiBufferStream): void;
}
declare class sthdBox extends FullBox {
static readonly fourcc: "sthd";
box_name: "SubtitleMediaHeaderBox";
}
declare class vmhdBox extends FullBox {
static readonly fourcc: "vmhd";
box_name: "VideoMediaHeaderBox";
graphicsmode: number;
opcolor: Uint16Array | [number, number, number];
parse(stream: MultiBufferStream): void;
/** @bundle writing/vmhd.js */
write(stream: MultiBufferStream): void;
}
declare class ispeBox extends FullBox {
static readonly fourcc: "ispe";
box_name: "ImageSpatialExtentsProperty";
image_width: number;
image_height: number;
parse(stream: MultiBufferStream): void;
}
declare class clapBox extends Box {
static readonly fourcc: "clap";
box_name: "CleanApertureBox";
cleanApertureWidthN: number;
cleanApertureWidthD: number;
cleanApertureHeightN: number;
cleanApertureHeightD: number;
horizOffN: number;
horizOffD: number;
vertOffN: number;
vertOffD: number;
parse(stream: MultiBufferStream): void;
}
declare class irotBox extends Box {
static readonly fourcc: "irot";
box_name: "ImageRotation";
angle: number;
parse(stream: MultiBufferStream): void;
}
declare class maxrBox extends Box {
static readonly fourcc: "maxr";
box_name: "hintmaxrate";
period: number;
bytes: number;
parse(stream: MultiBufferStream): void;
}
/**********************************************************************************/
/**********************************************************************************/
declare class mdatBox extends Box {
static readonly fourcc: "mdat";
box_name: "MediaDataBox";
stream?: MultiBufferStream;
}
declare class idatBox extends Box {
static readonly fourcc: "idat";
box_name: "ItemDataBox";
}
declare class freeBox extends Box {
static readonly fourcc: "free";
box_name: "FreeSpaceBox";
}
declare class skipBox extends Box {
static readonly fourcc: "skip";
box_name: "FreeSpaceBox";
}
/**********************************************************************************/
/**********************************************************************************/
declare class hmhdBox extends FullBox {
static readonly fourcc: "hmhd";
box_name: "HintMediaHeaderBox";
}
declare class nmhdBox extends FullBox {
static readonly fourcc: "nmhd";
box_name: "NullMediaHeaderBox";
}
declare class iodsBox extends FullBox {
static readonly fourcc: "iods";
box_name: "ObjectDescriptorBox";
}
declare class xmlBox extends FullBox {
static readonly fourcc: "xml ";
box_name: "XMLBox";
}
declare class bxmlBox extends FullBox {
static readonly fourcc: "bxml";
box_name: "BinaryXMLBox";
}
declare class iproBox extends FullBox {
static readonly fourcc: "ipro";
box_name: "ItemProtectionBox";
sinfs: Array<sinfBox>;
get protections(): sinfBox[];
}
/**********************************************************************************/
/**********************************************************************************/
declare class moovBox extends ContainerBox {
static readonly fourcc: "moov";
box_name: "MovieBox";
timescale: number;
mvhd: mvhdBox;
mvhds: Array<mvhdBox>;
mvex?: mvexBox;
mvexs: Array<mvexBox>;
iods: iodsBox;
iodss: Array<iodsBox>;
trak: trakBox;
traks: Array<trakBox>;
psshs: Array<psshBox>;
subBoxNames: readonly ["trak", "pssh"];
}
declare class trakBox extends ContainerBox {
static readonly fourcc: "trak";
box_name: "TrackBox";
mdia: mdiaBox;
mdias: Array<mdiaBox>;
tkhd: tkhdBox;
tkhds: Array<tkhdBox>;
tref: trefBox;
trefs: Array<trefBox>;
edts?: edtsBox;
edtss: Array<edtsBox>;
udta: udtaBox;
udtas: Array<udtaBox>;
samples_duration: number;
samples: Array<Sample>;
samples_size: number;
nextSample: number;
lastValidSample: number;
sample_groups_info: Array<SampleGroupInfo>;
first_dts: number;
first_traf_merged: boolean;
has_fragment_subsamples: boolean;
}
declare class edtsBox extends ContainerBox {
static readonly fourcc: "edts";
box_name: "EditBox";
elst?: elstBox;
elsts: Array<elstBox>;
}
declare class mdiaBox extends ContainerBox {
static readonly fourcc: "mdia";
box_name: "MediaBox";
elng: elngBox;
elngs: Array<elngBox>;
hdlr: hdlrBox;
hdlrs: Array<hdlrBox>;
mdhd: mdhdBox;
mdhds: Array<mdhdBox>;
minf: minfBox;
minfs: Array<minfBox>;
}
declare class minfBox extends ContainerBox {
static readonly fourcc: "minf";
box_name: "MediaInformationBox";
stbl: stblBox;
stbls: Array<stblBox>;
hmhd: hmhdBox;
hmhds: Array<hmhdBox>;
vmhd?: vmhdBox;
vmhds?: Array<vmhdBox>;
smhd?: smhdBox;
smhds?: Array<smhdBox>;
sthd?: sthdBox;
sthds?: Array<sthdBox>;
nmhd?: nmhdBox;
nmhds?: Array<nmhdBox>;
dinf: dinfBox;
dinfs: Array<dinfBox>;
dref: drefBox;
drefs: Array<drefBox>;
}
declare class dinfBox extends ContainerBox {
static readonly fourcc: "dinf";
box_name: "DataInformationBox";
}
declare class stblBox extends ContainerBox {
static readonly fourcc: "stbl";
box_name: "SampleTableBox";
cslg: cslgBox;
cslgs: Array<cslgBox>;
stsd: stsdBox;
stsds: Array<stsdBox>;
stsc: stscBox;
stscs: Array<stscBox>;
stco: stcoBox;
stcos: Array<stcoBox>;
co64: co64Box;
co64s: Array<co64Box>;
stsz: stszBox;
stszs: Array<stszBox>;
stz2: stz2Box;
stz2s: Array<stz2Box>;
stts: sttsBox;
sttss: Array<sttsBox>;
ctts: cttsBox;
cttss: Array<cttsBox>;
stss: stssBox;
stsss: Array<stssBox>;
subs: subsBox;
subss: Array<subsBox>;
stdp: stdpBox;
stdps: Array<stdpBox>;
sdtp: sdtpBox;
sdtps: Array<sdtpBox>;
sgpds: Array<sgpdBox>;
sbgps: Array<sbgpBox>;
subBoxNames: string[];
}
declare class mvexBox extends ContainerBox {
static readonly fourcc: "mvex";
box_name: "MovieExtendsBox";
trex: trexBox;
mehd: mehdBox;
mehds: Array<mehdBox>;
trexs: Array<trexBox>;
subBoxNames: string[];
}
declare class moofBox extends ContainerBox {
static readonly fourcc: "moof";
box_name: "MovieFragmentBox";
mfhd: mfhdBox;
mfhds: Array<mfhdBox>;
traf: trafBox;
trafs: Array<trafBox>;
subBoxNames: string[];
}
declare class trafBox extends ContainerBox {
static readonly fourcc: "traf";
box_name: "TrackFragmentBox";
subs: subsBox;
subss: Array<subsBox>;
tfdt: tfdtBox;
tfdts: Array<tfdtBox>;
tfhd: tfhdBox;
tfhds: Array<tfhdBox>;
trun: trunBox;
first_sample_index: number;
sample_number: number;
sample_groups_info: Array<SampleGroupInfo>;
truns: Array<trunBox>;
sgpds: Array<sgpdBox>;
sbgps: Array<sbgpBox>;
subBoxNames: string[];
}
declare class vttcBox extends ContainerBox {
static readonly fourcc: "vttc";
box_name: "VTTCueBox";
}
declare class mfraBox extends ContainerBox {
static readonly fourcc: "mfra";
box_name: "MovieFragmentRandomAccessBox";
tfras: Array<tfraBox>;
subBoxNames: readonly ["tfra"];
}
declare class mecoBox extends ContainerBox {
static readonly fourcc: "meco";
box_name: "AdditionalMetadataContainerBox";
}
declare class hntiBox extends ContainerBox {
static readonly fourcc: "hnti";
box_name: "trackhintinformation";
subBoxNames: readonly ["sdp ", "rtp "];
}
declare class hinfBox extends ContainerBox {
static readonly fourcc: "hinf";
box_name: "hintstatisticsbox";
maxrs: Array<maxrBox>;
subBoxNames: readonly ["maxr"];
}
declare class strkBox extends ContainerBox {
static readonly fourcc: "strk";
box_name: "SubTrackBox";
}
declare class strdBox extends ContainerBox {
static readonly fourcc: "strd";
box_name: "SubTrackDefinitionBox";
}
declare class sinfBox extends ContainerBox {
static readonly fourcc: "sinf";
box_name: "ProtectionSchemeInfoBox";
}
declare class rinfBox extends ContainerBox {
static readonly fourcc: "rinf";
box_name: "RestrictedSchemeInfoBox";
}
declare class schiBox extends ContainerBox {
static readonly fourcc: "schi";
box_name: "SchemeInformationBox";
}
declare class trgrBox extends ContainerBox {
static readonly fourcc: "trgr";
box_name: "TrackGroupBox";
}
declare class udtaBox extends ContainerBox {
static readonly fourcc: "udta";
box_name: "UserDataBox";
kinds: Array<kindBox>;
strks: Array<strkBox>;
subBoxNames: readonly ["kind", "strk"];
}
declare class iprpBox extends ContainerBox {
static readonly fourcc: "iprp";
box_name: "ItemPropertiesBox";
ipco: ipcoBox;
ipmas: Array<ipmaBox>;
subBoxNames: readonly ["ipma"];
}
declare class ipcoBox extends ContainerBox {
static readonly fourcc: "ipco";
box_name: "ItemPropertyContainerBox";
hvcCs: Array<hvcCBox>;
ispes: Array<ispeBox>;
claps: Array<clapBox>;
irots: Array<irotBox>;
subBoxNames: readonly ["hvcC", "ispe", "clap", "irot"];
}
declare class grplBox extends ContainerBox {
static readonly fourcc: "grpl";
box_name: "GroupsListBox";
boxes: Array<EntityToGroup>;
}
declare class j2kHBox extends ContainerBox {
static readonly fourcc: "j2kH";
box_name: "J2KHeaderInfoBox";
}
declare class etypBox extends ContainerBox {
static readonly fourcc: "etyp";
box_name: "ExtendedTypeBox";
tycos: Array<tycoBox>;
subBoxNames: readonly ["tyco"];
}
declare class povdBox extends ContainerBox {
static readonly fourcc: "povd";
box_name: "ProjectedOmniVideoBox";
subBoxNames: readonly ["prfr"];
}
declare class ftypBox extends Box {
static readonly fourcc: "ftyp";
box_name: "FileTypeBox";
major_brand: string;
minor_version: number;
compatible_brands: Array<string>;
parse(stream: MultiBufferStream): void;
/** @bundle writing/ftyp.js */
write(stream: MultiBufferStream | DataStream): void;
}
declare class infeBox extends FullBox {
static readonly fourcc: "infe";
box_name: "ItemInfoEntry";
item_ID: number;
item_protection_index: number;
item_name: string;
content_type: string;
content_encoding: string;
extension_type: string;
item_type: string;
item_uri_type: string;
parse(stream: MultiBufferStream): void;
}
declare class iinfBox extends FullBox {
static readonly fourcc: "iinf";
box_name: "ItemInfoBox";
version: number;
entry_count: number;
item_infos: Array<infeBox>;
parse(stream: MultiBufferStream): void;
}
interface Extent {
extent_index: number;
extent_offset: number;
extent_length: number;
}
declare class ilocBox extends FullBox {
static readonly fourcc: "iloc";
box_name: "ItemLocationBox";
offset_size: number;
length_size: number;
base_offset_size: number;
index_size: number;
items: Array<{
base_offset: number;
construction_method: number;
item_ID: number;
data_reference_index: number;
extents: Array<Extent>;
}>;
parse(stream: MultiBufferStream): void;
}
declare class irefBox extends FullBox {
static readonly fourcc: "iref";
box_name: "ItemReferenceBox";
static allowed_types: readonly ["auxl", "base", "cdsc", "dimg", "dpnd", "eroi", "evir", "exbl", "fdl ", "font", "iloc", "mask", "mint", "pred", "prem", "tbas", "text", "thmb"];
references: Array<SingleItemTypeReferenceBox | SingleItemTypeReferenceBoxLarge>;
version: number;
parse(stream: MultiBufferStream): void;
}
declare class pitmBox extends FullBox {
static readonly fourcc: "pitm";
box_name: "PrimaryItemBox";
item_id: number;
parse(stream: MultiBufferStream): void;
}
declare class metaBox extends FullBox {
static readonly fourcc: "meta";
box_name: "MetaBox";
isQT: boolean;
hdlr: hdlrBox;
hdlrs: Array<hdlrBox>;
iinf: iinfBox;
iinfs: Array<iinfBox>;
idat: idatBox;
idats: Array<idatBox>;
ipro: iproBox;
ipros: Array<iproBox>;
grpl: grplBox;
grpls: Array<grplBox>;
iloc: ilocBox;
ilocs: Array<ilocBox>;
iprp: iprpBox;
iprps: Array<iprpBox>;
pitm: pitmBox;
pitms: Array<pitmBox>;
iref: irefBox;
irefs: Array<irefBox>;
dinf: dinfBox;
dinfs: Array<dinfBox>;
parse(stream: MultiBufferStream): void;
}
interface Reference$1 {
reference_type: number;
referenced_size: number;
subsegment_duration: number;
starts_with_SAP: number;
SAP_type: number;
SAP_delta_time: number;
}
declare class sidxBox extends FullBox {
static readonly fourcc: "sidx";
box_name: "CompressedSegmentIndexBox";
reference_ID: number;
timescale: number;
earliest_presentation_time: number;
first_offset: number;
references: Array<Reference$1>;
parse(stream: MultiBufferStream): void;
/** @bundle writing/sidx.js */
write(stream: MultiBufferStream): void;
}
declare function parseOneBox(stream: MultiBufferStream, headerOnly: boolean, parentSize?: number): IncompleteBox;
declare class SampleGroupInfo {
grouping_type: string;
grouping_type_parameter: number;
sbgp?: sbgpBox;
last_sample_in_run: number;
entry_index: number;
description: Description;
fragment_description: Description;
is_fragment: boolean;
constructor(grouping_type: string, grouping_type_parameter: number, sbgp?: sbgpBox);
}
interface IsoFileOptions {
brands?: Array<string>;
description_boxes?: Array<BoxKind>;
duration?: number;
height?: number;
id?: number;
language?: string;
layer?: number;
media_duration?: number;
rate?: number;
timescale?: number;
type?: SampleEntryFourCC;
width?: number;
hdlr?: string;
name?: string;
hevcDecoderConfigRecord?: ArrayBuffer;
avcDecoderConfigRecord?: ArrayBuffer;
balance?: number;
channel_count?: number;
samplesize?: number;
samplerate?: number;
namespace?: string;
schema_location?: string;
auxiliary_mime_types?: string;
description?: Box;
default_sample_description_index?: number;
default_sample_duration?: number;
default_sample_size?: number;
default_sample_flags?: number;
}
declare class ISOFile<TSegmentUser = unknown, TSampleUser = unknown> {
/** MutiBufferStream object used to parse boxes */
stream: MultiBufferStream;
/** Array of all boxes (in order) found in the file */
boxes: Array<Box>;
/** Array of all mdats */
mdats: Array<mdatBox>;
/** Array of all moofs */
moofs: Array<moofBox>;
/** Boolean indicating if the file is compatible with progressive parsing (moov first) */
isProgressive: boolean;
/** Boolean used to fire moov start event only once */
moovStartFound: boolean;
/** Callback called when the moov parsing starts */
onMoovStart?: () => void;
/** Boolean keeping track of the call to onMoovStart, to avoid double calls */
moovStartSent: boolean;
/** Callback called when the moov is entirely parsed */
onReady?: (info: Movie) => void;
/** Boolean keeping track of the call to onReady, to avoid double calls */
readySent: boolean;
/** Callback to call when segments are ready */
onSegment?: (id: number, user: TSegmentUser, buffer: ArrayBuffer, nextSample: number, last: boolean) => void;
/** Callback to call when samples are ready */
onSamples?: (id: number, user: TSampleUser, samples: Array<Sample>) => void;
/** Callback to call when there is an error in the parsing or processing of samples */
onError?: (module: string, message: string) => void;
/** Callback to call when an item is processed */
onItem?: () => void;
/** Boolean indicating if the moov box run-length encoded tables of sample information have been processed */
sampleListBuilt: boolean;
/** Array of Track objects for which fragmentation of samples is requested */
fragmentedTracks: Array<FragmentedTrack<TSegmentUser>>;
/** Array of Track objects for which extraction of samples is requested */
extractedTracks: Array<ExtractedTrack<TSampleUser>>;
/** Boolean indicating that fragmention is ready */
isFragmentationInitialized: boolean;
/** Boolean indicating that fragmented has started */
sampleProcessingStarted: boolean;
/** Number of the next 'moof' to generate when fragmenting */
nextMoofNumber: number;
/** Boolean indicating if the initial list of items has been produced */
itemListBuilt: boolean;
/** Callback called when the sidx box is entirely parsed */
onSidx?: (sidx: sidxBox) => void;
/** Boolean keeping track of the call to onSidx, to avoid double calls */
sidxSent: boolean;
/** @bundle isofile-item-processing.js */
items: Array<Item>;
/** @bundle isofile-item-processing.js */
entity_groups: Array<EntityGroup>;
/**
* size of the buffers allocated for samples
* @bundle isofile-item-processing.js
*/
itemsDataSize: number;
moov: moovBox;
moovs: Array<moovBox>;
sidx: sidxBox;
sidxs: Array<sidxBox>;
meta: metaBox;
metas: Array<metaBox>;
ftyp: ftypBox;
ftyps: Array<ftypBox>;
nextSeekPosition: number;
initial_duration: number;
constructor(stream?: MultiBufferStream, discardMdatData?: boolean);
setSegmentOptions(id: number, user: TSegmentUser, opts: Partial<{
nbSamples: number;
nbSamplesPerFragment: number;
sizePerSegment: number;
rapAlignement: boolean;
}>): void;
unsetSegmentOptions(id: number): void;
setExtractionOptions(id: number, user?: TSampleUser, { nbSamples: nb_samples }?: {
nbSamples?: number;
}): void;
unsetExtractionOptions(id: number): void;
parse(): void;
checkBuffer(ab?: MP4BoxBuffer): boolean;
/**
* Processes a new ArrayBuffer (with a fileStart property)
* Returns the next expected file position, or undefined if not ready to parse
*/
appendBuffer(ab: MP4BoxBuffer, last?: boolean): number;
getFragmentDuration(): {
num: number;
den: number;
};
getInfo(): Movie;
setNextSeekPositionFromSample(sample: Sample): void;
processSamples(last?: boolean): void;
getBox<T extends AllIdentifiers>(type: T): AllRegisteredBoxes[T] | undefined;
getBoxes<T extends AllIdentifiers>(type: T, returnEarly: boolean): AllRegisteredBoxes[T][];
getTrackSamplesInfo(track_id: number): Sample[];
getTrackSample(track_id: number, number: number): Sample;
releaseUsedSamples(id: number, sampleNum: number): void;
start(): void;
stop(): void;
flush(): void;
seekTrack(time: number, useRap: boolean, trak: trakBox): {
offset: number;
time: number;
};
getTrackDuration(trak: trakBox): number;
seek(time: number, useRap: boolean): {
offset: number;
time: number;
};
equal(b: {
boxes: Array<Box>;
}): boolean;
/**
* Rewrite the entire file
* @bundle isofile-write.js
*/
write(outstream: DataStream): void;
/** @bundle isofile-write.js */
createFragment(track_id: number, sampleStart: number, sampleEnd: number, existingStream: DataStream): DataStream;
/**
* Modify the file and create the initialization segment
* @bundle isofile-write.js
*/
static writeInitializationSegment(ftyp: ftypBox, moov: moovBox, total_duration: number): MP4BoxBuffer;
/** @bundle isofile-write.js */
save(name: string): Blob;
/** @bundle isofile-write.js */
getBuffer(): DataStream;
/** @bundle isofile-write.js */
initializeSegmentation(): {
tracks: {
id: number;
user: TSegmentUser;
}[];
buffer: MP4BoxBuffer;
};
/**
* Index of the last moof box received
* @bundle isofile-sample-processing.js
*/
lastMoofIndex: number;
/**
* size of the buffers allocated for samples
* @bundle isofile-sample-processing.js
*/
samplesDataSize: number;
/**
* Resets all sample tables
* @bundle isofile-sample-processing.js
*/
resetTables(): void;
/** @bundle isofile-sample-processing.js */
static initSampleGroups(trak: trakBox, traf: trafBox | undefined, sbgps: Array<sbgpBox>, trak_sgpds: Array<sgpdBox>, traf_sgpds?: Array<sgpdBox>): void;
/** @bundle isofile-sample-processing.js */
static setSampleGroupProperties(trak: trakBox, sample: Sample, sample_number: number, sample_groups_info: Array<SampleGroupInfo>): void;
/** @bundle isofile-sample-processing.js */
static process_sdtp(sdtp: sdtpBox, sample: Sample, number: number): void;
buildSampleLists(): void;
buildTrakSampleLists(trak: trakBox): void;
/**
* Update sample list when new 'moof' boxes are received
* @bundle isofile-sample-processing.js
*/
updateSampleLists(): void;
/**
* Try to get sample data for a given sample:
* returns null if not found
* returns the same sample if already requested
*
* @bundle isofile-sample-processing.js
*/
getSample(trak: trakBox, sampleNum: number): Sample;
/**
* Release the memory used to store the data of the sample
*
* @bundle isofile-sample-processing.js
*/
releaseSample(trak: trakBox, sampleNum: number): number;
/** @bundle isofile-sample-processing.js */
getAllocatedSampleDataSize(): number;
/**
* Builds the MIME Type 'codecs' sub-parameters for the whole file
*
* @bundle isofile-sample-processing.js
*/
getCodecs(): string;
/**
* Helper function
*
* @bundle isofile-sample-processing.js
*/
getTrexById(id: number): trexBox;
/**
* Helper function
*
* @bundle isofile-sample-processing.js
*/
getTrackById(id: number): trakBox;
/** @bundle isofile-item-processing.js */
flattenItemInfo(): void;
/** @bundle isofile-item-processing.js */
getItem(item_id: number): Item;
/**
* Release the memory used to store the data of the item
*
* @bundle isofile-item-processing.js
*/
releaseItem(item_id: number): number;
/** @bundle isofile-item-processing.js */
processItems(callback: (item: Item) => void): void;
/** @bundle isofile-item-processing.js */
hasItem(name: string): number;
/** @bundle isofile-item-processing.js */
getMetaHandler(): string;
/** @bundle isofile-item-processing.js */
getPrimaryItem(): Item;
/** @bundle isofile-item-processing.js */
itemToFragmentedTrackFile({ itemId }?: {
itemId?: number;
}): ISOFile<unknown, unknown>;
/**
* position in the current buffer of the beginning of the last box parsed
*
* @bundle isofile-advanced-parsing.js
*/
lastBoxStartPosition: number;
/**
* indicator if the parsing is stuck in the middle of an mdat box
*
* @bundle isofile-advanced-parsing.js
*/
parsingMdat?: mdatBox;
nextParsePosition: number;
/**
* keep mdat data
*
* @bundle isofile-advanced-parsing.js
*/
discardMdatData: boolean;
/** @bundle isofile-advanced-parsing.js */
processIncompleteBox(ret: IncompleteBox): boolean;
/** @bundle isofile-advanced-parsing.js */
hasIncompleteMdat(): boolean;
/**
* Transfer the data of the mdat box to its stream
* @param mdat the mdat box to use
*/
transferMdatData(inMdat?: mdatBox): void;
/** @bundle isofile-advanced-parsing.js */
processIncompleteMdat(): boolean;
/** @bundle isofile-advanced-parsing.js */
restoreParsePosition(): boolean;
/** @bundle isofile-advanced-parsing.js */
saveParsePosition(): void;
/** @bundle isofile-advanced-parsing.js */
updateUsedBytes(box: Box, _ret: ReturnType<typeof parseOneBox>): void;
/** @bundle isofile-advanced-creation.js */
addBox<T extends Box>(box: T): T;
/** @bundle isofile-advanced-creation.js */
init(options?: IsoFileOptions): this;
/** @bundle isofile-advanced-creation.js */
addTrack(_options?: IsoFileOptions): number;
/** @bundle isofile-advanced-creation.js */
addSample(track_id: number, data: Uint8Array<ArrayBuffer>, { sample_description_index, duration, cts, dts, is_sync, is_leading, depends_on, is_depended_on, has_redundancy, degradation_priority, subsamples, offset, }?: {
sample_description_index?: number;
duration?: number;
cts?: number;
dts?: number;
is_sync?: boolean;
is_leading?: number;
depends_on?: number;
is_depended_on?: number;
has_redundancy?: number;
degradation_priority?: number;
subsamples?: Array<SubSample>;
offset?: number;
}): Sample;
/** @bundle isofile-advanced-creation.js */
createMoof(samples: Array<Sample>): moofBox;
/** @bundle box-print.js */
print(output: Output): void;
}
type ReadTypeReturnValue = string | number | Uint8Array | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array | Array<ReadTypeReturnValue> | {
[key: string]: ReadTypeReturnValue;
};
declare enum Endianness {
BIG_ENDIAN = 1,
LITTLE_ENDIAN = 2
}
declare class DataStream {
#private;
static ENDIANNESS: Endianness;
isofile?: ISOFile;
_buffer?: MP4BoxBuffer;
_byteOffset?: number;
_dataView?: DataView<ArrayBuffer>;
endianness: Endianness;
protected position: number;
/**
* DataStream reads scalars, arrays and structs of data from an ArrayBuffer.
* It's like a file-like DataView on steroids.
*
* @param arrayBuffer ArrayBuffer to read from.
* @param byteOffset Offset from arrayBuffer beginning for the DataStream.
* @param endianness Endianness of the DataStream (default: BIG_ENDIAN).
*/
constructor(arrayBuffer?: ArrayBuffer | DataView<ArrayBuffer> | number, byteOffset?: number, endianness?: Endianness);
getPosition(): number;
/**
* Internal function to resize the DataStream buffer when required.
* @param extra Number of bytes to add to the buffer allocation.
*/
_realloc(extra: number): void;
/**
* Internal function to trim the DataStream buffer when required.
* Used for stripping out the extra bytes from the backing buffer when
* the virtual byteLength is smaller than the buffer byteLength (happens after
* growing the buffer with writes and not filling the extra space completely).
*/
_trimAlloc(): void;
/**
* Virtual byte length of the DataStream backing buffer.
* Updated to be max of original buffer size and last written size.
* If dynamicSize is false is set to buffer size.
*/
_byteLength: number;
/**
* Returns the byte length of the DataStream object.
* @type {number}
*/
get byteLength(): number;
/**
* Set/get the backing ArrayBuffer of the DataStream object.
* The setter updates the DataView to point to the new buffer.
* @type {Object}
*/
get buffer(): MP4BoxBuffer;
set buffer(value: MP4BoxBuffer);
/**
* Set/get the byteOffset of the DataStream object.
* The setter updates the DataView to point to the new byteOffset.
* @type {number}
*/
get byteOffset(): number;
set byteOffset(value: number);
/**
* Set/get the byteOffset of the DataStream object.
* The setter updates the DataView to point to the new byteOffset.
* @type {number}
*/
get dataView(): DataView<ArrayBuffer>;
set dataView(value: DataView<ArrayBuffer>);
/**
* Sets the DataStream read/write position to given position.
* Clamps between 0 and DataStream length.
*
* @param pos Position to seek to.
* @return
*/
seek(pos: number): void;
/**
* Returns true if the DataStream seek pointer is at the end of buffer and
* there's no more data to read.
*
* @return True if the seek pointer is at the end of the buffer.
*/
isEof(): boolean;
/**
* Maps a Uint8Array into the DataStream buffer.
*
* Nice for quickly reading in data.
*
* @param length Number of elements to map.
* @param e Endianness of the data to read.
* @return Uint8Array to the DataStream backing buffer.
*/
mapUint8Array(length: number): Uint8Array<MP4BoxBuffer>;
/**
* Reads an Int32Array of desired length and endianness from the DataStream.
*
* @param length Number of elements to map.
* @param endianness Endianness of the data to read.
* @return The read Int32Array.
*/
readInt32Array(length?: number, endianness?: Endianness): Int32Array<ArrayBuffer>;
/**
* Reads an Int16Array of desired length and endianness from the DataStream.
*
* @param length Number of elements to map.
* @param endianness Endianness of the data to read.
* @return The read Int16Array.
*/
readInt16Array(length?: number, endianness?: Endianness): Int16Array<ArrayBuffer>;
/**
* Reads an Int8Array of desired length from the DataStream.
*
* @param length Number of elements to map.
* @param e Endianness of the data to read.
* @return The read Int8Array.
*/
readInt8Array(length?: number): Int8Array<ArrayBuffer>;
/**
* Reads a Uint32Array of desired length and endianness from the DataStream.
*
* @param length Number of elements to map.
* @param endianness Endianness of the data to read.
* @return The read Uint32Array.
*/
readUint32Array(length?: number, endianness?: Endianness): Uint32Array<ArrayBuffer>;
/**
* Reads a Uint16Array of desired length and endianness from the DataStream.
*
* @param length Number of elements to map.
* @param endianness Endianness of the data to read.
* @return The read Uint16Array.
*/
readUint16Array(length?: number, endianness?: Endianness): Uint16Array<ArrayBuffer>;
/**
* Reads a Uint8Array of desired length from the DataStream.
*
* @param length Number of elements to map.
* @param e Endianness of the data to read.
* @return The read Uint8Array.
*/
readUint8Array(length?: number): Uint8Array<ArrayBuffer>;
/**
* Reads a Float64