@remotion/media-parser 4.0.194 → 4.0.196
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/dist/add-new-matroska-tracks.d.ts +8 -0
- package/dist/add-new-matroska-tracks.js +14 -0
- package/dist/av1-codec-string.d.ts +3 -0
- package/dist/av1-codec-string.js +91 -0
- package/dist/boxes/iso-base-media/esds/decoder-specific-config.d.ts +14 -0
- package/dist/boxes/iso-base-media/esds/decoder-specific-config.js +38 -0
- package/dist/boxes/iso-base-media/esds/esds-descriptors.d.ts +8 -0
- package/dist/boxes/iso-base-media/esds/esds-descriptors.js +22 -2
- package/dist/boxes/iso-base-media/ftype.d.ts +9 -0
- package/dist/boxes/iso-base-media/ftype.js +31 -0
- package/dist/boxes/iso-base-media/make-track.d.ts +3 -0
- package/dist/boxes/iso-base-media/make-track.js +112 -0
- package/dist/boxes/iso-base-media/mdat/mdat.d.ts +6 -2
- package/dist/boxes/iso-base-media/mdat/mdat.js +90 -6
- package/dist/boxes/iso-base-media/moov/moov.d.ts +4 -2
- package/dist/boxes/iso-base-media/moov/moov.js +4 -2
- package/dist/boxes/iso-base-media/mvhd.js +7 -1
- package/dist/boxes/iso-base-media/process-box.d.ts +20 -3
- package/dist/boxes/iso-base-media/process-box.js +322 -34
- package/dist/boxes/iso-base-media/stsd/av1c.d.ts +9 -0
- package/dist/boxes/iso-base-media/stsd/av1c.js +10 -0
- package/dist/boxes/iso-base-media/stsd/avcc-hvcc.d.ts +20 -0
- package/dist/boxes/iso-base-media/stsd/avcc-hvcc.js +73 -0
- package/dist/boxes/iso-base-media/stsd/avcc.d.ts +10 -0
- package/dist/boxes/iso-base-media/stsd/avcc.js +21 -0
- package/dist/boxes/iso-base-media/stsd/colr.d.ts +11 -0
- package/dist/boxes/iso-base-media/stsd/colr.js +35 -0
- package/dist/boxes/iso-base-media/stsd/ctts.d.ts +19 -0
- package/dist/boxes/iso-base-media/stsd/ctts.js +30 -0
- package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +11 -0
- package/dist/boxes/iso-base-media/stsd/hvcc.js +17 -0
- package/dist/boxes/iso-base-media/stsd/keys.js +1 -0
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +4 -2
- package/dist/boxes/iso-base-media/stsd/mebx.js +4 -2
- package/dist/boxes/iso-base-media/stsd/pasp.d.ts +12 -0
- package/dist/boxes/iso-base-media/stsd/pasp.js +17 -0
- package/dist/boxes/iso-base-media/stsd/samples.d.ts +12 -5
- package/dist/boxes/iso-base-media/stsd/samples.js +27 -10
- package/dist/boxes/iso-base-media/stsd/stsd.d.ts +4 -2
- package/dist/boxes/iso-base-media/stsd/stsd.js +6 -2
- package/dist/boxes/iso-base-media/stsd/stss.d.ts +13 -0
- package/dist/boxes/iso-base-media/stsd/stss.js +28 -0
- package/dist/boxes/iso-base-media/stsd/stsz.d.ts +9 -3
- package/dist/boxes/iso-base-media/stsd/stsz.js +14 -2
- package/dist/boxes/iso-base-media/stsd/stts.d.ts +15 -0
- package/dist/boxes/iso-base-media/stsd/stts.js +35 -0
- package/dist/boxes/iso-base-media/tkhd.d.ts +3 -0
- package/dist/boxes/iso-base-media/tkhd.js +41 -14
- package/dist/boxes/iso-base-media/trak/trak.d.ts +4 -2
- package/dist/boxes/iso-base-media/trak/trak.js +4 -2
- package/dist/boxes/iso-base-media/void-box.d.ts +4 -0
- package/dist/boxes/iso-base-media/void-box.js +2 -0
- package/dist/boxes/webm/allowed-partial-segments.d.ts +1 -0
- package/dist/boxes/webm/allowed-partial-segments.js +4 -0
- package/dist/boxes/webm/av1-codec-private.d.ts +2 -0
- package/dist/boxes/webm/av1-codec-private.js +95 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.d.ts +14 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.js +67 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame.d.ts +11 -0
- package/dist/boxes/webm/bitstream/av1/bitstream-frame.js +14 -0
- package/dist/boxes/webm/bitstream/av1/chroma-sample-position.d.ts +6 -0
- package/dist/boxes/webm/bitstream/av1/chroma-sample-position.js +9 -0
- package/dist/boxes/webm/bitstream/av1/color-config.d.ts +16 -0
- package/dist/boxes/webm/bitstream/av1/color-config.js +103 -0
- package/dist/boxes/webm/bitstream/av1/color-primaries.d.ts +14 -0
- package/dist/boxes/webm/bitstream/av1/color-primaries.js +17 -0
- package/dist/boxes/webm/bitstream/av1/decoder-model-info.d.ts +9 -0
- package/dist/boxes/webm/bitstream/av1/decoder-model-info.js +17 -0
- package/dist/boxes/webm/bitstream/av1/header-segment.d.ts +51 -0
- package/dist/boxes/webm/bitstream/av1/header-segment.js +183 -0
- package/dist/boxes/webm/bitstream/av1/matrix-coefficients.d.ts +17 -0
- package/dist/boxes/webm/bitstream/av1/matrix-coefficients.js +20 -0
- package/dist/boxes/webm/bitstream/av1/operating-parameters-info.d.ts +10 -0
- package/dist/boxes/webm/bitstream/av1/operating-parameters-info.js +15 -0
- package/dist/boxes/webm/bitstream/av1/temporal-point-info.d.ts +5 -0
- package/dist/boxes/webm/bitstream/av1/temporal-point-info.js +8 -0
- package/dist/boxes/webm/bitstream/av1/timing-info.d.ts +8 -0
- package/dist/boxes/webm/bitstream/av1/timing-info.js +20 -0
- package/dist/boxes/webm/bitstream/av1/transfer-characteristics.d.ts +21 -0
- package/dist/boxes/webm/bitstream/av1/transfer-characteristics.js +24 -0
- package/dist/boxes/webm/bitstream/av1/uvlc.d.ts +2 -0
- package/dist/boxes/webm/bitstream/av1/uvlc.js +20 -0
- package/dist/boxes/webm/bitstream/av1.d.ts +20 -0
- package/dist/boxes/webm/bitstream/av1.js +118 -0
- package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.d.ts +0 -0
- package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.js +1 -0
- package/dist/boxes/webm/description.d.ts +2 -0
- package/dist/boxes/webm/description.js +83 -0
- package/dist/boxes/webm/get-ready-tracks.d.ts +3 -0
- package/dist/boxes/webm/get-ready-tracks.js +29 -0
- package/dist/boxes/webm/get-track.d.ts +6 -0
- package/dist/boxes/webm/get-track.js +183 -0
- package/dist/boxes/webm/parse-webm-header.d.ts +2 -1
- package/dist/boxes/webm/parse-webm-header.js +2 -2
- package/dist/boxes/webm/segments/all-segments.d.ts +269 -0
- package/dist/boxes/webm/segments/all-segments.js +277 -0
- package/dist/boxes/webm/segments/duration.d.ts +1 -1
- package/dist/boxes/webm/segments/duration.js +13 -9
- package/dist/boxes/webm/segments/info.d.ts +2 -1
- package/dist/boxes/webm/segments/info.js +12 -4
- package/dist/boxes/webm/segments/main.d.ts +0 -2
- package/dist/boxes/webm/segments/main.js +0 -11
- package/dist/boxes/webm/segments/muxing.d.ts +1 -1
- package/dist/boxes/webm/segments/muxing.js +1 -2
- package/dist/boxes/webm/segments/parse-children.d.ts +11 -1
- package/dist/boxes/webm/segments/parse-children.js +82 -6
- package/dist/boxes/webm/segments/seek-head.d.ts +2 -1
- package/dist/boxes/webm/segments/seek-head.js +12 -3
- package/dist/boxes/webm/segments/seek-position.d.ts +1 -1
- package/dist/boxes/webm/segments/seek-position.js +1 -2
- package/dist/boxes/webm/segments/seek.d.ts +7 -2
- package/dist/boxes/webm/segments/seek.js +22 -9
- package/dist/boxes/webm/segments/track-entry.d.ts +102 -22
- package/dist/boxes/webm/segments/track-entry.js +269 -57
- package/dist/boxes/webm/segments/tracks.d.ts +2 -1
- package/dist/boxes/webm/segments/tracks.js +12 -4
- package/dist/boxes/webm/segments/void.d.ts +1 -1
- package/dist/boxes/webm/segments/void.js +1 -2
- package/dist/boxes/webm/segments/writing.d.ts +1 -1
- package/dist/boxes/webm/segments/writing.js +1 -2
- package/dist/boxes/webm/segments.d.ts +8 -4
- package/dist/boxes/webm/segments.js +176 -40
- package/dist/boxes/webm/traversal.d.ts +7 -0
- package/dist/boxes/webm/traversal.js +25 -0
- package/dist/buffer-iterator.d.ts +15 -1
- package/dist/buffer-iterator.js +115 -46
- package/dist/combine-uint8array.d.ts +1 -0
- package/dist/combine-uint8array.js +13 -0
- package/dist/from-fetch.d.ts +2 -0
- package/dist/from-fetch.js +54 -0
- package/dist/from-node.js +6 -0
- package/dist/from-web-file.d.ts +2 -0
- package/dist/from-web-file.js +34 -0
- package/dist/from-web.js +6 -9
- package/dist/get-audio-codec.d.ts +19 -0
- package/dist/get-audio-codec.js +153 -60
- package/dist/get-dimensions.d.ts +8 -2
- package/dist/get-dimensions.js +13 -91
- package/dist/get-duration.js +4 -7
- package/dist/get-fps.d.ts +4 -3
- package/dist/get-fps.js +17 -116
- package/dist/get-sample-aspect-ratio.d.ts +37 -0
- package/dist/get-sample-aspect-ratio.js +137 -0
- package/dist/get-sample-positions.d.ts +11 -1
- package/dist/get-sample-positions.js +31 -2
- package/dist/get-tracks.d.ts +44 -5
- package/dist/get-tracks.js +66 -48
- package/dist/get-video-codec.d.ts +2 -0
- package/dist/get-video-codec.js +47 -31
- package/dist/get-video-metadata.d.ts +2 -0
- package/dist/get-video-metadata.js +44 -0
- package/dist/has-all-info.d.ts +2 -1
- package/dist/has-all-info.js +14 -5
- package/dist/index.d.ts +1 -0
- package/dist/make-hvc1-codec-strings.d.ts +2 -0
- package/dist/make-hvc1-codec-strings.js +47 -0
- package/dist/options.d.ts +26 -4
- package/dist/parse-media.js +62 -17
- package/dist/parse-result.d.ts +16 -5
- package/dist/parse-video.d.ts +11 -2
- package/dist/parse-video.js +14 -6
- package/dist/parser-context.d.ts +8 -0
- package/dist/parser-context.js +2 -0
- package/dist/parser-state.d.ts +23 -0
- package/dist/parser-state.js +112 -0
- package/dist/read-and-increment-offset.d.ts +28 -0
- package/dist/read-and-increment-offset.js +177 -0
- package/dist/reader.d.ts +2 -2
- package/dist/traversal.d.ts +37 -0
- package/dist/traversal.js +244 -1
- package/dist/understand-vorbis.d.ts +1 -0
- package/dist/understand-vorbis.js +12 -0
- package/dist/webcodec-sample-types.d.ts +21 -0
- package/dist/webcodec-sample-types.js +2 -0
- package/package.json +10 -2
- package/src/add-new-matroska-tracks.ts +23 -0
- package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +61 -0
- package/src/boxes/iso-base-media/esds/esds-descriptors.ts +33 -2
- package/src/boxes/iso-base-media/make-track.ts +157 -0
- package/src/boxes/iso-base-media/mdat/mdat.ts +131 -0
- package/src/boxes/iso-base-media/moov/moov.ts +8 -3
- package/src/boxes/iso-base-media/mvhd.ts +7 -1
- package/src/boxes/iso-base-media/process-box.ts +388 -38
- package/src/boxes/iso-base-media/stsd/av1c.ts +19 -0
- package/src/boxes/iso-base-media/stsd/avcc.ts +36 -0
- package/src/boxes/iso-base-media/stsd/colr.ts +49 -0
- package/src/boxes/iso-base-media/stsd/ctts.ts +55 -0
- package/src/boxes/iso-base-media/stsd/hvcc.ts +32 -0
- package/src/boxes/iso-base-media/stsd/keys.ts +2 -0
- package/src/boxes/iso-base-media/stsd/mebx.ts +8 -3
- package/src/boxes/iso-base-media/stsd/pasp.ts +32 -0
- package/src/boxes/iso-base-media/stsd/samples.ts +43 -16
- package/src/boxes/iso-base-media/stsd/stco.ts +50 -0
- package/src/boxes/iso-base-media/stsd/stsc.ts +61 -0
- package/src/boxes/iso-base-media/stsd/stsd.ts +10 -3
- package/src/boxes/iso-base-media/stsd/stss.ts +47 -0
- package/src/boxes/iso-base-media/stsd/stsz.ts +75 -0
- package/src/boxes/iso-base-media/tkhd.ts +63 -16
- package/src/boxes/iso-base-media/trak/trak.ts +8 -3
- package/src/boxes/iso-base-media/void-box.ts +4 -0
- package/src/boxes/webm/allowed-partial-segments.ts +1 -0
- package/src/boxes/webm/av1-codec-private.ts +113 -0
- package/src/boxes/webm/description.ts +101 -0
- package/src/boxes/webm/get-ready-tracks.ts +36 -0
- package/src/boxes/webm/get-track.ts +250 -0
- package/src/boxes/webm/parse-webm-header.ts +6 -2
- package/src/boxes/webm/segments/all-segments.ts +285 -0
- package/src/boxes/webm/segments/duration.ts +15 -8
- package/src/boxes/webm/segments/info.ts +18 -4
- package/src/boxes/webm/segments/main.ts +0 -13
- package/src/boxes/webm/segments/muxing.ts +1 -1
- package/src/boxes/webm/segments/parse-children.ts +132 -9
- package/src/boxes/webm/segments/seek-head.ts +17 -4
- package/src/boxes/webm/segments/seek-position.ts +1 -2
- package/src/boxes/webm/segments/seek.ts +31 -9
- package/src/boxes/webm/segments/track-entry.ts +475 -65
- package/src/boxes/webm/segments/tracks.ts +17 -7
- package/src/boxes/webm/segments/void.ts +4 -2
- package/src/boxes/webm/segments/writing.ts +1 -1
- package/src/boxes/webm/segments.ts +266 -42
- package/src/boxes/webm/traversal.ts +32 -0
- package/src/buffer-iterator.ts +140 -45
- package/src/combine-uint8array.ts +13 -0
- package/src/{from-web.ts → from-fetch.ts} +9 -1
- package/src/from-node.ts +8 -0
- package/src/from-web-file.ts +39 -0
- package/src/get-audio-codec.ts +213 -84
- package/src/get-dimensions.ts +25 -132
- package/src/get-duration.ts +4 -8
- package/src/get-fps.ts +27 -172
- package/src/get-sample-aspect-ratio.ts +204 -0
- package/src/get-sample-positions.ts +93 -0
- package/src/get-tracks.ts +147 -0
- package/src/get-video-codec.ts +62 -47
- package/src/has-all-info.ts +35 -5
- package/src/index.ts +8 -0
- package/src/make-hvc1-codec-strings.ts +55 -0
- package/src/options.ts +48 -9
- package/src/parse-media.ts +90 -21
- package/src/parse-result.ts +28 -4
- package/src/parse-video.ts +30 -7
- package/src/parser-context.ts +9 -0
- package/src/parser-state.ts +151 -0
- package/src/reader.ts +2 -2
- package/src/test/aspect-ratio.test.ts +42 -0
- package/src/test/av1.test.ts +108 -0
- package/src/test/duration.test.ts +5 -21
- package/src/test/matroska.test.ts +350 -31
- package/src/test/mvhd.test.ts +6 -1
- package/src/test/parse-esds.test.ts +29 -6
- package/src/test/parse-stco.test.ts +59 -0
- package/src/test/parse-stsc.test.ts +104 -0
- package/src/test/parse-stsz.test.ts +57 -0
- package/src/test/parse-stts.test.ts +1 -1
- package/src/test/parse-video.test.ts +23 -35
- package/src/test/parse-webm.test.ts +5 -5
- package/src/test/stream-local.test.ts +542 -46
- package/src/test/stream-remote.test.ts +15 -13
- package/src/test/stream-samples.test.ts +259 -0
- package/src/test/stsd.test.ts +60 -8
- package/src/test/tkhd.test.ts +4 -1
- package/src/traversal.ts +496 -0
- package/src/webcodec-sample-types.ts +30 -0
- package/tsconfig.json +5 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/boxes.json +0 -1
- package/dist/boxes/iso-base-media/esds-descriptors.d.ts +0 -21
- package/dist/boxes/iso-base-media/esds-descriptors.js +0 -62
- package/dist/boxes/iso-base-media/esds.d.ts +0 -15
- package/dist/boxes/iso-base-media/esds.js +0 -27
- package/dist/get-codec.d.ts +0 -4
- package/dist/get-codec.js +0 -22
- /package/dist/{get-samples.d.ts → boxes/webm/bitstream/av1/frame.d.ts} +0 -0
- /package/dist/{get-samples.js → boxes/webm/bitstream/av1/frame.js} +0 -0
- /package/src/boxes/iso-base-media/{stts → stsd}/stts.ts +0 -0
package/dist/get-fps.js
CHANGED
|
@@ -1,6 +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
5
|
const calculateFps = ({ sttsBox, timeScale, durationInSamples, }) => {
|
|
5
6
|
let totalSamples = 0;
|
|
6
7
|
for (const sample of sttsBox.sampleDistribution) {
|
|
@@ -11,29 +12,8 @@ const calculateFps = ({ sttsBox, timeScale, durationInSamples, }) => {
|
|
|
11
12
|
return fps;
|
|
12
13
|
};
|
|
13
14
|
const trakBoxContainsAudio = (trakBox) => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
const { children } = trakBox;
|
|
18
|
-
const mediaBoxes = children.filter((c) => c.type === 'regular-box' && c.boxType === 'mdia');
|
|
19
|
-
if (!mediaBoxes || mediaBoxes.length === 0) {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
const firstMediaBox = mediaBoxes[0];
|
|
23
|
-
if (firstMediaBox.type !== 'regular-box' ||
|
|
24
|
-
firstMediaBox.boxType !== 'mdia') {
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
const minf = firstMediaBox.children.find((c) => c.type === 'regular-box' && c.boxType === 'minf');
|
|
28
|
-
if (!minf || minf.type !== 'regular-box' || minf.boxType !== 'minf') {
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
const stbl = minf.children.find((c) => c.type === 'regular-box' && c.boxType === 'stbl');
|
|
32
|
-
if (!stbl || stbl.type !== 'regular-box' || stbl.boxType !== 'stbl') {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
const stsd = stbl.children.find((c) => c.type === 'stsd-box');
|
|
36
|
-
if (!stsd || stsd.type !== 'stsd-box') {
|
|
15
|
+
const stsd = (0, traversal_1.getStsdBox)(trakBox);
|
|
16
|
+
if (!stsd) {
|
|
37
17
|
return false;
|
|
38
18
|
}
|
|
39
19
|
const videoSample = stsd.samples.find((s) => s.type === 'audio');
|
|
@@ -44,29 +24,8 @@ const trakBoxContainsAudio = (trakBox) => {
|
|
|
44
24
|
};
|
|
45
25
|
exports.trakBoxContainsAudio = trakBoxContainsAudio;
|
|
46
26
|
const trakBoxContainsVideo = (trakBox) => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
const { children } = trakBox;
|
|
51
|
-
const mediaBoxes = children.filter((c) => c.type === 'regular-box' && c.boxType === 'mdia');
|
|
52
|
-
if (!mediaBoxes || mediaBoxes.length === 0) {
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
const firstMediaBox = mediaBoxes[0];
|
|
56
|
-
if (firstMediaBox.type !== 'regular-box' ||
|
|
57
|
-
firstMediaBox.boxType !== 'mdia') {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
const minf = firstMediaBox.children.find((c) => c.type === 'regular-box' && c.boxType === 'minf');
|
|
61
|
-
if (!minf || minf.type !== 'regular-box' || minf.boxType !== 'minf') {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
const stbl = minf.children.find((c) => c.type === 'regular-box' && c.boxType === 'stbl');
|
|
65
|
-
if (!stbl || stbl.type !== 'regular-box' || stbl.boxType !== 'stbl') {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
const stsd = stbl.children.find((c) => c.type === 'stsd-box');
|
|
69
|
-
if (!stsd || stsd.type !== 'stsd-box') {
|
|
27
|
+
const stsd = (0, traversal_1.getStsdBox)(trakBox);
|
|
28
|
+
if (!stsd) {
|
|
70
29
|
return false;
|
|
71
30
|
}
|
|
72
31
|
const videoSample = stsd.samples.find((s) => s.type === 'video');
|
|
@@ -76,88 +35,30 @@ const trakBoxContainsVideo = (trakBox) => {
|
|
|
76
35
|
return true;
|
|
77
36
|
};
|
|
78
37
|
exports.trakBoxContainsVideo = trakBoxContainsVideo;
|
|
79
|
-
const getTimescaleAndDuration = (
|
|
80
|
-
const
|
|
81
|
-
if (
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
const { children } = moovBox;
|
|
85
|
-
const trackBoxes = children.filter((c) => c.type === 'trak-box');
|
|
86
|
-
if (!trackBoxes || trackBoxes.length === 0) {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
const trackBox = trackBoxes.find(exports.trakBoxContainsVideo);
|
|
90
|
-
if (!trackBox || trackBox.type !== 'trak-box') {
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
const trackBoxChildren = trackBox.children;
|
|
94
|
-
if (!trackBoxChildren || trackBoxChildren.length === 0) {
|
|
95
|
-
return null;
|
|
96
|
-
}
|
|
97
|
-
const mdiaBox = trackBoxChildren.find((c) => c.type === 'regular-box' && c.boxType === 'mdia');
|
|
98
|
-
if (!mdiaBox ||
|
|
99
|
-
mdiaBox.type !== 'regular-box' ||
|
|
100
|
-
mdiaBox.boxType !== 'mdia') {
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
const mdhdBox = mdiaBox === null || mdiaBox === void 0 ? void 0 : mdiaBox.children.find((c) => c.type === 'mdhd-box');
|
|
104
|
-
if (mdhdBox && mdhdBox.type === 'mdhd-box') {
|
|
38
|
+
const getTimescaleAndDuration = (trakBox) => {
|
|
39
|
+
const mdhdBox = (0, traversal_1.getMdhdBox)(trakBox);
|
|
40
|
+
if (mdhdBox) {
|
|
105
41
|
return { timescale: mdhdBox.timescale, duration: mdhdBox.duration };
|
|
106
42
|
}
|
|
107
|
-
|
|
108
|
-
if (!mvhdBox || mvhdBox.type !== 'mvhd-box') {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
const { timeScale, durationInUnits } = mvhdBox;
|
|
112
|
-
return { timescale: timeScale, duration: durationInUnits };
|
|
43
|
+
return null;
|
|
113
44
|
};
|
|
114
45
|
exports.getTimescaleAndDuration = getTimescaleAndDuration;
|
|
115
46
|
const getFps = (segments) => {
|
|
116
|
-
const
|
|
117
|
-
if (!
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
const moovBox = segments.find((s) => s.type === 'moov-box');
|
|
121
|
-
if (!moovBox || moovBox.type !== 'moov-box') {
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
const mvhdBox = moovBox.children.find((c) => c.type === 'mvhd-box');
|
|
125
|
-
if (!mvhdBox || mvhdBox.type !== 'mvhd-box') {
|
|
126
|
-
return null;
|
|
127
|
-
}
|
|
128
|
-
const { children } = moovBox;
|
|
129
|
-
const trackBoxes = children.filter((c) => c.type === 'trak-box');
|
|
130
|
-
if (!trackBoxes || trackBoxes.length === 0) {
|
|
47
|
+
const moovBox = (0, traversal_1.getMoovBox)(segments);
|
|
48
|
+
if (!moovBox) {
|
|
131
49
|
return null;
|
|
132
50
|
}
|
|
51
|
+
const trackBoxes = (0, traversal_1.getTraks)(moovBox);
|
|
133
52
|
const trackBox = trackBoxes.find(exports.trakBoxContainsVideo);
|
|
134
|
-
if (!trackBox
|
|
135
|
-
return null;
|
|
136
|
-
}
|
|
137
|
-
const trackBoxChildren = trackBox.children;
|
|
138
|
-
if (!trackBoxChildren || trackBoxChildren.length === 0) {
|
|
53
|
+
if (!trackBox) {
|
|
139
54
|
return null;
|
|
140
55
|
}
|
|
141
|
-
const
|
|
142
|
-
if (!
|
|
143
|
-
mdiaBox.type !== 'regular-box' ||
|
|
144
|
-
mdiaBox.boxType !== 'mdia') {
|
|
145
|
-
return null;
|
|
146
|
-
}
|
|
147
|
-
const minfBox = mdiaBox.children.find((c) => c.type === 'regular-box' && c.boxType === 'minf');
|
|
148
|
-
if (!minfBox ||
|
|
149
|
-
minfBox.type !== 'regular-box' ||
|
|
150
|
-
minfBox.boxType !== 'minf') {
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
const stblBox = minfBox.children.find((c) => c.type === 'regular-box' && c.boxType === 'stbl');
|
|
154
|
-
if (!stblBox ||
|
|
155
|
-
stblBox.type !== 'regular-box' ||
|
|
156
|
-
stblBox.boxType !== 'stbl') {
|
|
56
|
+
const timescaleAndDuration = (0, exports.getTimescaleAndDuration)(trackBox);
|
|
57
|
+
if (!timescaleAndDuration) {
|
|
157
58
|
return null;
|
|
158
59
|
}
|
|
159
|
-
const sttsBox =
|
|
160
|
-
if (!sttsBox
|
|
60
|
+
const sttsBox = (0, traversal_1.getSttsBox)(trackBox);
|
|
61
|
+
if (!sttsBox) {
|
|
161
62
|
return null;
|
|
162
63
|
}
|
|
163
64
|
return calculateFps({
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Av1CBox } from './boxes/iso-base-media/stsd/av1c';
|
|
2
|
+
import type { AvccBox } from './boxes/iso-base-media/stsd/avcc';
|
|
3
|
+
import type { ColorParameterBox } from './boxes/iso-base-media/stsd/colr';
|
|
4
|
+
import type { HvccBox } from './boxes/iso-base-media/stsd/hvcc';
|
|
5
|
+
import type { PaspBox } from './boxes/iso-base-media/stsd/pasp';
|
|
6
|
+
import type { VideoSample } from './boxes/iso-base-media/stsd/samples';
|
|
7
|
+
import type { TkhdBox } from './boxes/iso-base-media/tkhd';
|
|
8
|
+
import type { TrakBox } from './boxes/iso-base-media/trak/trak';
|
|
9
|
+
import type { Dimensions } from './get-dimensions';
|
|
10
|
+
type AspectRatio = {
|
|
11
|
+
numerator: number;
|
|
12
|
+
denominator: number;
|
|
13
|
+
};
|
|
14
|
+
export declare const getVideoSample: (trakBox: TrakBox) => VideoSample | null;
|
|
15
|
+
export declare const getAvccBox: (trakBox: TrakBox) => AvccBox | null;
|
|
16
|
+
export declare const getAv1CBox: (trakBox: TrakBox) => Av1CBox | null;
|
|
17
|
+
export declare const getPaspBox: (trakBox: TrakBox) => PaspBox | null;
|
|
18
|
+
export declare const getHvccBox: (trakBox: TrakBox) => HvccBox | null;
|
|
19
|
+
export declare const getSampleAspectRatio: (trakBox: TrakBox) => AspectRatio;
|
|
20
|
+
export declare const getColrBox: (videoSample: VideoSample) => ColorParameterBox | null;
|
|
21
|
+
export declare const applyTkhdBox: (aspectRatioApplied: Dimensions, tkhdBox: TkhdBox) => {
|
|
22
|
+
displayAspectWidth: number;
|
|
23
|
+
displayAspectHeight: number;
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
rotation: number;
|
|
27
|
+
};
|
|
28
|
+
export declare const applyAspectRatios: ({ dimensions, sampleAspectRatio, displayAspectRatio, }: {
|
|
29
|
+
dimensions: Dimensions;
|
|
30
|
+
sampleAspectRatio: AspectRatio;
|
|
31
|
+
displayAspectRatio: AspectRatio;
|
|
32
|
+
}) => Dimensions;
|
|
33
|
+
export declare const getDisplayAspectRatio: ({ sampleAspectRatio, nativeDimensions, }: {
|
|
34
|
+
sampleAspectRatio: AspectRatio;
|
|
35
|
+
nativeDimensions: Dimensions;
|
|
36
|
+
}) => AspectRatio;
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
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.getVideoSample = void 0;
|
|
4
|
+
const traversal_1 = require("./traversal");
|
|
5
|
+
const getVideoSample = (trakBox) => {
|
|
6
|
+
const stsdBox = (0, traversal_1.getStsdBox)(trakBox);
|
|
7
|
+
if (!stsdBox) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
const videoSample = stsdBox.samples.find((s) => s.type === 'video');
|
|
11
|
+
if (!videoSample || videoSample.type !== 'video') {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
return videoSample;
|
|
15
|
+
};
|
|
16
|
+
exports.getVideoSample = getVideoSample;
|
|
17
|
+
const getAvccBox = (trakBox) => {
|
|
18
|
+
const videoSample = (0, exports.getVideoSample)(trakBox);
|
|
19
|
+
if (!videoSample) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const avccBox = videoSample.descriptors.find((c) => c.type === 'avcc-box');
|
|
23
|
+
if (!avccBox || avccBox.type !== 'avcc-box') {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return avccBox;
|
|
27
|
+
};
|
|
28
|
+
exports.getAvccBox = getAvccBox;
|
|
29
|
+
const getAv1CBox = (trakBox) => {
|
|
30
|
+
const videoSample = (0, exports.getVideoSample)(trakBox);
|
|
31
|
+
if (!videoSample) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const av1cBox = videoSample.descriptors.find((c) => c.type === 'av1C-box');
|
|
35
|
+
if (!av1cBox || av1cBox.type !== 'av1C-box') {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return av1cBox;
|
|
39
|
+
};
|
|
40
|
+
exports.getAv1CBox = getAv1CBox;
|
|
41
|
+
const getPaspBox = (trakBox) => {
|
|
42
|
+
const videoSample = (0, exports.getVideoSample)(trakBox);
|
|
43
|
+
if (!videoSample) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const paspBox = videoSample.descriptors.find((c) => c.type === 'pasp-box');
|
|
47
|
+
if (!paspBox || paspBox.type !== 'pasp-box') {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
return paspBox;
|
|
51
|
+
};
|
|
52
|
+
exports.getPaspBox = getPaspBox;
|
|
53
|
+
const getHvccBox = (trakBox) => {
|
|
54
|
+
const videoSample = (0, exports.getVideoSample)(trakBox);
|
|
55
|
+
if (!videoSample) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const hvccBox = videoSample.descriptors.find((c) => c.type === 'hvcc-box');
|
|
59
|
+
if (!hvccBox || hvccBox.type !== 'hvcc-box') {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return hvccBox;
|
|
63
|
+
};
|
|
64
|
+
exports.getHvccBox = getHvccBox;
|
|
65
|
+
const getSampleAspectRatio = (trakBox) => {
|
|
66
|
+
const paspBox = (0, exports.getPaspBox)(trakBox);
|
|
67
|
+
if (!paspBox) {
|
|
68
|
+
return {
|
|
69
|
+
numerator: 1,
|
|
70
|
+
denominator: 1,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
numerator: paspBox.hSpacing,
|
|
75
|
+
denominator: paspBox.vSpacing,
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
exports.getSampleAspectRatio = getSampleAspectRatio;
|
|
79
|
+
const getColrBox = (videoSample) => {
|
|
80
|
+
const colrBox = videoSample.descriptors.find((c) => c.type === 'colr-box');
|
|
81
|
+
if (!colrBox || colrBox.type !== 'colr-box') {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
return colrBox;
|
|
85
|
+
};
|
|
86
|
+
exports.getColrBox = getColrBox;
|
|
87
|
+
const applyTkhdBox = (aspectRatioApplied, tkhdBox) => {
|
|
88
|
+
if (tkhdBox === null || tkhdBox.rotation === 0) {
|
|
89
|
+
return {
|
|
90
|
+
displayAspectWidth: aspectRatioApplied.width,
|
|
91
|
+
displayAspectHeight: aspectRatioApplied.height,
|
|
92
|
+
width: aspectRatioApplied.width,
|
|
93
|
+
height: aspectRatioApplied.height,
|
|
94
|
+
rotation: 0,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
width: tkhdBox.width,
|
|
99
|
+
height: tkhdBox.height,
|
|
100
|
+
rotation: tkhdBox.rotation,
|
|
101
|
+
displayAspectWidth: aspectRatioApplied.width,
|
|
102
|
+
displayAspectHeight: aspectRatioApplied.height,
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
exports.applyTkhdBox = applyTkhdBox;
|
|
106
|
+
const applyAspectRatios = ({ dimensions, sampleAspectRatio, displayAspectRatio, }) => {
|
|
107
|
+
if (displayAspectRatio.numerator === 0) {
|
|
108
|
+
return dimensions;
|
|
109
|
+
}
|
|
110
|
+
if (displayAspectRatio.denominator === 0) {
|
|
111
|
+
return dimensions;
|
|
112
|
+
}
|
|
113
|
+
const newWidth = Math.round((dimensions.width * sampleAspectRatio.numerator) /
|
|
114
|
+
sampleAspectRatio.denominator);
|
|
115
|
+
const newHeight = Math.floor(newWidth / (displayAspectRatio.numerator / displayAspectRatio.denominator));
|
|
116
|
+
return {
|
|
117
|
+
width: Math.floor(newWidth),
|
|
118
|
+
height: newHeight,
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
exports.applyAspectRatios = applyAspectRatios;
|
|
122
|
+
function gcd(a, b) {
|
|
123
|
+
return b === 0 ? a : gcd(b, a % b);
|
|
124
|
+
}
|
|
125
|
+
function reduceFraction(numerator, denominator) {
|
|
126
|
+
const greatestCommonDivisor = gcd(Math.abs(numerator), Math.abs(denominator));
|
|
127
|
+
return {
|
|
128
|
+
numerator: numerator / greatestCommonDivisor,
|
|
129
|
+
denominator: denominator / greatestCommonDivisor,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
const getDisplayAspectRatio = ({ sampleAspectRatio, nativeDimensions, }) => {
|
|
133
|
+
const num = Math.round(nativeDimensions.width * sampleAspectRatio.numerator);
|
|
134
|
+
const den = Math.round(nativeDimensions.height * sampleAspectRatio.denominator);
|
|
135
|
+
return reduceFraction(num, den);
|
|
136
|
+
};
|
|
137
|
+
exports.getDisplayAspectRatio = getDisplayAspectRatio;
|
|
@@ -1,12 +1,22 @@
|
|
|
1
|
+
import type { CttsBox } from './boxes/iso-base-media/stsd/ctts';
|
|
1
2
|
import type { StcoBox } from './boxes/iso-base-media/stsd/stco';
|
|
2
3
|
import type { StscBox } from './boxes/iso-base-media/stsd/stsc';
|
|
4
|
+
import type { StssBox } from './boxes/iso-base-media/stsd/stss';
|
|
3
5
|
import type { StszBox } from './boxes/iso-base-media/stsd/stsz';
|
|
6
|
+
import type { SttsBox } from './boxes/iso-base-media/stsd/stts';
|
|
4
7
|
export type SamplePosition = {
|
|
5
8
|
offset: number;
|
|
6
9
|
size: number;
|
|
10
|
+
isKeyframe: boolean;
|
|
11
|
+
dts: number;
|
|
12
|
+
cts: number;
|
|
13
|
+
duration: number;
|
|
7
14
|
};
|
|
8
|
-
export declare const getSamplePositions: ({ stcoBox, stszBox, stscBox, }: {
|
|
15
|
+
export declare const getSamplePositions: ({ stcoBox, stszBox, stscBox, stssBox, sttsBox, cttsBox, }: {
|
|
9
16
|
stcoBox: StcoBox;
|
|
10
17
|
stszBox: StszBox;
|
|
11
18
|
stscBox: StscBox;
|
|
19
|
+
stssBox: StssBox | null;
|
|
20
|
+
sttsBox: SttsBox;
|
|
21
|
+
cttsBox: CttsBox | null;
|
|
12
22
|
}) => SamplePosition[];
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getSamplePositions = void 0;
|
|
4
|
-
const getSamplePositions = ({ stcoBox, stszBox, stscBox, }) => {
|
|
4
|
+
const getSamplePositions = ({ stcoBox, stszBox, stscBox, stssBox, sttsBox, cttsBox, }) => {
|
|
5
|
+
var _a;
|
|
6
|
+
const sttsDeltas = [];
|
|
7
|
+
for (const distribution of sttsBox.sampleDistribution) {
|
|
8
|
+
for (let i = 0; i < distribution.sampleCount; i++) {
|
|
9
|
+
sttsDeltas.push(distribution.sampleDelta);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const cttsEntries = [];
|
|
13
|
+
for (const entry of (_a = cttsBox === null || cttsBox === void 0 ? void 0 : cttsBox.entries) !== null && _a !== void 0 ? _a : [
|
|
14
|
+
{ sampleCount: sttsDeltas.length, sampleOffset: 0 },
|
|
15
|
+
]) {
|
|
16
|
+
for (let i = 0; i < entry.sampleCount; i++) {
|
|
17
|
+
cttsEntries.push(entry.sampleOffset);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
let dts = 0;
|
|
5
21
|
const chunks = stcoBox.entries;
|
|
6
22
|
const samples = [];
|
|
7
23
|
let samplesPerChunk = 1;
|
|
@@ -12,11 +28,24 @@ const getSamplePositions = ({ stcoBox, stszBox, stscBox, }) => {
|
|
|
12
28
|
}
|
|
13
29
|
let offsetInThisChunk = 0;
|
|
14
30
|
for (let j = 0; j < samplesPerChunk; j++) {
|
|
15
|
-
const size = stszBox.
|
|
31
|
+
const size = stszBox.countType === 'fixed'
|
|
32
|
+
? stszBox.sampleSize
|
|
33
|
+
: stszBox.entries[samples.length];
|
|
34
|
+
const isKeyframe = stssBox
|
|
35
|
+
? stssBox.sampleNumber.includes(samples.length + 1)
|
|
36
|
+
: true;
|
|
37
|
+
const delta = sttsDeltas[samples.length];
|
|
38
|
+
const ctsOffset = cttsEntries[samples.length];
|
|
39
|
+
const cts = dts + ctsOffset;
|
|
16
40
|
samples.push({
|
|
17
41
|
offset: chunks[i] + offsetInThisChunk,
|
|
18
42
|
size,
|
|
43
|
+
isKeyframe,
|
|
44
|
+
dts,
|
|
45
|
+
cts,
|
|
46
|
+
duration: delta,
|
|
19
47
|
});
|
|
48
|
+
dts += delta;
|
|
20
49
|
offsetInThisChunk += size;
|
|
21
50
|
}
|
|
22
51
|
}
|
package/dist/get-tracks.d.ts
CHANGED
|
@@ -1,10 +1,49 @@
|
|
|
1
|
+
import type { MoovBox } from './boxes/iso-base-media/moov/moov';
|
|
1
2
|
import type { SamplePosition } from './get-sample-positions';
|
|
2
3
|
import type { AnySegment } from './parse-result';
|
|
3
|
-
type
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import type { ParserState } from './parser-state';
|
|
5
|
+
type SampleAspectRatio = {
|
|
6
|
+
numerator: number;
|
|
7
|
+
denominator: number;
|
|
8
|
+
};
|
|
9
|
+
export type VideoTrack = {
|
|
10
|
+
type: 'video';
|
|
11
|
+
samplePositions: SamplePosition[] | null;
|
|
12
|
+
trackId: number;
|
|
13
|
+
description: Uint8Array | undefined;
|
|
14
|
+
timescale: number;
|
|
15
|
+
codec: string;
|
|
16
|
+
sampleAspectRatio: SampleAspectRatio;
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
displayAspectWidth: number;
|
|
20
|
+
displayAspectHeight: number;
|
|
21
|
+
codedWidth: number;
|
|
22
|
+
codedHeight: number;
|
|
23
|
+
rotation: number;
|
|
24
|
+
};
|
|
25
|
+
export type AudioTrack = {
|
|
26
|
+
type: 'audio';
|
|
27
|
+
samplePositions: SamplePosition[] | null;
|
|
6
28
|
trackId: number;
|
|
29
|
+
timescale: number;
|
|
30
|
+
codec: string;
|
|
31
|
+
numberOfChannels: number;
|
|
32
|
+
sampleRate: number;
|
|
33
|
+
description: Uint8Array | undefined;
|
|
34
|
+
};
|
|
35
|
+
export type OtherTrack = {
|
|
36
|
+
type: 'other';
|
|
37
|
+
samplePositions: SamplePosition[] | null;
|
|
38
|
+
trackId: number;
|
|
39
|
+
timescale: number;
|
|
40
|
+
};
|
|
41
|
+
export type Track = VideoTrack | AudioTrack | OtherTrack;
|
|
42
|
+
export declare const getNumberOfTracks: (moovBox: MoovBox) => number;
|
|
43
|
+
export declare const hasTracks: (segments: AnySegment[]) => boolean;
|
|
44
|
+
export declare const getTracks: (segments: AnySegment[], state: ParserState) => {
|
|
45
|
+
videoTracks: VideoTrack[];
|
|
46
|
+
audioTracks: AudioTrack[];
|
|
47
|
+
otherTracks: OtherTrack[];
|
|
7
48
|
};
|
|
8
|
-
export declare const getNumberOfTracks: (segments: AnySegment[]) => number;
|
|
9
|
-
export declare const getTracks: (segments: AnySegment[]) => Track[];
|
|
10
49
|
export {};
|
package/dist/get-tracks.js
CHANGED
|
@@ -1,66 +1,84 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getTracks = exports.getNumberOfTracks = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const traversal_1 = require("./traversal");
|
|
7
|
-
|
|
8
|
-
const getNumberOfTracks = (
|
|
9
|
-
const
|
|
10
|
-
if (!moovBox) {
|
|
11
|
-
return 0;
|
|
12
|
-
}
|
|
13
|
-
const mvHdBox = (0, traversal_1.getMvhdBox)(moovBox);
|
|
3
|
+
exports.getTracks = exports.hasTracks = exports.getNumberOfTracks = void 0;
|
|
4
|
+
const make_track_1 = require("./boxes/iso-base-media/make-track");
|
|
5
|
+
const get_ready_tracks_1 = require("./boxes/webm/get-ready-tracks");
|
|
6
|
+
const traversal_1 = require("./boxes/webm/traversal");
|
|
7
|
+
const traversal_2 = require("./traversal");
|
|
8
|
+
const getNumberOfTracks = (moovBox) => {
|
|
9
|
+
const mvHdBox = (0, traversal_2.getMvhdBox)(moovBox);
|
|
14
10
|
if (!mvHdBox) {
|
|
15
11
|
return 0;
|
|
16
12
|
}
|
|
17
13
|
return mvHdBox.nextTrackId - 1;
|
|
18
14
|
};
|
|
19
15
|
exports.getNumberOfTracks = getNumberOfTracks;
|
|
20
|
-
const
|
|
21
|
-
const
|
|
16
|
+
const hasTracks = (segments) => {
|
|
17
|
+
const mainSegment = (0, traversal_1.getMainSegment)(segments);
|
|
18
|
+
if (mainSegment) {
|
|
19
|
+
return (0, traversal_2.getTracksSegment)(mainSegment) !== null;
|
|
20
|
+
}
|
|
21
|
+
const moovBox = (0, traversal_2.getMoovBox)(segments);
|
|
22
22
|
if (!moovBox) {
|
|
23
|
-
return
|
|
23
|
+
return false;
|
|
24
24
|
}
|
|
25
|
-
const
|
|
26
|
-
const tracks = (0,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
25
|
+
const numberOfTracks = (0, exports.getNumberOfTracks)(moovBox);
|
|
26
|
+
const tracks = (0, traversal_2.getTraks)(moovBox);
|
|
27
|
+
return tracks.length === numberOfTracks;
|
|
28
|
+
};
|
|
29
|
+
exports.hasTracks = hasTracks;
|
|
30
|
+
const getTracks = (segments, state) => {
|
|
31
|
+
const videoTracks = [];
|
|
32
|
+
const audioTracks = [];
|
|
33
|
+
const otherTracks = [];
|
|
34
|
+
const mainSegment = segments.find((s) => s.type === 'main-segment');
|
|
35
|
+
if (mainSegment && mainSegment.type === 'main-segment') {
|
|
36
|
+
const matroskaTracks = (0, get_ready_tracks_1.getTracksFromMatroska)(mainSegment, state.getTimescale());
|
|
37
|
+
for (const track of matroskaTracks) {
|
|
38
|
+
if (track.type === 'video') {
|
|
39
|
+
videoTracks.push(track);
|
|
40
|
+
}
|
|
41
|
+
else if (track.type === 'audio') {
|
|
42
|
+
audioTracks.push(track);
|
|
43
|
+
}
|
|
44
|
+
else if (track.type === 'other') {
|
|
45
|
+
otherTracks.push(track);
|
|
46
|
+
}
|
|
37
47
|
}
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
return {
|
|
49
|
+
videoTracks,
|
|
50
|
+
audioTracks,
|
|
51
|
+
otherTracks,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const moovBox = (0, traversal_2.getMoovBox)(segments);
|
|
55
|
+
if (!moovBox) {
|
|
56
|
+
return {
|
|
57
|
+
videoTracks,
|
|
58
|
+
audioTracks,
|
|
59
|
+
otherTracks,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const tracks = (0, traversal_2.getTraks)(moovBox);
|
|
63
|
+
for (const trakBox of tracks) {
|
|
64
|
+
const track = (0, make_track_1.makeBaseMediaTrack)(trakBox);
|
|
65
|
+
if (!track) {
|
|
66
|
+
continue;
|
|
40
67
|
}
|
|
41
|
-
if (
|
|
42
|
-
|
|
68
|
+
if (track.type === 'video') {
|
|
69
|
+
videoTracks.push(track);
|
|
43
70
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
stscBox,
|
|
47
|
-
stszBox,
|
|
48
|
-
});
|
|
49
|
-
if ((0, get_fps_1.trakBoxContainsAudio)(track)) {
|
|
50
|
-
foundTracks.push({
|
|
51
|
-
type: 'audio',
|
|
52
|
-
samplePositions,
|
|
53
|
-
trackId: tkhdBox.trackId,
|
|
54
|
-
});
|
|
71
|
+
else if (track.type === 'audio') {
|
|
72
|
+
audioTracks.push(track);
|
|
55
73
|
}
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
type: 'video',
|
|
59
|
-
samplePositions,
|
|
60
|
-
trackId: tkhdBox.trackId,
|
|
61
|
-
});
|
|
74
|
+
else if (track.type === 'other') {
|
|
75
|
+
otherTracks.push(track);
|
|
62
76
|
}
|
|
63
77
|
}
|
|
64
|
-
return
|
|
78
|
+
return {
|
|
79
|
+
videoTracks,
|
|
80
|
+
audioTracks,
|
|
81
|
+
otherTracks,
|
|
82
|
+
};
|
|
65
83
|
};
|
|
66
84
|
exports.getTracks = getTracks;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { TrakBox } from './boxes/iso-base-media/trak/trak';
|
|
1
2
|
import type { KnownVideoCodecs } from './options';
|
|
2
3
|
import type { AnySegment } from './parse-result';
|
|
3
4
|
export declare const hasVideoCodec: (boxes: AnySegment[]) => boolean;
|
|
5
|
+
export declare const getVideoCodecString: (trakBox: TrakBox) => string | null;
|
|
4
6
|
export declare const getVideoCodec: (boxes: AnySegment[]) => KnownVideoCodecs | null;
|