@remotion/media-parser 4.0.209 → 4.0.210
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/buffer.js +2 -0
- package/dist/boxes/iso-base-media/get-sample-positions-from-track.js +1 -1
- package/dist/boxes/iso-base-media/make-track.js +14 -2
- package/dist/boxes/iso-base-media/mdat/mdat.d.ts +2 -1
- package/dist/boxes/iso-base-media/mdat/mdat.js +8 -3
- package/dist/boxes/iso-base-media/moov/moov.d.ts +2 -1
- package/dist/boxes/iso-base-media/moov/moov.js +2 -1
- package/dist/boxes/iso-base-media/process-box.d.ts +6 -3
- package/dist/boxes/iso-base-media/process-box.js +20 -5
- package/dist/boxes/iso-base-media/stsd/avcc.d.ts +1 -1
- package/dist/boxes/iso-base-media/stsd/avcc.js +2 -2
- package/dist/boxes/iso-base-media/stsd/ctts.js +2 -5
- package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +1 -1
- package/dist/boxes/iso-base-media/stsd/hvcc.js +2 -2
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +2 -1
- package/dist/boxes/iso-base-media/stsd/mebx.js +2 -1
- package/dist/boxes/iso-base-media/stsd/samples.d.ts +4 -2
- package/dist/boxes/iso-base-media/stsd/samples.js +69 -11
- package/dist/boxes/iso-base-media/stsd/stsd.d.ts +2 -1
- package/dist/boxes/iso-base-media/stsd/stsd.js +2 -1
- package/dist/boxes/iso-base-media/trak/trak.d.ts +2 -1
- package/dist/boxes/iso-base-media/trak/trak.js +2 -1
- package/dist/boxes/iso-base-media/traversal.d.ts +44 -0
- package/dist/boxes/iso-base-media/traversal.js +211 -0
- package/dist/boxes/webm/color.d.ts +4 -0
- package/dist/boxes/webm/color.js +120 -0
- package/dist/boxes/webm/description.js +1 -1
- package/dist/boxes/webm/get-ready-tracks.js +3 -3
- package/dist/boxes/webm/get-sample-from-block.js +1 -1
- package/dist/boxes/webm/get-track.js +16 -1
- package/dist/boxes/webm/make-track.d.ts +9 -0
- package/dist/boxes/webm/make-track.js +260 -0
- package/dist/boxes/webm/parse-ebml.js +2 -2
- package/dist/boxes/webm/segments/all-segments.d.ts +36 -3
- package/dist/boxes/webm/segments/all-segments.js +34 -6
- package/dist/boxes/webm/traversal.d.ts +26 -1
- package/dist/boxes/webm/traversal.js +214 -1
- package/dist/create/cluster-segment.js +0 -2
- package/dist/create/cluster.d.ts +10 -2
- package/dist/create/cluster.js +16 -10
- package/dist/create/create-media.d.ts +4 -2
- package/dist/create/create-media.js +76 -14
- package/dist/create/cues.d.ts +0 -0
- package/dist/create/cues.js +1 -0
- package/dist/create/make-duration-with-padding.d.ts +1 -1
- package/dist/create/make-duration-with-padding.js +3 -3
- package/dist/create/matroska-cues.d.ts +6 -0
- package/dist/create/matroska-cues.js +50 -0
- package/dist/create/matroska-info.js +1 -1
- package/dist/create/matroska-seek.d.ts +6 -0
- package/dist/create/matroska-seek.js +32 -0
- package/dist/create/matroska-segment.d.ts +1 -0
- package/dist/create/matroska-segment.js +3 -2
- package/dist/create/matroska-trackentry.d.ts +9 -14
- package/dist/create/matroska-trackentry.js +79 -94
- package/dist/emit-available-info.d.ts +12 -0
- package/dist/emit-available-info.js +133 -0
- package/dist/esm/buffer.mjs +57 -0
- package/dist/esm/from-fetch.mjs +72 -0
- package/dist/esm/from-node.mjs +48 -0
- package/dist/esm/from-web-file.mjs +48 -0
- package/dist/esm/index.mjs +6689 -0
- package/dist/esm/web-fs.mjs +67 -0
- package/dist/get-audio-codec.d.ts +5 -5
- package/dist/get-audio-codec.js +41 -57
- package/dist/get-container.d.ts +4 -0
- package/dist/get-container.js +26 -0
- package/dist/get-duration.js +1 -1
- package/dist/get-fps.js +1 -1
- package/dist/get-sample-aspect-ratio.d.ts +1 -1
- package/dist/get-sample-aspect-ratio.js +19 -19
- package/dist/get-tracks.d.ts +13 -0
- package/dist/get-tracks.js +8 -8
- package/dist/get-video-codec.d.ts +5 -2
- package/dist/get-video-codec.js +111 -21
- package/dist/has-all-info.d.ts +2 -2
- package/dist/has-all-info.js +23 -9
- package/dist/index.d.ts +3 -1
- package/dist/options.d.ts +97 -30
- package/dist/parse-media.js +43 -62
- package/dist/parse-video.d.ts +2 -1
- package/dist/parse-video.js +3 -1
- package/dist/parser-state.js +1 -2
- package/dist/readers/from-fetch.js +24 -4
- package/dist/readers/from-node.js +13 -3
- package/dist/readers/from-web-file.js +14 -2
- package/dist/readers/reader.d.ts +6 -1
- package/dist/samples-from-moof.js +1 -1
- package/dist/traversal.d.ts +0 -21
- package/dist/traversal.js +1 -158
- package/dist/truthy.d.ts +3 -0
- package/dist/truthy.js +7 -0
- package/dist/writers/buffer.d.ts +2 -0
- package/dist/writers/buffer.js +58 -0
- package/dist/writers/web-fs.d.ts +1 -0
- package/dist/writers/web-fs.js +42 -18
- package/dist/writers/writer.d.ts +4 -2
- package/fetch.js +2 -0
- package/node.js +2 -0
- package/package.json +43 -8
- package/web-file.js +2 -0
- package/web-fs.js +2 -0
- package/.eslintrc +0 -8
- package/input.webm +0 -0
- package/src/add-new-matroska-tracks.ts +0 -23
- package/src/boxes/iso-base-media/base-type.ts +0 -4
- package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +0 -68
- package/src/boxes/iso-base-media/esds/esds-descriptors.ts +0 -135
- package/src/boxes/iso-base-media/esds/esds.ts +0 -49
- package/src/boxes/iso-base-media/ftyp.ts +0 -39
- package/src/boxes/iso-base-media/get-sample-positions-from-track.ts +0 -69
- package/src/boxes/iso-base-media/make-track.ts +0 -116
- package/src/boxes/iso-base-media/mdat/mdat.ts +0 -140
- package/src/boxes/iso-base-media/mdhd.ts +0 -59
- package/src/boxes/iso-base-media/moov/moov.ts +0 -43
- package/src/boxes/iso-base-media/mvhd.ts +0 -114
- package/src/boxes/iso-base-media/process-box.ts +0 -748
- package/src/boxes/iso-base-media/stsd/av1c.ts +0 -19
- package/src/boxes/iso-base-media/stsd/avcc.ts +0 -36
- package/src/boxes/iso-base-media/stsd/colr.ts +0 -49
- package/src/boxes/iso-base-media/stsd/ctts.ts +0 -64
- package/src/boxes/iso-base-media/stsd/hvcc.ts +0 -32
- package/src/boxes/iso-base-media/stsd/keys.ts +0 -27
- package/src/boxes/iso-base-media/stsd/mebx.ts +0 -54
- package/src/boxes/iso-base-media/stsd/pasp.ts +0 -32
- package/src/boxes/iso-base-media/stsd/samples.ts +0 -359
- package/src/boxes/iso-base-media/stsd/stco.ts +0 -52
- package/src/boxes/iso-base-media/stsd/stsc.ts +0 -61
- package/src/boxes/iso-base-media/stsd/stsd.ts +0 -55
- package/src/boxes/iso-base-media/stsd/stss.ts +0 -47
- package/src/boxes/iso-base-media/stsd/stsz.ts +0 -75
- package/src/boxes/iso-base-media/stsd/stts.ts +0 -62
- package/src/boxes/iso-base-media/tfdt.ts +0 -37
- package/src/boxes/iso-base-media/tfhd.ts +0 -66
- package/src/boxes/iso-base-media/tkhd.ts +0 -150
- package/src/boxes/iso-base-media/to-date.ts +0 -9
- package/src/boxes/iso-base-media/trak/trak.ts +0 -43
- package/src/boxes/iso-base-media/trun.ts +0 -74
- package/src/boxes/iso-base-media/void-box.ts +0 -4
- package/src/boxes/webm/allowed-partial-segments.ts +0 -1
- package/src/boxes/webm/av1-codec-private.ts +0 -113
- package/src/boxes/webm/description.ts +0 -104
- package/src/boxes/webm/ebml.ts +0 -98
- package/src/boxes/webm/get-ready-tracks.ts +0 -36
- package/src/boxes/webm/get-sample-from-block.ts +0 -125
- package/src/boxes/webm/get-track.ts +0 -257
- package/src/boxes/webm/make-header.ts +0 -253
- package/src/boxes/webm/parse-ebml.ts +0 -259
- package/src/boxes/webm/parse-webm-header.ts +0 -18
- package/src/boxes/webm/segments/all-segments.ts +0 -888
- package/src/boxes/webm/segments/block-simple-block-flags.ts +0 -52
- package/src/boxes/webm/segments/parse-children.ts +0 -144
- package/src/boxes/webm/segments/track-entry.ts +0 -38
- package/src/boxes/webm/segments.ts +0 -147
- package/src/boxes/webm/traversal.ts +0 -45
- package/src/buffer-iterator.ts +0 -555
- package/src/create/cluster-segment.ts +0 -62
- package/src/create/cluster.ts +0 -64
- package/src/create/create-media.ts +0 -136
- package/src/create/make-duration-with-padding.ts +0 -15
- package/src/create/matroska-header.ts +0 -63
- package/src/create/matroska-info.ts +0 -30
- package/src/create/matroska-segment.ts +0 -10
- package/src/create/matroska-trackentry.ts +0 -325
- package/src/create/timescale.ts +0 -1
- package/src/get-audio-codec.ts +0 -270
- package/src/get-dimensions.ts +0 -47
- package/src/get-duration.ts +0 -103
- package/src/get-fps.ts +0 -113
- package/src/get-sample-aspect-ratio.ts +0 -204
- package/src/get-sample-positions.ts +0 -93
- package/src/get-tracks.ts +0 -147
- package/src/get-video-codec.ts +0 -117
- package/src/has-all-info.ts +0 -81
- package/src/index.ts +0 -18
- package/src/make-hvc1-codec-strings.ts +0 -55
- package/src/options.ts +0 -118
- package/src/parse-media.ts +0 -183
- package/src/parse-result.ts +0 -79
- package/src/parse-video.ts +0 -83
- package/src/parser-context.ts +0 -10
- package/src/parser-state.ts +0 -178
- package/src/readers/from-fetch.ts +0 -90
- package/src/readers/from-node.ts +0 -51
- package/src/readers/from-web-file.ts +0 -49
- package/src/readers/reader.ts +0 -15
- package/src/samples-from-moof.ts +0 -102
- package/src/test/aspect-ratio.test.ts +0 -42
- package/src/test/av1.test.ts +0 -108
- package/src/test/create-matroska.test.ts +0 -287
- package/src/test/duration.test.ts +0 -18
- package/src/test/keys.test.ts +0 -47
- package/src/test/matroska.test.ts +0 -463
- package/src/test/mvhd.test.ts +0 -94
- package/src/test/parse-esds.test.ts +0 -98
- package/src/test/parse-stco.test.ts +0 -61
- package/src/test/parse-stsc.test.ts +0 -104
- package/src/test/parse-stsz.test.ts +0 -57
- package/src/test/parse-stts.test.ts +0 -38
- package/src/test/parse-video.test.ts +0 -101
- package/src/test/parse-webm.test.ts +0 -17
- package/src/test/samples-from-moof.test.ts +0 -2496
- package/src/test/stream-local.test.ts +0 -743
- package/src/test/stream-remote.test.ts +0 -59
- package/src/test/stream-samples.test.ts +0 -181
- package/src/test/stsd.test.ts +0 -265
- package/src/test/tkhd.test.ts +0 -87
- package/src/traversal.ts +0 -528
- package/src/webcodec-sample-types.ts +0 -29
- package/src/writers/web-fs.ts +0 -50
- package/src/writers/writer.ts +0 -12
- package/tsconfig.json +0 -14
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// src/writers/web-fs.ts
|
|
2
|
+
var createContent = async () => {
|
|
3
|
+
const directoryHandle = await navigator.storage.getDirectory();
|
|
4
|
+
const filename = `media-parser-${Math.random().toString().replace("0.", "")}.webm`;
|
|
5
|
+
const fileHandle = await directoryHandle.getFileHandle(filename, {
|
|
6
|
+
create: true
|
|
7
|
+
});
|
|
8
|
+
const writable = await fileHandle.createWritable();
|
|
9
|
+
let written = 0;
|
|
10
|
+
let writPromise = Promise.resolve();
|
|
11
|
+
const write = async (arr) => {
|
|
12
|
+
await writable.write(arr);
|
|
13
|
+
written += arr.byteLength;
|
|
14
|
+
};
|
|
15
|
+
const updateDataAt = async (position, data) => {
|
|
16
|
+
await writable.seek(position);
|
|
17
|
+
await writable.write(data);
|
|
18
|
+
await writable.seek(written);
|
|
19
|
+
};
|
|
20
|
+
const remove = async () => {
|
|
21
|
+
await directoryHandle.removeEntry(filename, {
|
|
22
|
+
recursive: true
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
const writer = {
|
|
26
|
+
write: (arr) => {
|
|
27
|
+
writPromise = writPromise.then(() => write(arr));
|
|
28
|
+
return writPromise;
|
|
29
|
+
},
|
|
30
|
+
save: async () => {
|
|
31
|
+
try {
|
|
32
|
+
await writable.close();
|
|
33
|
+
} catch (err) {
|
|
34
|
+
}
|
|
35
|
+
const newHandle = await directoryHandle.getFileHandle(filename, {
|
|
36
|
+
create: true
|
|
37
|
+
});
|
|
38
|
+
const newFile = await newHandle.getFile();
|
|
39
|
+
return newFile;
|
|
40
|
+
},
|
|
41
|
+
getWrittenByteCount: () => written,
|
|
42
|
+
updateDataAt: (position, data) => {
|
|
43
|
+
writPromise = writPromise.then(() => updateDataAt(position, data));
|
|
44
|
+
return writPromise;
|
|
45
|
+
},
|
|
46
|
+
waitForFinish: async () => {
|
|
47
|
+
await writPromise;
|
|
48
|
+
},
|
|
49
|
+
remove
|
|
50
|
+
};
|
|
51
|
+
return writer;
|
|
52
|
+
};
|
|
53
|
+
var webFsWriter = {
|
|
54
|
+
createContent
|
|
55
|
+
};
|
|
56
|
+
var canUseWebFsWriter = async () => {
|
|
57
|
+
const directoryHandle = await navigator.storage.getDirectory();
|
|
58
|
+
const fileHandle = await directoryHandle.getFileHandle("remotion-probe-web-fs-support", {
|
|
59
|
+
create: true
|
|
60
|
+
});
|
|
61
|
+
const canUse = fileHandle.createWritable !== undefined;
|
|
62
|
+
return canUse;
|
|
63
|
+
};
|
|
64
|
+
export {
|
|
65
|
+
webFsWriter,
|
|
66
|
+
canUseWebFsWriter
|
|
67
|
+
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { MoovBox } from './boxes/iso-base-media/moov/moov';
|
|
2
2
|
import type { TrakBox } from './boxes/iso-base-media/trak/trak';
|
|
3
|
-
import type
|
|
4
|
-
import type { KnownAudioCodecs } from './options';
|
|
3
|
+
import { type MediaParserAudioCodec } from './get-tracks';
|
|
5
4
|
import type { AnySegment } from './parse-result';
|
|
6
|
-
|
|
5
|
+
import type { ParserState } from './parser-state';
|
|
6
|
+
export declare const hasAudioCodec: (boxes: AnySegment[], state: ParserState) => boolean;
|
|
7
7
|
type AudioCodecInfo = {
|
|
8
8
|
format: string;
|
|
9
9
|
primarySpecificator: number | null;
|
|
@@ -14,10 +14,10 @@ export declare const getNumberOfChannelsFromTrak: (trak: TrakBox) => number | nu
|
|
|
14
14
|
export declare const getSampleRate: (trak: TrakBox) => number | null;
|
|
15
15
|
export declare const getAudioCodecFromTrak: (trak: TrakBox) => AudioCodecInfo | null;
|
|
16
16
|
export declare const getAudioCodecFromIso: (moov: MoovBox) => AudioCodecInfo | null;
|
|
17
|
-
export declare const getAudioCodecFromMatroska: (mainSegment: MainSegment) => "vorbis" | "opus" | "mp3" | "aac" | "pcm" | null;
|
|
18
17
|
export declare const getAudioCodecStringFromTrak: (trak: TrakBox) => {
|
|
19
18
|
codecString: string;
|
|
20
19
|
description: Uint8Array | undefined;
|
|
21
20
|
};
|
|
22
|
-
export declare const
|
|
21
|
+
export declare const getAudioCodecFromTrack: (track: TrakBox) => "aac" | "mp3" | "aiff";
|
|
22
|
+
export declare const getAudioCodec: (boxes: AnySegment[], parserState: ParserState) => MediaParserAudioCodec | null;
|
|
23
23
|
export {};
|
package/dist/get-audio-codec.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getAudioCodec = exports.
|
|
3
|
+
exports.getAudioCodec = exports.getAudioCodecFromTrack = exports.getAudioCodecStringFromTrak = exports.getAudioCodecFromIso = exports.getAudioCodecFromTrak = exports.getSampleRate = exports.getNumberOfChannelsFromTrak = exports.hasAudioCodec = void 0;
|
|
4
|
+
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
4
5
|
const get_fps_1 = require("./get-fps");
|
|
5
|
-
const
|
|
6
|
-
const hasAudioCodec = (boxes) => {
|
|
6
|
+
const get_tracks_1 = require("./get-tracks");
|
|
7
|
+
const hasAudioCodec = (boxes, state) => {
|
|
7
8
|
try {
|
|
8
|
-
return (0, exports.getAudioCodec)(boxes) !== null;
|
|
9
|
+
return (0, exports.getAudioCodec)(boxes, state) !== null;
|
|
9
10
|
}
|
|
10
11
|
catch (e) {
|
|
11
12
|
return false;
|
|
@@ -114,36 +115,6 @@ const getAudioCodecFromIso = (moov) => {
|
|
|
114
115
|
return (0, exports.getAudioCodecFromTrak)(trakBox);
|
|
115
116
|
};
|
|
116
117
|
exports.getAudioCodecFromIso = getAudioCodecFromIso;
|
|
117
|
-
const getAudioCodecFromMatroska = (mainSegment) => {
|
|
118
|
-
const tracksSegment = mainSegment.value.find((b) => b.type === 'Tracks');
|
|
119
|
-
if (!tracksSegment || tracksSegment.type !== 'Tracks') {
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
for (const track of tracksSegment.value) {
|
|
123
|
-
if (track.type === 'TrackEntry') {
|
|
124
|
-
const trackType = track.value.find((b) => b.type === 'CodecID');
|
|
125
|
-
if (trackType && trackType.type === 'CodecID') {
|
|
126
|
-
if (trackType.value === 'A_OPUS') {
|
|
127
|
-
return 'opus';
|
|
128
|
-
}
|
|
129
|
-
if (trackType.value === 'A_VORBIS') {
|
|
130
|
-
return 'vorbis';
|
|
131
|
-
}
|
|
132
|
-
if (trackType.value === 'A_PCM/INT/LIT') {
|
|
133
|
-
return 'pcm';
|
|
134
|
-
}
|
|
135
|
-
if (trackType.value === 'A_AAC') {
|
|
136
|
-
return 'aac';
|
|
137
|
-
}
|
|
138
|
-
if (trackType.value === 'A_MPEG/L3') {
|
|
139
|
-
return 'mp3';
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return null;
|
|
145
|
-
};
|
|
146
|
-
exports.getAudioCodecFromMatroska = getAudioCodecFromMatroska;
|
|
147
118
|
const getAudioCodecStringFromTrak = (trak) => {
|
|
148
119
|
const codec = (0, exports.getAudioCodecFromTrak)(trak);
|
|
149
120
|
if (!codec) {
|
|
@@ -166,34 +137,47 @@ const getAudioCodecStringFromTrak = (trak) => {
|
|
|
166
137
|
};
|
|
167
138
|
};
|
|
168
139
|
exports.getAudioCodecStringFromTrak = getAudioCodecStringFromTrak;
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
140
|
+
const getAudioCodecFromAudioCodecInfo = (codec) => {
|
|
141
|
+
if (codec.format === 'sowt') {
|
|
142
|
+
return 'aiff';
|
|
143
|
+
}
|
|
144
|
+
if (codec.format === 'mp4a') {
|
|
145
|
+
if (codec.primarySpecificator === 0x40) {
|
|
146
|
+
return 'aac';
|
|
175
147
|
}
|
|
176
|
-
if (codec.
|
|
177
|
-
return '
|
|
148
|
+
if (codec.primarySpecificator === 0x6b) {
|
|
149
|
+
return 'mp3';
|
|
178
150
|
}
|
|
179
|
-
if (codec.
|
|
180
|
-
|
|
181
|
-
return 'aac';
|
|
182
|
-
}
|
|
183
|
-
if (codec.primarySpecificator === 0x6b) {
|
|
184
|
-
return 'mp3';
|
|
185
|
-
}
|
|
186
|
-
if (codec.primarySpecificator === null) {
|
|
187
|
-
return 'aac';
|
|
188
|
-
}
|
|
189
|
-
throw new Error('Unknown mp4a codec: ' + codec.primarySpecificator);
|
|
151
|
+
if (codec.primarySpecificator === null) {
|
|
152
|
+
return 'aac';
|
|
190
153
|
}
|
|
191
|
-
throw new Error('Unknown
|
|
154
|
+
throw new Error('Unknown mp4a codec: ' + codec.primarySpecificator);
|
|
155
|
+
}
|
|
156
|
+
throw new Error('Unknown audio format: ' + codec.format);
|
|
157
|
+
};
|
|
158
|
+
const getAudioCodecFromTrack = (track) => {
|
|
159
|
+
const audioSample = (0, exports.getAudioCodecFromTrak)(track);
|
|
160
|
+
if (!audioSample) {
|
|
161
|
+
throw new Error('Could not find audio sample');
|
|
192
162
|
}
|
|
193
|
-
|
|
194
|
-
|
|
163
|
+
return getAudioCodecFromAudioCodecInfo(audioSample);
|
|
164
|
+
};
|
|
165
|
+
exports.getAudioCodecFromTrack = getAudioCodecFromTrack;
|
|
166
|
+
const getAudioCodec = (boxes, parserState) => {
|
|
167
|
+
const tracks = (0, get_tracks_1.getTracks)(boxes, parserState);
|
|
168
|
+
const allTracks = tracks.audioTracks.length +
|
|
169
|
+
tracks.otherTracks.length +
|
|
170
|
+
tracks.videoTracks.length;
|
|
171
|
+
if (allTracks === 0) {
|
|
172
|
+
throw new Error('No tracks yet');
|
|
173
|
+
}
|
|
174
|
+
const audioTrack = tracks.audioTracks[0];
|
|
175
|
+
if (!audioTrack) {
|
|
195
176
|
return null;
|
|
196
177
|
}
|
|
197
|
-
|
|
178
|
+
if (audioTrack.type === 'audio') {
|
|
179
|
+
return audioTrack.codecWithoutConfig;
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
198
182
|
};
|
|
199
183
|
exports.getAudioCodec = getAudioCodec;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasContainer = exports.getContainer = void 0;
|
|
4
|
+
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
5
|
+
const traversal_2 = require("./boxes/webm/traversal");
|
|
6
|
+
const getContainer = (segments) => {
|
|
7
|
+
const moovBox = (0, traversal_1.getMoovBox)(segments);
|
|
8
|
+
if (moovBox) {
|
|
9
|
+
return 'mp4';
|
|
10
|
+
}
|
|
11
|
+
const mainSegment = (0, traversal_2.getMainSegment)(segments);
|
|
12
|
+
if (mainSegment) {
|
|
13
|
+
return 'webm';
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
};
|
|
17
|
+
exports.getContainer = getContainer;
|
|
18
|
+
const hasContainer = (boxes) => {
|
|
19
|
+
try {
|
|
20
|
+
return (0, exports.getContainer)(boxes) !== null;
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.hasContainer = hasContainer;
|
package/dist/get-duration.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hasDuration = exports.getDuration = void 0;
|
|
4
4
|
const get_sample_positions_from_track_1 = require("./boxes/iso-base-media/get-sample-positions-from-track");
|
|
5
|
+
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
5
6
|
const get_tracks_1 = require("./get-tracks");
|
|
6
|
-
const traversal_1 = require("./traversal");
|
|
7
7
|
const getDurationFromMatroska = (segments) => {
|
|
8
8
|
const mainSegment = segments.find((s) => s.type === 'Segment');
|
|
9
9
|
if (!mainSegment || mainSegment.type !== 'Segment') {
|
package/dist/get-fps.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hasFps = exports.getFps = exports.getTimescaleAndDuration = exports.trakBoxContainsVideo = exports.trakBoxContainsAudio = void 0;
|
|
4
|
-
const traversal_1 = require("./traversal");
|
|
4
|
+
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
5
5
|
const calculateFps = ({ sttsBox, timeScale, durationInSamples, }) => {
|
|
6
6
|
let totalSamples = 0;
|
|
7
7
|
for (const sample of sttsBox.sampleDistribution) {
|
|
@@ -11,7 +11,7 @@ type AspectRatio = {
|
|
|
11
11
|
numerator: number;
|
|
12
12
|
denominator: number;
|
|
13
13
|
};
|
|
14
|
-
export declare const
|
|
14
|
+
export declare const getStsdVideoConfig: (trakBox: TrakBox) => VideoSample | null;
|
|
15
15
|
export declare const getAvccBox: (trakBox: TrakBox) => AvccBox | null;
|
|
16
16
|
export declare const getAv1CBox: (trakBox: TrakBox) => Av1CBox | null;
|
|
17
17
|
export declare const getPaspBox: (trakBox: TrakBox) => PaspBox | null;
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getDisplayAspectRatio = exports.applyAspectRatios = exports.applyTkhdBox = exports.getColrBox = exports.getSampleAspectRatio = exports.getHvccBox = exports.getPaspBox = exports.getAv1CBox = exports.getAvccBox = exports.
|
|
4
|
-
const traversal_1 = require("./traversal");
|
|
5
|
-
const
|
|
3
|
+
exports.getDisplayAspectRatio = exports.applyAspectRatios = exports.applyTkhdBox = exports.getColrBox = exports.getSampleAspectRatio = exports.getHvccBox = exports.getPaspBox = exports.getAv1CBox = exports.getAvccBox = exports.getStsdVideoConfig = void 0;
|
|
4
|
+
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
5
|
+
const getStsdVideoConfig = (trakBox) => {
|
|
6
6
|
const stsdBox = (0, traversal_1.getStsdBox)(trakBox);
|
|
7
7
|
if (!stsdBox) {
|
|
8
8
|
return null;
|
|
9
9
|
}
|
|
10
|
-
const
|
|
11
|
-
if (!
|
|
10
|
+
const videoConfig = stsdBox.samples.find((s) => s.type === 'video');
|
|
11
|
+
if (!videoConfig || videoConfig.type !== 'video') {
|
|
12
12
|
return null;
|
|
13
13
|
}
|
|
14
|
-
return
|
|
14
|
+
return videoConfig;
|
|
15
15
|
};
|
|
16
|
-
exports.
|
|
16
|
+
exports.getStsdVideoConfig = getStsdVideoConfig;
|
|
17
17
|
const getAvccBox = (trakBox) => {
|
|
18
|
-
const
|
|
19
|
-
if (!
|
|
18
|
+
const videoConfig = (0, exports.getStsdVideoConfig)(trakBox);
|
|
19
|
+
if (!videoConfig) {
|
|
20
20
|
return null;
|
|
21
21
|
}
|
|
22
|
-
const avccBox =
|
|
22
|
+
const avccBox = videoConfig.descriptors.find((c) => c.type === 'avcc-box');
|
|
23
23
|
if (!avccBox || avccBox.type !== 'avcc-box') {
|
|
24
24
|
return null;
|
|
25
25
|
}
|
|
@@ -27,11 +27,11 @@ const getAvccBox = (trakBox) => {
|
|
|
27
27
|
};
|
|
28
28
|
exports.getAvccBox = getAvccBox;
|
|
29
29
|
const getAv1CBox = (trakBox) => {
|
|
30
|
-
const
|
|
31
|
-
if (!
|
|
30
|
+
const videoConfig = (0, exports.getStsdVideoConfig)(trakBox);
|
|
31
|
+
if (!videoConfig) {
|
|
32
32
|
return null;
|
|
33
33
|
}
|
|
34
|
-
const av1cBox =
|
|
34
|
+
const av1cBox = videoConfig.descriptors.find((c) => c.type === 'av1C-box');
|
|
35
35
|
if (!av1cBox || av1cBox.type !== 'av1C-box') {
|
|
36
36
|
return null;
|
|
37
37
|
}
|
|
@@ -39,11 +39,11 @@ const getAv1CBox = (trakBox) => {
|
|
|
39
39
|
};
|
|
40
40
|
exports.getAv1CBox = getAv1CBox;
|
|
41
41
|
const getPaspBox = (trakBox) => {
|
|
42
|
-
const
|
|
43
|
-
if (!
|
|
42
|
+
const videoConfig = (0, exports.getStsdVideoConfig)(trakBox);
|
|
43
|
+
if (!videoConfig) {
|
|
44
44
|
return null;
|
|
45
45
|
}
|
|
46
|
-
const paspBox =
|
|
46
|
+
const paspBox = videoConfig.descriptors.find((c) => c.type === 'pasp-box');
|
|
47
47
|
if (!paspBox || paspBox.type !== 'pasp-box') {
|
|
48
48
|
return null;
|
|
49
49
|
}
|
|
@@ -51,11 +51,11 @@ const getPaspBox = (trakBox) => {
|
|
|
51
51
|
};
|
|
52
52
|
exports.getPaspBox = getPaspBox;
|
|
53
53
|
const getHvccBox = (trakBox) => {
|
|
54
|
-
const
|
|
55
|
-
if (!
|
|
54
|
+
const videoConfig = (0, exports.getStsdVideoConfig)(trakBox);
|
|
55
|
+
if (!videoConfig) {
|
|
56
56
|
return null;
|
|
57
57
|
}
|
|
58
|
-
const hvccBox =
|
|
58
|
+
const hvccBox = videoConfig.descriptors.find((c) => c.type === 'hvcc-box');
|
|
59
59
|
if (!hvccBox || hvccBox.type !== 'hvcc-box') {
|
|
60
60
|
return null;
|
|
61
61
|
}
|
package/dist/get-tracks.d.ts
CHANGED
|
@@ -6,12 +6,21 @@ type SampleAspectRatio = {
|
|
|
6
6
|
numerator: number;
|
|
7
7
|
denominator: number;
|
|
8
8
|
};
|
|
9
|
+
export type VideoTrackColorParams = {
|
|
10
|
+
transferCharacteristics: 'bt709' | 'smpte170m' | 'iec61966-2-1' | null;
|
|
11
|
+
matrixCoefficients: 'bt709' | 'bt470bg' | 'rgb' | 'smpte170m' | null;
|
|
12
|
+
primaries: 'bt709' | 'smpte170m' | 'bt470bg' | null;
|
|
13
|
+
fullRange: boolean | null;
|
|
14
|
+
};
|
|
15
|
+
export type MediaParserVideoCodec = 'vp8' | 'vp9' | 'h264' | 'av1' | 'h265' | 'prores';
|
|
16
|
+
export type MediaParserAudioCodec = 'opus' | 'aac' | 'mp3' | 'vorbis' | 'pcm-u8' | 'pcm-s16' | 'pcm-s24' | 'pcm-s32' | 'pcm-f32' | 'aiff';
|
|
9
17
|
export type VideoTrack = {
|
|
10
18
|
type: 'video';
|
|
11
19
|
trackId: number;
|
|
12
20
|
description: Uint8Array | undefined;
|
|
13
21
|
timescale: number;
|
|
14
22
|
codec: string;
|
|
23
|
+
codecWithoutConfig: MediaParserVideoCodec;
|
|
15
24
|
sampleAspectRatio: SampleAspectRatio;
|
|
16
25
|
width: number;
|
|
17
26
|
height: number;
|
|
@@ -21,16 +30,20 @@ export type VideoTrack = {
|
|
|
21
30
|
codedHeight: number;
|
|
22
31
|
rotation: number;
|
|
23
32
|
trakBox: TrakBox | null;
|
|
33
|
+
codecPrivate: Uint8Array | null;
|
|
34
|
+
color: VideoTrackColorParams;
|
|
24
35
|
};
|
|
25
36
|
export type AudioTrack = {
|
|
26
37
|
type: 'audio';
|
|
27
38
|
trackId: number;
|
|
28
39
|
timescale: number;
|
|
29
40
|
codec: string;
|
|
41
|
+
codecWithoutConfig: MediaParserAudioCodec;
|
|
30
42
|
numberOfChannels: number;
|
|
31
43
|
sampleRate: number;
|
|
32
44
|
description: Uint8Array | undefined;
|
|
33
45
|
trakBox: TrakBox | null;
|
|
46
|
+
codecPrivate: Uint8Array | null;
|
|
34
47
|
};
|
|
35
48
|
export type OtherTrack = {
|
|
36
49
|
type: 'other';
|
package/dist/get-tracks.js
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getTracks = exports.hasTracks = exports.getNumberOfTracks = void 0;
|
|
4
4
|
const make_track_1 = require("./boxes/iso-base-media/make-track");
|
|
5
|
+
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
5
6
|
const get_ready_tracks_1 = require("./boxes/webm/get-ready-tracks");
|
|
6
|
-
const
|
|
7
|
-
const traversal_2 = require("./traversal");
|
|
7
|
+
const traversal_2 = require("./boxes/webm/traversal");
|
|
8
8
|
const getNumberOfTracks = (moovBox) => {
|
|
9
|
-
const mvHdBox = (0,
|
|
9
|
+
const mvHdBox = (0, traversal_1.getMvhdBox)(moovBox);
|
|
10
10
|
if (!mvHdBox) {
|
|
11
11
|
return 0;
|
|
12
12
|
}
|
|
@@ -14,16 +14,16 @@ const getNumberOfTracks = (moovBox) => {
|
|
|
14
14
|
};
|
|
15
15
|
exports.getNumberOfTracks = getNumberOfTracks;
|
|
16
16
|
const hasTracks = (segments) => {
|
|
17
|
-
const mainSegment = (0,
|
|
17
|
+
const mainSegment = (0, traversal_2.getMainSegment)(segments);
|
|
18
18
|
if (mainSegment) {
|
|
19
19
|
return (0, traversal_2.getTracksSegment)(mainSegment) !== null;
|
|
20
20
|
}
|
|
21
|
-
const moovBox = (0,
|
|
21
|
+
const moovBox = (0, traversal_1.getMoovBox)(segments);
|
|
22
22
|
if (!moovBox) {
|
|
23
23
|
return false;
|
|
24
24
|
}
|
|
25
25
|
const numberOfTracks = (0, exports.getNumberOfTracks)(moovBox);
|
|
26
|
-
const tracks = (0,
|
|
26
|
+
const tracks = (0, traversal_1.getTraks)(moovBox);
|
|
27
27
|
return tracks.length === numberOfTracks;
|
|
28
28
|
};
|
|
29
29
|
exports.hasTracks = hasTracks;
|
|
@@ -51,7 +51,7 @@ const getTracks = (segments, state) => {
|
|
|
51
51
|
otherTracks,
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
|
-
const moovBox = (0,
|
|
54
|
+
const moovBox = (0, traversal_1.getMoovBox)(segments);
|
|
55
55
|
if (!moovBox) {
|
|
56
56
|
return {
|
|
57
57
|
videoTracks,
|
|
@@ -59,7 +59,7 @@ const getTracks = (segments, state) => {
|
|
|
59
59
|
otherTracks,
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
|
-
const tracks = (0,
|
|
62
|
+
const tracks = (0, traversal_1.getTraks)(moovBox);
|
|
63
63
|
for (const trakBox of tracks) {
|
|
64
64
|
const track = (0, make_track_1.makeBaseMediaTrack)(trakBox);
|
|
65
65
|
if (!track) {
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { TrakBox } from './boxes/iso-base-media/trak/trak';
|
|
2
|
-
import type {
|
|
2
|
+
import type { MediaParserVideoCodec, VideoTrackColorParams } from './get-tracks';
|
|
3
3
|
import type { AnySegment } from './parse-result';
|
|
4
4
|
export declare const hasVideoCodec: (boxes: AnySegment[]) => boolean;
|
|
5
|
+
export declare const getVideoPrivateData: (trakBox: TrakBox) => Uint8Array | null;
|
|
6
|
+
export declare const getIsoBmColrConfig: (trakBox: TrakBox) => VideoTrackColorParams | null;
|
|
5
7
|
export declare const getVideoCodecString: (trakBox: TrakBox) => string | null;
|
|
6
|
-
export declare const
|
|
8
|
+
export declare const getVideoCodecFromIsoTrak: (trakBox: TrakBox) => "h264" | "av1" | "h265" | "prores";
|
|
9
|
+
export declare const getVideoCodec: (boxes: AnySegment[]) => MediaParserVideoCodec | null;
|
package/dist/get-video-codec.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getVideoCodec = exports.getVideoCodecString = exports.hasVideoCodec = void 0;
|
|
3
|
+
exports.getVideoCodec = exports.getVideoCodecFromIsoTrak = exports.getVideoCodecString = exports.getIsoBmColrConfig = exports.getVideoPrivateData = exports.hasVideoCodec = void 0;
|
|
4
|
+
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
4
5
|
const av1_codec_private_1 = require("./boxes/webm/av1-codec-private");
|
|
5
6
|
const get_fps_1 = require("./get-fps");
|
|
6
7
|
const get_sample_aspect_ratio_1 = require("./get-sample-aspect-ratio");
|
|
7
|
-
const traversal_1 = require("./traversal");
|
|
8
8
|
const hasVideoCodec = (boxes) => {
|
|
9
9
|
try {
|
|
10
10
|
return (0, exports.getVideoCodec)(boxes) !== null;
|
|
@@ -14,8 +14,64 @@ const hasVideoCodec = (boxes) => {
|
|
|
14
14
|
}
|
|
15
15
|
};
|
|
16
16
|
exports.hasVideoCodec = hasVideoCodec;
|
|
17
|
+
const getVideoPrivateData = (trakBox) => {
|
|
18
|
+
const videoSample = (0, get_sample_aspect_ratio_1.getStsdVideoConfig)(trakBox);
|
|
19
|
+
const avccBox = (0, get_sample_aspect_ratio_1.getAvccBox)(trakBox);
|
|
20
|
+
const hvccBox = (0, get_sample_aspect_ratio_1.getHvccBox)(trakBox);
|
|
21
|
+
const av1cBox = (0, get_sample_aspect_ratio_1.getAv1CBox)(trakBox);
|
|
22
|
+
if (!videoSample) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
if (avccBox) {
|
|
26
|
+
return avccBox.privateData;
|
|
27
|
+
}
|
|
28
|
+
if (hvccBox) {
|
|
29
|
+
return hvccBox.privateData;
|
|
30
|
+
}
|
|
31
|
+
if (av1cBox) {
|
|
32
|
+
return av1cBox.privateData;
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
};
|
|
36
|
+
exports.getVideoPrivateData = getVideoPrivateData;
|
|
37
|
+
const getIsoBmColrConfig = (trakBox) => {
|
|
38
|
+
const videoSample = (0, get_sample_aspect_ratio_1.getStsdVideoConfig)(trakBox);
|
|
39
|
+
if (!videoSample) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const colrAtom = (0, get_sample_aspect_ratio_1.getColrBox)(videoSample);
|
|
43
|
+
if (!colrAtom) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
// https://github.com/bbc/qtff-parameter-editor
|
|
47
|
+
return {
|
|
48
|
+
fullRange: colrAtom.fullRangeFlag,
|
|
49
|
+
matrixCoefficients: colrAtom.matrixIndex === 1
|
|
50
|
+
? 'bt709'
|
|
51
|
+
: colrAtom.matrixIndex === 5
|
|
52
|
+
? 'bt470bg'
|
|
53
|
+
: colrAtom.matrixIndex === 6
|
|
54
|
+
? 'smpte170m'
|
|
55
|
+
: null,
|
|
56
|
+
primaries: colrAtom.primaries === 1
|
|
57
|
+
? 'bt709'
|
|
58
|
+
: colrAtom.primaries === 5
|
|
59
|
+
? 'bt470bg'
|
|
60
|
+
: colrAtom.primaries === 6
|
|
61
|
+
? 'smpte170m'
|
|
62
|
+
: null,
|
|
63
|
+
transferCharacteristics: colrAtom.transfer === 1
|
|
64
|
+
? 'bt709'
|
|
65
|
+
: colrAtom.transfer === 6
|
|
66
|
+
? 'smpte170m'
|
|
67
|
+
: colrAtom.transfer === 13
|
|
68
|
+
? 'iec61966-2-1'
|
|
69
|
+
: null,
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
exports.getIsoBmColrConfig = getIsoBmColrConfig;
|
|
17
73
|
const getVideoCodecString = (trakBox) => {
|
|
18
|
-
const videoSample = (0, get_sample_aspect_ratio_1.
|
|
74
|
+
const videoSample = (0, get_sample_aspect_ratio_1.getStsdVideoConfig)(trakBox);
|
|
19
75
|
const avccBox = (0, get_sample_aspect_ratio_1.getAvccBox)(trakBox);
|
|
20
76
|
const hvccBox = (0, get_sample_aspect_ratio_1.getHvccBox)(trakBox);
|
|
21
77
|
const av1cBox = (0, get_sample_aspect_ratio_1.getAv1CBox)(trakBox);
|
|
@@ -35,29 +91,63 @@ const getVideoCodecString = (trakBox) => {
|
|
|
35
91
|
return videoSample.format;
|
|
36
92
|
};
|
|
37
93
|
exports.getVideoCodecString = getVideoCodecString;
|
|
94
|
+
const getVideoCodecFromIsoTrak = (trakBox) => {
|
|
95
|
+
const stsdBox = (0, traversal_1.getStsdBox)(trakBox);
|
|
96
|
+
if (stsdBox && stsdBox.type === 'stsd-box') {
|
|
97
|
+
const videoSample = stsdBox.samples.find((s) => s.type === 'video');
|
|
98
|
+
if (videoSample && videoSample.type === 'video') {
|
|
99
|
+
if (videoSample.format === 'hvc1') {
|
|
100
|
+
return 'h265';
|
|
101
|
+
}
|
|
102
|
+
if (videoSample.format === 'avc1') {
|
|
103
|
+
return 'h264';
|
|
104
|
+
}
|
|
105
|
+
if (videoSample.format === 'av01') {
|
|
106
|
+
return 'av1';
|
|
107
|
+
}
|
|
108
|
+
// ap4h: ProRes 4444
|
|
109
|
+
if (videoSample.format === 'ap4h') {
|
|
110
|
+
return 'prores';
|
|
111
|
+
}
|
|
112
|
+
// ap4x: ap4x: ProRes 4444 XQ
|
|
113
|
+
if (videoSample.format === 'ap4x') {
|
|
114
|
+
return 'prores';
|
|
115
|
+
}
|
|
116
|
+
// apch: ProRes 422 High Quality
|
|
117
|
+
if (videoSample.format === 'apch') {
|
|
118
|
+
return 'prores';
|
|
119
|
+
}
|
|
120
|
+
// apcn: ProRes 422 Standard Definition
|
|
121
|
+
if (videoSample.format === 'apcn') {
|
|
122
|
+
return 'prores';
|
|
123
|
+
}
|
|
124
|
+
// apcs: ProRes 422 LT
|
|
125
|
+
if (videoSample.format === 'apcs') {
|
|
126
|
+
return 'prores';
|
|
127
|
+
}
|
|
128
|
+
// apco: ProRes 422 Proxy
|
|
129
|
+
if (videoSample.format === 'apco') {
|
|
130
|
+
return 'prores';
|
|
131
|
+
}
|
|
132
|
+
// aprh: ProRes RAW High Quality
|
|
133
|
+
if (videoSample.format === 'aprh') {
|
|
134
|
+
return 'prores';
|
|
135
|
+
}
|
|
136
|
+
// aprn: ProRes RAW Standard Definition
|
|
137
|
+
if (videoSample.format === 'aprn') {
|
|
138
|
+
return 'prores';
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
throw new Error('Could not find video codec');
|
|
143
|
+
};
|
|
144
|
+
exports.getVideoCodecFromIsoTrak = getVideoCodecFromIsoTrak;
|
|
38
145
|
const getVideoCodec = (boxes) => {
|
|
39
146
|
const moovBox = (0, traversal_1.getMoovBox)(boxes);
|
|
40
147
|
if (moovBox) {
|
|
41
148
|
const trakBox = (0, traversal_1.getTraks)(moovBox).filter((t) => (0, get_fps_1.trakBoxContainsVideo)(t))[0];
|
|
42
149
|
if (trakBox) {
|
|
43
|
-
|
|
44
|
-
if (stsdBox && stsdBox.type === 'stsd-box') {
|
|
45
|
-
const videoSample = stsdBox.samples.find((s) => s.type === 'video');
|
|
46
|
-
if (videoSample && videoSample.type === 'video') {
|
|
47
|
-
if (videoSample.format === 'hvc1') {
|
|
48
|
-
return 'h265';
|
|
49
|
-
}
|
|
50
|
-
if (videoSample.format === 'avc1') {
|
|
51
|
-
return 'h264';
|
|
52
|
-
}
|
|
53
|
-
if (videoSample.format === 'av01') {
|
|
54
|
-
return 'av1';
|
|
55
|
-
}
|
|
56
|
-
if (videoSample.format === 'ap4h') {
|
|
57
|
-
return 'prores';
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
150
|
+
return (0, exports.getVideoCodecFromIsoTrak)(trakBox);
|
|
61
151
|
}
|
|
62
152
|
}
|
|
63
153
|
const mainSegment = boxes.find((b) => b.type === 'Segment');
|
package/dist/has-all-info.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Options } from './options';
|
|
1
|
+
import type { Options, ParseMediaFields } from './options';
|
|
2
2
|
import type { ParseResult } from './parse-result';
|
|
3
3
|
import type { ParserState } from './parser-state';
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const getAvailableInfo: (options: Options<ParseMediaFields>, parseResult: ParseResult, state: ParserState) => Record<keyof Options<ParseMediaFields>, boolean>;
|