@remotion/media-parser 4.0.270 → 4.0.272
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/aac-codecprivate.js +6 -13
- package/dist/add-avc-profile-to-track.js +5 -9
- package/dist/buffer-iterator.js +8 -13
- package/dist/combine-uint8-arrays.js +1 -5
- package/dist/containers/aac/parse-aac.js +9 -13
- package/dist/containers/aac/types.js +1 -2
- package/dist/containers/avc/codec-string.js +1 -5
- package/dist/containers/avc/color.js +3 -9
- package/dist/containers/avc/create-sps-pps-data.js +5 -9
- package/dist/containers/avc/interpret-sps.js +7 -13
- package/dist/containers/avc/key.js +1 -5
- package/dist/containers/avc/parse-avc.js +3 -7
- package/dist/containers/avc/sps-and-pps.js +1 -5
- package/dist/containers/flac/get-block-size.js +1 -5
- package/dist/containers/flac/get-channel-count.d.ts +1 -1
- package/dist/containers/flac/get-channel-count.js +1 -5
- package/dist/containers/flac/get-duration-from-flac.js +1 -5
- package/dist/containers/flac/get-metadata-from-flac.d.ts +1 -1
- package/dist/containers/flac/get-metadata-from-flac.js +1 -5
- package/dist/containers/flac/get-sample-rate.js +1 -5
- package/dist/containers/flac/parse-flac-frame.js +14 -19
- package/dist/containers/flac/parse-flac.js +15 -19
- package/dist/containers/flac/parse-header.js +1 -5
- package/dist/containers/flac/parse-metadata.js +1 -5
- package/dist/containers/flac/parse-streaminfo.js +3 -7
- package/dist/containers/flac/parse-unknown-block.js +1 -5
- package/dist/containers/flac/types.d.ts +2 -2
- package/dist/containers/flac/types.js +1 -2
- package/dist/containers/iso-base-media/base-media-box.js +1 -2
- package/dist/containers/iso-base-media/base-type.js +1 -2
- package/dist/containers/iso-base-media/esds/decoder-specific-config.js +1 -5
- package/dist/containers/iso-base-media/esds/esds-descriptors.js +5 -10
- package/dist/containers/iso-base-media/esds/esds.js +3 -7
- package/dist/containers/iso-base-media/ftyp.js +1 -5
- package/dist/containers/iso-base-media/get-actual-number-of-channels.js +4 -8
- package/dist/containers/iso-base-media/get-children.js +3 -7
- package/dist/containers/iso-base-media/get-keyframes.js +7 -11
- package/dist/containers/iso-base-media/get-moov-atom.js +21 -15
- package/dist/containers/iso-base-media/get-sample-positions-from-track.js +20 -24
- package/dist/containers/iso-base-media/get-video-codec-from-iso-track.d.ts +1 -1
- package/dist/containers/iso-base-media/get-video-codec-from-iso-track.js +3 -7
- package/dist/containers/iso-base-media/make-track.js +30 -34
- package/dist/containers/iso-base-media/mdat/mdat.js +16 -20
- package/dist/containers/iso-base-media/mdhd.js +1 -5
- package/dist/containers/iso-base-media/meta/hdlr.js +1 -5
- package/dist/containers/iso-base-media/meta/ilst.js +1 -5
- package/dist/containers/iso-base-media/moov/moov.js +3 -7
- package/dist/containers/iso-base-media/mvhd.js +7 -11
- package/dist/containers/iso-base-media/parse-boxes.js +5 -9
- package/dist/containers/iso-base-media/parse-icc-profile.js +4 -8
- package/dist/containers/iso-base-media/process-box.js +63 -67
- package/dist/containers/iso-base-media/stsd/av1c.js +1 -5
- package/dist/containers/iso-base-media/stsd/avcc.js +1 -5
- package/dist/containers/iso-base-media/stsd/colr.js +3 -7
- package/dist/containers/iso-base-media/stsd/ctts.js +1 -5
- package/dist/containers/iso-base-media/stsd/hvcc.js +3 -7
- package/dist/containers/iso-base-media/stsd/keys.js +1 -5
- package/dist/containers/iso-base-media/stsd/mebx.js +3 -7
- package/dist/containers/iso-base-media/stsd/pasp.js +1 -5
- package/dist/containers/iso-base-media/stsd/samples.js +8 -13
- package/dist/containers/iso-base-media/stsd/stco.js +1 -5
- package/dist/containers/iso-base-media/stsd/stsc.js +1 -5
- package/dist/containers/iso-base-media/stsd/stsd.js +3 -7
- package/dist/containers/iso-base-media/stsd/stss.js +1 -5
- package/dist/containers/iso-base-media/stsd/stsz.js +1 -5
- package/dist/containers/iso-base-media/stsd/stts.js +1 -5
- package/dist/containers/iso-base-media/tfdt.js +1 -5
- package/dist/containers/iso-base-media/tfhd.js +1 -5
- package/dist/containers/iso-base-media/tkhd.js +4 -8
- package/dist/containers/iso-base-media/to-date.js +1 -5
- package/dist/containers/iso-base-media/trak/trak.js +3 -7
- package/dist/containers/iso-base-media/traversal.d.ts +3 -2
- package/dist/containers/iso-base-media/traversal.js +42 -57
- package/dist/containers/iso-base-media/trun.js +2 -6
- package/dist/containers/iso-base-media/void-box.js +1 -2
- package/dist/containers/m3u/after-manifest-fetch.d.ts +5 -3
- package/dist/containers/m3u/after-manifest-fetch.js +13 -17
- package/dist/containers/m3u/fetch-m3u8-stream.d.ts +5 -1
- package/dist/containers/m3u/fetch-m3u8-stream.js +4 -12
- package/dist/containers/m3u/get-chunks.d.ts +1 -0
- package/dist/containers/m3u/get-chunks.js +6 -6
- package/dist/containers/m3u/get-duration-from-m3u.js +4 -8
- package/dist/containers/m3u/get-playlist.js +6 -12
- package/dist/containers/m3u/get-streams.d.ts +11 -5
- package/dist/containers/m3u/get-streams.js +5 -15
- package/dist/containers/m3u/iterate-over-segment-files.d.ts +19 -0
- package/dist/containers/m3u/iterate-over-segment-files.js +110 -0
- package/dist/containers/m3u/parse-directive.js +24 -10
- package/dist/containers/m3u/parse-m3u-manifest.js +3 -7
- package/dist/containers/m3u/parse-m3u-media-directive.d.ts +1 -0
- package/dist/containers/m3u/parse-m3u-media-directive.js +7 -7
- package/dist/containers/m3u/parse-m3u.js +13 -13
- package/dist/containers/m3u/parse-m3u8-text.js +3 -7
- package/dist/containers/m3u/parse-stream-inf.js +2 -7
- package/dist/containers/m3u/return-packets.d.ts +1 -1
- package/dist/containers/m3u/return-packets.js +14 -5
- package/dist/containers/m3u/run-over-m3u.js +68 -57
- package/dist/containers/m3u/sample-sorter.d.ts +2 -0
- package/dist/containers/m3u/sample-sorter.js +17 -9
- package/dist/containers/m3u/select-stream.d.ts +3 -2
- package/dist/containers/m3u/select-stream.js +9 -13
- package/dist/containers/m3u/types.d.ts +9 -2
- package/dist/containers/m3u/types.js +1 -2
- package/dist/containers/mp3/get-duration.js +5 -9
- package/dist/containers/mp3/get-frame-length.js +2 -7
- package/dist/containers/mp3/get-metadata-from-mp3.d.ts +2 -2
- package/dist/containers/mp3/get-metadata-from-mp3.js +1 -5
- package/dist/containers/mp3/id3-v1.js +1 -5
- package/dist/containers/mp3/id3.js +1 -5
- package/dist/containers/mp3/parse-mp3.js +7 -11
- package/dist/containers/mp3/parse-mpeg-header.js +10 -14
- package/dist/containers/mp3/samples-per-mpeg-file.js +1 -5
- package/dist/containers/riff/expect-riff-box.js +11 -15
- package/dist/containers/riff/get-duration.js +7 -12
- package/dist/containers/riff/get-tracks-from-avi.js +20 -28
- package/dist/containers/riff/is-movi.js +1 -5
- package/dist/containers/riff/parse-avih.js +1 -5
- package/dist/containers/riff/parse-isft.js +1 -5
- package/dist/containers/riff/parse-list-box.js +3 -7
- package/dist/containers/riff/parse-movi.js +13 -18
- package/dist/containers/riff/parse-riff-body.js +9 -13
- package/dist/containers/riff/parse-riff-box.js +9 -13
- package/dist/containers/riff/parse-riff-header.js +1 -5
- package/dist/containers/riff/parse-riff.js +5 -9
- package/dist/containers/riff/parse-strf.js +1 -5
- package/dist/containers/riff/parse-strh.js +3 -7
- package/dist/containers/riff/parse-video-section.js +7 -11
- package/dist/containers/riff/riff-box.js +1 -2
- package/dist/containers/riff/timescale.js +1 -4
- package/dist/containers/riff/traversal.js +7 -15
- package/dist/containers/transport-stream/adts-header.js +6 -10
- package/dist/containers/transport-stream/boxes.js +1 -2
- package/dist/containers/transport-stream/discard-rest-of-packet.js +2 -7
- package/dist/containers/transport-stream/find-separator.js +1 -4
- package/dist/containers/transport-stream/get-tracks.d.ts +2 -0
- package/dist/containers/transport-stream/get-tracks.js +13 -14
- package/dist/containers/transport-stream/handle-aac-packet.js +12 -16
- package/dist/containers/transport-stream/handle-avc-packet.js +22 -26
- package/dist/containers/transport-stream/next-pes-header-store.js +1 -5
- package/dist/containers/transport-stream/parse-packet.js +13 -17
- package/dist/containers/transport-stream/parse-pat.js +5 -10
- package/dist/containers/transport-stream/parse-pes.js +1 -5
- package/dist/containers/transport-stream/parse-pmt.js +8 -12
- package/dist/containers/transport-stream/parse-stream-packet.js +13 -17
- package/dist/containers/transport-stream/parse-transport-stream.js +5 -9
- package/dist/containers/transport-stream/process-stream-buffers.js +12 -16
- package/dist/containers/transport-stream/traversal.js +4 -10
- package/dist/containers/wav/get-duration-from-wav.js +3 -8
- package/dist/containers/wav/get-metadata-from-wav.d.ts +2 -2
- package/dist/containers/wav/get-metadata-from-wav.js +1 -5
- package/dist/containers/wav/parse-data.js +5 -9
- package/dist/containers/wav/parse-fmt.js +3 -7
- package/dist/containers/wav/parse-header.js +1 -5
- package/dist/containers/wav/parse-id3.js +1 -5
- package/dist/containers/wav/parse-list.js +1 -5
- package/dist/containers/wav/parse-video-section.js +3 -7
- package/dist/containers/wav/parse-wav.js +15 -19
- package/dist/containers/wav/types.d.ts +2 -2
- package/dist/containers/wav/types.js +1 -2
- package/dist/containers/webm/allowed-partial-segments.js +1 -4
- package/dist/containers/webm/av1-codec-private.js +3 -7
- package/dist/containers/webm/color.js +6 -10
- package/dist/containers/webm/description.js +6 -10
- package/dist/containers/webm/get-ready-tracks.js +13 -18
- package/dist/containers/webm/get-sample-from-block.js +12 -16
- package/dist/containers/webm/make-track.js +43 -48
- package/dist/containers/webm/parse-ebml.js +14 -19
- package/dist/containers/webm/parse-webm-header.js +3 -7
- package/dist/containers/webm/segments/all-segments.js +168 -173
- package/dist/containers/webm/segments/block-simple-block-flags.js +4 -8
- package/dist/containers/webm/segments/track-entry.js +1 -5
- package/dist/containers/webm/segments.js +9 -13
- package/dist/containers/webm/traversal.js +37 -67
- package/dist/convert-audio-or-video-sample.js +1 -5
- package/dist/download-and-parse-media.js +44 -47
- package/dist/emit-available-info.js +38 -38
- package/dist/emitter.js +1 -5
- package/dist/errors.d.ts +2 -17
- package/dist/errors.js +10 -30
- package/dist/esm/fetch.mjs +93 -67
- package/dist/esm/index.mjs +742 -194
- package/dist/esm/node.mjs +59 -36
- package/dist/esm/universal.mjs +323 -0
- package/dist/esm/web-file.mjs +55 -43
- package/dist/esm/web.mjs +257 -0
- package/dist/esm/worker-server-entry.mjs +13100 -0
- package/dist/esm/worker-server.mjs +12914 -0
- package/dist/esm/worker-web-entry.mjs +13013 -0
- package/dist/esm/worker.mjs +439 -0
- package/dist/fetch.js +1 -17
- package/dist/file-types/bmp.js +3 -7
- package/dist/file-types/detect-file-type.js +24 -38
- package/dist/file-types/index.js +22 -26
- package/dist/file-types/jpeg.js +4 -9
- package/dist/file-types/pdf.js +3 -7
- package/dist/file-types/png.js +4 -9
- package/dist/file-types/webp.js +3 -7
- package/dist/forward-controller.js +1 -5
- package/dist/get-audio-codec.js +25 -38
- package/dist/get-container.d.ts +3 -3
- package/dist/get-container.js +5 -10
- package/dist/get-dimensions.js +8 -13
- package/dist/get-duration.js +27 -34
- package/dist/get-fields-from-callbacks.js +1 -5
- package/dist/get-fps.js +24 -34
- package/dist/get-is-hdr.js +5 -10
- package/dist/get-keyframes.js +6 -11
- package/dist/get-location.js +4 -9
- package/dist/get-number-of-audio-channels.js +2 -7
- package/dist/get-sample-aspect-ratio.js +17 -30
- package/dist/get-sample-positions-from-lpcm.js +5 -9
- package/dist/get-sample-positions.js +1 -5
- package/dist/get-sample-rate.js +2 -7
- package/dist/get-tracks.d.ts +5 -0
- package/dist/get-tracks.js +37 -44
- package/dist/get-video-codec.js +26 -34
- package/dist/has-all-info.js +33 -38
- package/dist/index.d.ts +18 -11
- package/dist/index.js +34 -48
- package/dist/init-video.d.ts +1 -1
- package/dist/init-video.js +47 -20
- package/dist/internal-parse-media.js +36 -40
- package/dist/is-audio-structure.d.ts +2 -2
- package/dist/is-audio-structure.js +1 -5
- package/dist/log.js +8 -12
- package/dist/make-hvc1-codec-strings.js +1 -5
- package/dist/media-parser-controller.js +7 -11
- package/dist/metadata/get-metadata.d.ts +4 -4
- package/dist/metadata/get-metadata.js +17 -22
- package/dist/metadata/metadata-from-iso.d.ts +3 -3
- package/dist/metadata/metadata-from-iso.js +12 -17
- package/dist/metadata/metadata-from-matroska.d.ts +2 -2
- package/dist/metadata/metadata-from-matroska.js +3 -7
- package/dist/metadata/metadata-from-riff.d.ts +2 -2
- package/dist/metadata/metadata-from-riff.js +3 -7
- package/dist/node-writer.js +1 -17
- package/dist/node.js +1 -17
- package/dist/options.d.ts +30 -24
- package/dist/options.js +1 -2
- package/dist/parse-media-on-browser-worker.d.ts +2 -0
- package/dist/parse-media-on-browser-worker.js +4 -0
- package/dist/parse-media-on-server-worker.d.ts +2 -0
- package/dist/parse-media-on-server-worker.js +4 -0
- package/dist/parse-media-on-web-worker.d.ts +2 -0
- package/dist/parse-media-on-web-worker.js +4 -0
- package/dist/parse-media-on-worker-entry.d.ts +2 -0
- package/dist/parse-media-on-worker-entry.js +269 -0
- package/dist/parse-media-on-worker.d.ts +2 -0
- package/dist/parse-media-on-worker.js +4 -0
- package/dist/parse-media.js +10 -13
- package/dist/parse-result.d.ts +3 -3
- package/dist/parse-result.js +1 -2
- package/dist/pause-signal.js +1 -5
- package/dist/perform-seek.js +6 -10
- package/dist/readers/fetch/get-body-and-reader.js +1 -5
- package/dist/readers/fetch/resolve-url.d.ts +1 -1
- package/dist/readers/fetch/resolve-url.js +1 -5
- package/dist/readers/from-fetch.d.ts +4 -1
- package/dist/readers/from-fetch.js +109 -94
- package/dist/readers/from-node.d.ts +4 -1
- package/dist/readers/from-node.js +58 -41
- package/dist/readers/from-web-file.d.ts +4 -1
- package/dist/readers/from-web-file.js +55 -49
- package/dist/readers/reader.d.ts +5 -1
- package/dist/readers/reader.js +1 -2
- package/dist/readers/universal.d.ts +2 -0
- package/dist/readers/universal.js +35 -0
- package/dist/readers/web.d.ts +2 -0
- package/dist/readers/web.js +22 -0
- package/dist/register-track.js +9 -15
- package/dist/remotion-license-acknowledge.js +4 -8
- package/dist/run-parse-iteration.js +26 -25
- package/dist/samples-from-moof.js +8 -12
- package/dist/skip.js +1 -5
- package/dist/state/aac-state.js +1 -5
- package/dist/state/can-skip-tracks.d.ts +2 -2
- package/dist/state/can-skip-tracks.js +3 -8
- package/dist/state/emitted-fields.js +1 -5
- package/dist/state/flac-state.js +1 -5
- package/dist/state/has-tracks-section.d.ts +2 -2
- package/dist/state/has-tracks-section.js +6 -8
- package/dist/state/images.js +1 -5
- package/dist/state/iso-base-media/cached-sample-positions.js +8 -13
- package/dist/state/iso-base-media/iso-state.js +5 -9
- package/dist/state/iso-base-media/moov-box.js +1 -5
- package/dist/state/keyframes.js +1 -5
- package/dist/state/last-eventloop-break.js +3 -7
- package/dist/state/m3u-state.d.ts +6 -0
- package/dist/state/m3u-state.js +20 -12
- package/dist/state/may-skip-video-data.js +3 -7
- package/dist/state/mp3.js +1 -5
- package/dist/state/need-samples-for-fields.js +1 -5
- package/dist/state/parser-state.d.ts +15 -10
- package/dist/state/parser-state.js +37 -41
- package/dist/state/riff.js +1 -5
- package/dist/state/sample-callbacks.d.ts +3 -2
- package/dist/state/sample-callbacks.js +8 -12
- package/dist/state/slow-duration-fps.js +1 -5
- package/dist/state/structure.d.ts +4 -4
- package/dist/state/structure.js +1 -5
- package/dist/state/transport-stream.js +3 -7
- package/dist/state/video-section.js +1 -5
- package/dist/state/webm.js +5 -9
- package/dist/throttled-progress.js +1 -5
- package/dist/truthy.js +1 -4
- package/dist/universal.d.ts +1 -0
- package/dist/universal.js +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -4
- package/dist/web-file.js +1 -17
- package/dist/web.d.ts +1 -0
- package/dist/web.js +1 -0
- package/dist/webcodec-sample-types.d.ts +6 -4
- package/dist/webcodec-sample-types.js +1 -2
- package/dist/worker/forward-controller.d.ts +3 -0
- package/dist/worker/forward-controller.js +20 -0
- package/dist/worker/serialize-error.d.ts +4 -0
- package/dist/worker/serialize-error.js +95 -0
- package/dist/worker/worker-types.d.ts +243 -0
- package/dist/worker/worker-types.js +1 -0
- package/dist/worker-bun-entry.d.ts +1 -0
- package/dist/worker-bun-entry.js +5 -0
- package/dist/worker-entry.d.ts +1 -0
- package/dist/worker-entry.js +5 -0
- package/dist/worker-server-entry.d.ts +1 -0
- package/dist/worker-server-entry.js +5 -0
- package/dist/worker-server.d.ts +2 -0
- package/dist/worker-server.js +381 -0
- package/dist/worker-web-entry.d.ts +1 -0
- package/dist/worker-web-entry.js +5 -0
- package/dist/worker.d.ts +2 -0
- package/dist/worker.js +267 -0
- package/dist/writers/node.js +16 -23
- package/dist/writers/writer.js +1 -2
- package/package.json +40 -21
- package/fetch.js +0 -2
- package/test.json +0 -663
- package/web-file.js +0 -2
package/dist/file-types/jpeg.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.isJpeg = void 0;
|
|
4
|
-
exports.getJpegDimensions = getJpegDimensions;
|
|
5
|
-
const detect_file_type_1 = require("./detect-file-type");
|
|
6
|
-
function getJpegDimensions(data) {
|
|
1
|
+
import { matchesPattern } from './detect-file-type';
|
|
2
|
+
export function getJpegDimensions(data) {
|
|
7
3
|
let offset = 0;
|
|
8
4
|
// Helper function to read a 16-bit big-endian integer
|
|
9
5
|
function readUint16BE(o) {
|
|
@@ -32,13 +28,12 @@ function getJpegDimensions(data) {
|
|
|
32
28
|
}
|
|
33
29
|
return null; // Return null if dimensions are not found
|
|
34
30
|
}
|
|
35
|
-
const isJpeg = (data) => {
|
|
31
|
+
export const isJpeg = (data) => {
|
|
36
32
|
const jpegPattern = new Uint8Array([0xff, 0xd8]);
|
|
37
|
-
const jpeg =
|
|
33
|
+
const jpeg = matchesPattern(jpegPattern)(data.subarray(0, 2));
|
|
38
34
|
if (!jpeg) {
|
|
39
35
|
return null;
|
|
40
36
|
}
|
|
41
37
|
const dim = getJpegDimensions(data);
|
|
42
38
|
return { dimensions: dim, type: 'jpeg' };
|
|
43
39
|
};
|
|
44
|
-
exports.isJpeg = isJpeg;
|
package/dist/file-types/pdf.js
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.isPdf = void 0;
|
|
4
|
-
const detect_file_type_1 = require("./detect-file-type");
|
|
5
|
-
const isPdf = (data) => {
|
|
1
|
+
import { matchesPattern } from './detect-file-type';
|
|
2
|
+
export const isPdf = (data) => {
|
|
6
3
|
if (data.length < 4) {
|
|
7
4
|
return null;
|
|
8
5
|
}
|
|
9
6
|
const pdfPattern = new Uint8Array([0x25, 0x50, 0x44, 0x46]);
|
|
10
|
-
return
|
|
7
|
+
return matchesPattern(pdfPattern)(data.subarray(0, 4)) ? { type: 'pdf' } : null;
|
|
11
8
|
};
|
|
12
|
-
exports.isPdf = isPdf;
|
package/dist/file-types/png.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.isPng = void 0;
|
|
4
|
-
exports.getPngDimensions = getPngDimensions;
|
|
5
|
-
const detect_file_type_1 = require("./detect-file-type");
|
|
6
|
-
function getPngDimensions(pngData) {
|
|
1
|
+
import { matchesPattern } from './detect-file-type';
|
|
2
|
+
export function getPngDimensions(pngData) {
|
|
7
3
|
if (pngData.length < 24) {
|
|
8
4
|
// PNG header (8) + IHDR chunk (16) minimum
|
|
9
5
|
return null;
|
|
@@ -21,12 +17,11 @@ function getPngDimensions(pngData) {
|
|
|
21
17
|
height: view.getUint32(20, false), // false = big-endian
|
|
22
18
|
};
|
|
23
19
|
}
|
|
24
|
-
const isPng = (data) => {
|
|
20
|
+
export const isPng = (data) => {
|
|
25
21
|
const pngPattern = new Uint8Array([0x89, 0x50, 0x4e, 0x47]);
|
|
26
|
-
if (
|
|
22
|
+
if (matchesPattern(pngPattern)(data.subarray(0, 4))) {
|
|
27
23
|
const png = getPngDimensions(data);
|
|
28
24
|
return { dimensions: png, type: 'png' };
|
|
29
25
|
}
|
|
30
26
|
return null;
|
|
31
27
|
};
|
|
32
|
-
exports.isPng = isPng;
|
package/dist/file-types/webp.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isWebp = void 0;
|
|
4
|
-
const detect_file_type_1 = require("./detect-file-type");
|
|
1
|
+
import { matchesPattern } from './detect-file-type';
|
|
5
2
|
function getWebPDimensions(bytes) {
|
|
6
3
|
// Check if we have enough bytes for a basic WebP header
|
|
7
4
|
if (bytes.length < 30) {
|
|
@@ -56,9 +53,9 @@ function getWebPDimensions(bytes) {
|
|
|
56
53
|
}
|
|
57
54
|
return null;
|
|
58
55
|
}
|
|
59
|
-
const isWebp = (data) => {
|
|
56
|
+
export const isWebp = (data) => {
|
|
60
57
|
const webpPattern = new Uint8Array([0x52, 0x49, 0x46, 0x46]);
|
|
61
|
-
if (
|
|
58
|
+
if (matchesPattern(webpPattern)(data.subarray(0, 4))) {
|
|
62
59
|
return {
|
|
63
60
|
type: 'webp',
|
|
64
61
|
dimensions: getWebPDimensions(data),
|
|
@@ -66,4 +63,3 @@ const isWebp = (data) => {
|
|
|
66
63
|
}
|
|
67
64
|
return null;
|
|
68
65
|
};
|
|
69
|
-
exports.isWebp = isWebp;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.forwardMediaParserController = void 0;
|
|
4
|
-
const forwardMediaParserController = ({ parentController, childController, }) => {
|
|
1
|
+
export const forwardMediaParserController = ({ parentController, childController, }) => {
|
|
5
2
|
const onAbort = ({ detail }) => {
|
|
6
3
|
childController.abort(detail.reason);
|
|
7
4
|
};
|
|
@@ -22,4 +19,3 @@ const forwardMediaParserController = ({ parentController, childController, }) =>
|
|
|
22
19
|
},
|
|
23
20
|
};
|
|
24
21
|
};
|
|
25
|
-
exports.forwardMediaParserController = forwardMediaParserController;
|
package/dist/get-audio-codec.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const get_tracks_1 = require("./get-tracks");
|
|
7
|
-
const getAudioCodec = (parserState) => {
|
|
8
|
-
const tracks = (0, get_tracks_1.getTracks)(parserState);
|
|
1
|
+
import { getStsdBox, getTraks } from './containers/iso-base-media/traversal';
|
|
2
|
+
import { trakBoxContainsAudio } from './get-fps';
|
|
3
|
+
import { getHasTracks, getTracks, } from './get-tracks';
|
|
4
|
+
export const getAudioCodec = (parserState) => {
|
|
5
|
+
const tracks = getTracks(parserState);
|
|
9
6
|
const allTracks = tracks.audioTracks.length +
|
|
10
7
|
tracks.otherTracks.length +
|
|
11
8
|
tracks.videoTracks.length;
|
|
@@ -21,11 +18,9 @@ const getAudioCodec = (parserState) => {
|
|
|
21
18
|
}
|
|
22
19
|
return null;
|
|
23
20
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return (0, get_tracks_1.getHasTracks)(state);
|
|
21
|
+
export const hasAudioCodec = (state) => {
|
|
22
|
+
return getHasTracks(state);
|
|
27
23
|
};
|
|
28
|
-
exports.hasAudioCodec = hasAudioCodec;
|
|
29
24
|
const getCodecSpecificatorFromEsdsBox = ({ child, }) => {
|
|
30
25
|
const descriptor = child.descriptors.find((d) => d.type === 'decoder-config-descriptor');
|
|
31
26
|
if (!descriptor) {
|
|
@@ -54,8 +49,8 @@ const getCodecSpecificatorFromEsdsBox = ({ child, }) => {
|
|
|
54
49
|
description: audioSpecificConfig.asBytes,
|
|
55
50
|
};
|
|
56
51
|
};
|
|
57
|
-
const getCodecPrivateFromTrak = (trakBox) => {
|
|
58
|
-
const stsdBox =
|
|
52
|
+
export const getCodecPrivateFromTrak = (trakBox) => {
|
|
53
|
+
const stsdBox = getStsdBox(trakBox);
|
|
59
54
|
if (!stsdBox) {
|
|
60
55
|
return null;
|
|
61
56
|
}
|
|
@@ -77,7 +72,6 @@ const getCodecPrivateFromTrak = (trakBox) => {
|
|
|
77
72
|
}
|
|
78
73
|
return mp4a.asBytes;
|
|
79
74
|
};
|
|
80
|
-
exports.getCodecPrivateFromTrak = getCodecPrivateFromTrak;
|
|
81
75
|
const onSample = (sample, children) => {
|
|
82
76
|
const child = children.find((c) => c.type === 'esds-box');
|
|
83
77
|
if (child && child.type === 'esds-box') {
|
|
@@ -96,8 +90,8 @@ const onSample = (sample, children) => {
|
|
|
96
90
|
description: undefined,
|
|
97
91
|
};
|
|
98
92
|
};
|
|
99
|
-
const getNumberOfChannelsFromTrak = (trak) => {
|
|
100
|
-
const stsdBox =
|
|
93
|
+
export const getNumberOfChannelsFromTrak = (trak) => {
|
|
94
|
+
const stsdBox = getStsdBox(trak);
|
|
101
95
|
if (!stsdBox) {
|
|
102
96
|
return null;
|
|
103
97
|
}
|
|
@@ -107,9 +101,8 @@ const getNumberOfChannelsFromTrak = (trak) => {
|
|
|
107
101
|
}
|
|
108
102
|
return sample.numberOfChannels;
|
|
109
103
|
};
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
const stsdBox = (0, traversal_1.getStsdBox)(trak);
|
|
104
|
+
export const getSampleRate = (trak) => {
|
|
105
|
+
const stsdBox = getStsdBox(trak);
|
|
113
106
|
if (!stsdBox) {
|
|
114
107
|
return null;
|
|
115
108
|
}
|
|
@@ -119,9 +112,8 @@ const getSampleRate = (trak) => {
|
|
|
119
112
|
}
|
|
120
113
|
return sample.sampleRate;
|
|
121
114
|
};
|
|
122
|
-
|
|
123
|
-
const
|
|
124
|
-
const stsdBox = (0, traversal_1.getStsdBox)(trak);
|
|
115
|
+
export const getAudioCodecFromTrak = (trak) => {
|
|
116
|
+
const stsdBox = getStsdBox(trak);
|
|
125
117
|
if (!stsdBox) {
|
|
126
118
|
return null;
|
|
127
119
|
}
|
|
@@ -142,23 +134,20 @@ const getAudioCodecFromTrak = (trak) => {
|
|
|
142
134
|
}
|
|
143
135
|
return null;
|
|
144
136
|
};
|
|
145
|
-
|
|
146
|
-
const isLpcmAudioCodec = (trak) => {
|
|
137
|
+
export const isLpcmAudioCodec = (trak) => {
|
|
147
138
|
var _a;
|
|
148
|
-
return ((_a =
|
|
139
|
+
return ((_a = getAudioCodecFromTrak(trak)) === null || _a === void 0 ? void 0 : _a.format) === 'lpcm';
|
|
149
140
|
};
|
|
150
|
-
|
|
151
|
-
const
|
|
152
|
-
const
|
|
153
|
-
const trakBox = traks.find((b) => b.type === 'trak-box' && (0, get_fps_1.trakBoxContainsAudio)(b));
|
|
141
|
+
export const getAudioCodecFromIso = (moov) => {
|
|
142
|
+
const traks = getTraks(moov);
|
|
143
|
+
const trakBox = traks.find((b) => b.type === 'trak-box' && trakBoxContainsAudio(b));
|
|
154
144
|
if (!trakBox) {
|
|
155
145
|
return null;
|
|
156
146
|
}
|
|
157
|
-
return
|
|
147
|
+
return getAudioCodecFromTrak(trakBox);
|
|
158
148
|
};
|
|
159
|
-
|
|
160
|
-
const
|
|
161
|
-
const codec = (0, exports.getAudioCodecFromTrak)(trak);
|
|
149
|
+
export const getAudioCodecStringFromTrak = (trak) => {
|
|
150
|
+
const codec = getAudioCodecFromTrak(trak);
|
|
162
151
|
if (!codec) {
|
|
163
152
|
throw new Error('Expected codec');
|
|
164
153
|
}
|
|
@@ -184,7 +173,6 @@ const getAudioCodecStringFromTrak = (trak) => {
|
|
|
184
173
|
description: codec.description,
|
|
185
174
|
};
|
|
186
175
|
};
|
|
187
|
-
exports.getAudioCodecStringFromTrak = getAudioCodecStringFromTrak;
|
|
188
176
|
const getAudioCodecFromAudioCodecInfo = (codec) => {
|
|
189
177
|
if (codec.format === 'twos') {
|
|
190
178
|
return 'pcm-s16';
|
|
@@ -212,11 +200,10 @@ const getAudioCodecFromAudioCodecInfo = (codec) => {
|
|
|
212
200
|
}
|
|
213
201
|
throw new Error(`Unknown audio format: ${codec.format}`);
|
|
214
202
|
};
|
|
215
|
-
const getAudioCodecFromTrack = (track) => {
|
|
216
|
-
const audioSample =
|
|
203
|
+
export const getAudioCodecFromTrack = (track) => {
|
|
204
|
+
const audioSample = getAudioCodecFromTrak(track);
|
|
217
205
|
if (!audioSample) {
|
|
218
206
|
throw new Error('Could not find audio sample');
|
|
219
207
|
}
|
|
220
208
|
return getAudioCodecFromAudioCodecInfo(audioSample);
|
|
221
209
|
};
|
|
222
|
-
exports.getAudioCodecFromTrack = getAudioCodecFromTrack;
|
package/dist/get-container.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { MediaParserContainer } from './options';
|
|
2
|
-
import type {
|
|
3
|
-
export declare const getContainer: (segments:
|
|
4
|
-
export declare const hasContainer: (boxes:
|
|
2
|
+
import type { MediaParserStructureUnstable } from './parse-result';
|
|
3
|
+
export declare const getContainer: (segments: MediaParserStructureUnstable) => MediaParserContainer;
|
|
4
|
+
export declare const hasContainer: (boxes: MediaParserStructureUnstable) => boolean;
|
package/dist/get-container.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.hasContainer = exports.getContainer = void 0;
|
|
4
|
-
const traversal_1 = require("./containers/riff/traversal");
|
|
5
|
-
const getContainer = (segments) => {
|
|
1
|
+
import { isRiffAvi } from './containers/riff/traversal';
|
|
2
|
+
export const getContainer = (segments) => {
|
|
6
3
|
if (segments.type === 'iso-base-media') {
|
|
7
4
|
return 'mp4';
|
|
8
5
|
}
|
|
@@ -22,7 +19,7 @@ const getContainer = (segments) => {
|
|
|
22
19
|
return 'flac';
|
|
23
20
|
}
|
|
24
21
|
if (segments.type === 'riff') {
|
|
25
|
-
if (
|
|
22
|
+
if (isRiffAvi(segments)) {
|
|
26
23
|
return 'avi';
|
|
27
24
|
}
|
|
28
25
|
throw new Error('Unknown RIFF container ' + segments.type);
|
|
@@ -35,13 +32,11 @@ const getContainer = (segments) => {
|
|
|
35
32
|
}
|
|
36
33
|
throw new Error('Unknown container ' + segments);
|
|
37
34
|
};
|
|
38
|
-
|
|
39
|
-
const hasContainer = (boxes) => {
|
|
35
|
+
export const hasContainer = (boxes) => {
|
|
40
36
|
try {
|
|
41
|
-
return
|
|
37
|
+
return getContainer(boxes) !== null;
|
|
42
38
|
}
|
|
43
39
|
catch (_a) {
|
|
44
40
|
return false;
|
|
45
41
|
}
|
|
46
42
|
};
|
|
47
|
-
exports.hasContainer = hasContainer;
|
package/dist/get-dimensions.js
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const get_tracks_1 = require("./get-tracks");
|
|
5
|
-
const is_audio_structure_1 = require("./is-audio-structure");
|
|
6
|
-
const getDimensions = (state) => {
|
|
1
|
+
import { getTracks } from './get-tracks';
|
|
2
|
+
import { isAudioStructure } from './is-audio-structure';
|
|
3
|
+
export const getDimensions = (state) => {
|
|
7
4
|
const structure = state.getStructureOrNull();
|
|
8
|
-
if (structure &&
|
|
5
|
+
if (structure && isAudioStructure(structure)) {
|
|
9
6
|
return null;
|
|
10
7
|
}
|
|
11
|
-
const { videoTracks } =
|
|
8
|
+
const { videoTracks } = getTracks(state);
|
|
12
9
|
if (!videoTracks.length) {
|
|
13
10
|
return null;
|
|
14
11
|
}
|
|
@@ -21,17 +18,15 @@ const getDimensions = (state) => {
|
|
|
21
18
|
unrotatedWidth: firstVideoTrack.displayAspectWidth,
|
|
22
19
|
};
|
|
23
20
|
};
|
|
24
|
-
|
|
25
|
-
const hasDimensions = (state) => {
|
|
21
|
+
export const hasDimensions = (state) => {
|
|
26
22
|
const structure = state.getStructureOrNull();
|
|
27
|
-
if (structure &&
|
|
23
|
+
if (structure && isAudioStructure(structure)) {
|
|
28
24
|
return true;
|
|
29
25
|
}
|
|
30
26
|
try {
|
|
31
|
-
return
|
|
27
|
+
return getDimensions(state) !== null;
|
|
32
28
|
}
|
|
33
29
|
catch (_a) {
|
|
34
30
|
return false;
|
|
35
31
|
}
|
|
36
32
|
};
|
|
37
|
-
exports.hasDimensions = hasDimensions;
|
package/dist/get-duration.js
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const get_duration_2 = require("./containers/riff/get-duration");
|
|
10
|
-
const get_duration_from_wav_1 = require("./containers/wav/get-duration-from-wav");
|
|
11
|
-
const get_tracks_1 = require("./get-tracks");
|
|
1
|
+
import { getDurationFromFlac } from './containers/flac/get-duration-from-flac';
|
|
2
|
+
import { getSamplePositionsFromTrack } from './containers/iso-base-media/get-sample-positions-from-track';
|
|
3
|
+
import { getMoofBoxes, getMoovBoxFromState, getMvhdBox, } from './containers/iso-base-media/traversal';
|
|
4
|
+
import { getDurationFromM3u } from './containers/m3u/get-duration-from-m3u';
|
|
5
|
+
import { getDurationFromMp3 } from './containers/mp3/get-duration';
|
|
6
|
+
import { getDurationFromAvi } from './containers/riff/get-duration';
|
|
7
|
+
import { getDurationFromWav } from './containers/wav/get-duration-from-wav';
|
|
8
|
+
import { getHasTracks, getTracks } from './get-tracks';
|
|
12
9
|
const getDurationFromMatroska = (segments) => {
|
|
13
10
|
const mainSegment = segments.find((s) => s.type === 'Segment');
|
|
14
11
|
if (!mainSegment || mainSegment.type !== 'Segment') {
|
|
@@ -33,18 +30,17 @@ const getDurationFromMatroska = (segments) => {
|
|
|
33
30
|
}
|
|
34
31
|
return (duration.value.value / timestampScale.value.value) * 1000;
|
|
35
32
|
};
|
|
36
|
-
const isMatroska = (boxes) => {
|
|
33
|
+
export const isMatroska = (boxes) => {
|
|
37
34
|
const matroskaBox = boxes.find((b) => b.type === 'Segment');
|
|
38
35
|
return matroskaBox;
|
|
39
36
|
};
|
|
40
|
-
exports.isMatroska = isMatroska;
|
|
41
37
|
const isoHasDuration = (parserState) => {
|
|
42
38
|
const structure = parserState.getIsoStructure();
|
|
43
|
-
const moovBox = (
|
|
39
|
+
const moovBox = getMoovBoxFromState(parserState);
|
|
44
40
|
if (!moovBox) {
|
|
45
41
|
return false;
|
|
46
42
|
}
|
|
47
|
-
const mvhdBox =
|
|
43
|
+
const mvhdBox = getMvhdBox(moovBox);
|
|
48
44
|
if (!mvhdBox) {
|
|
49
45
|
return false;
|
|
50
46
|
}
|
|
@@ -55,19 +51,19 @@ const isoHasDuration = (parserState) => {
|
|
|
55
51
|
return true;
|
|
56
52
|
}
|
|
57
53
|
// Checking if this is a fragmented mp4
|
|
58
|
-
const moofBoxes =
|
|
54
|
+
const moofBoxes = getMoofBoxes(structure.boxes);
|
|
59
55
|
const hasMvex = moovBox.children.some((b) => b.type === 'regular-box' && b.boxType === 'mvex');
|
|
60
56
|
const isFragmented = moofBoxes.length > 0 || hasMvex;
|
|
61
57
|
return !isFragmented;
|
|
62
58
|
};
|
|
63
59
|
const getDurationFromIsoBaseMedia = (parserState) => {
|
|
64
60
|
const structure = parserState.getIsoStructure();
|
|
65
|
-
const moovBox = (
|
|
61
|
+
const moovBox = getMoovBoxFromState(parserState);
|
|
66
62
|
if (!moovBox) {
|
|
67
63
|
return null;
|
|
68
64
|
}
|
|
69
|
-
const moofBoxes =
|
|
70
|
-
const mvhdBox =
|
|
65
|
+
const moofBoxes = getMoofBoxes(structure.boxes);
|
|
66
|
+
const mvhdBox = getMvhdBox(moovBox);
|
|
71
67
|
if (!mvhdBox) {
|
|
72
68
|
return null;
|
|
73
69
|
}
|
|
@@ -77,7 +73,7 @@ const getDurationFromIsoBaseMedia = (parserState) => {
|
|
|
77
73
|
if (mvhdBox.durationInSeconds > 0) {
|
|
78
74
|
return mvhdBox.durationInSeconds;
|
|
79
75
|
}
|
|
80
|
-
const tracks =
|
|
76
|
+
const tracks = getTracks(parserState);
|
|
81
77
|
const allTracks = [
|
|
82
78
|
...tracks.videoTracks,
|
|
83
79
|
...tracks.audioTracks,
|
|
@@ -85,7 +81,7 @@ const getDurationFromIsoBaseMedia = (parserState) => {
|
|
|
85
81
|
];
|
|
86
82
|
const allSamples = allTracks.map((t) => {
|
|
87
83
|
const { timescale: ts } = t;
|
|
88
|
-
const samplePositions =
|
|
84
|
+
const samplePositions = getSamplePositionsFromTrack({
|
|
89
85
|
trakBox: t.trakBox,
|
|
90
86
|
moofBoxes,
|
|
91
87
|
});
|
|
@@ -95,7 +91,7 @@ const getDurationFromIsoBaseMedia = (parserState) => {
|
|
|
95
91
|
const highestTimestamp = Math.max(...allSamples);
|
|
96
92
|
return highestTimestamp;
|
|
97
93
|
};
|
|
98
|
-
const getDuration = (parserState) => {
|
|
94
|
+
export const getDuration = (parserState) => {
|
|
99
95
|
const structure = parserState.getStructure();
|
|
100
96
|
if (structure.type === 'matroska') {
|
|
101
97
|
return getDurationFromMatroska(structure.boxes);
|
|
@@ -104,32 +100,31 @@ const getDuration = (parserState) => {
|
|
|
104
100
|
return getDurationFromIsoBaseMedia(parserState);
|
|
105
101
|
}
|
|
106
102
|
if (structure.type === 'riff') {
|
|
107
|
-
return
|
|
103
|
+
return getDurationFromAvi(structure);
|
|
108
104
|
}
|
|
109
105
|
if (structure.type === 'transport-stream') {
|
|
110
106
|
return null;
|
|
111
107
|
}
|
|
112
108
|
if (structure.type === 'mp3') {
|
|
113
|
-
return
|
|
109
|
+
return getDurationFromMp3(parserState);
|
|
114
110
|
}
|
|
115
111
|
if (structure.type === 'wav') {
|
|
116
|
-
return
|
|
112
|
+
return getDurationFromWav(parserState);
|
|
117
113
|
}
|
|
118
114
|
if (structure.type === 'aac') {
|
|
119
115
|
return null;
|
|
120
116
|
}
|
|
121
117
|
if (structure.type === 'flac') {
|
|
122
|
-
return
|
|
118
|
+
return getDurationFromFlac(parserState);
|
|
123
119
|
}
|
|
124
120
|
if (structure.type === 'm3u') {
|
|
125
|
-
return
|
|
121
|
+
return getDurationFromM3u(parserState);
|
|
126
122
|
}
|
|
127
123
|
throw new Error('Has no duration ' + structure);
|
|
128
124
|
};
|
|
129
|
-
exports.getDuration = getDuration;
|
|
130
125
|
// `duration` just grabs from metadata, and otherwise returns null
|
|
131
126
|
// Therefore just checking if we have tracks
|
|
132
|
-
const hasDuration = (parserState) => {
|
|
127
|
+
export const hasDuration = (parserState) => {
|
|
133
128
|
const structure = parserState.getStructureOrNull();
|
|
134
129
|
if (structure === null) {
|
|
135
130
|
return false;
|
|
@@ -137,17 +132,15 @@ const hasDuration = (parserState) => {
|
|
|
137
132
|
if (structure.type === 'iso-base-media') {
|
|
138
133
|
return isoHasDuration(parserState);
|
|
139
134
|
}
|
|
140
|
-
return
|
|
135
|
+
return getHasTracks(parserState);
|
|
141
136
|
};
|
|
142
|
-
exports.hasDuration = hasDuration;
|
|
143
137
|
// `slowDuration` goes through everything, and therefore is false
|
|
144
138
|
// Unless it it somewhere in the metadata and is non-null
|
|
145
|
-
const hasSlowDuration = (parserState) => {
|
|
139
|
+
export const hasSlowDuration = (parserState) => {
|
|
146
140
|
try {
|
|
147
|
-
return
|
|
141
|
+
return hasDuration(parserState) && getDuration(parserState) !== null;
|
|
148
142
|
}
|
|
149
143
|
catch (_a) {
|
|
150
144
|
return false;
|
|
151
145
|
}
|
|
152
146
|
};
|
|
153
|
-
exports.hasSlowDuration = hasSlowDuration;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getFieldsFromCallback = void 0;
|
|
4
|
-
const getFieldsFromCallback = ({ fields, callbacks, }) => {
|
|
1
|
+
export const getFieldsFromCallback = ({ fields, callbacks, }) => {
|
|
5
2
|
const newFields = {
|
|
6
3
|
audioCodec: Boolean(callbacks.onAudioCodec),
|
|
7
4
|
container: Boolean(callbacks.onContainer),
|
|
@@ -35,4 +32,3 @@ const getFieldsFromCallback = ({ fields, callbacks, }) => {
|
|
|
35
32
|
};
|
|
36
33
|
return newFields;
|
|
37
34
|
};
|
|
38
|
-
exports.getFieldsFromCallback = getFieldsFromCallback;
|
package/dist/get-fps.js
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const traversal_1 = require("./containers/iso-base-media/traversal");
|
|
5
|
-
const traversal_2 = require("./containers/riff/traversal");
|
|
6
|
-
const is_audio_structure_1 = require("./is-audio-structure");
|
|
1
|
+
import { getMdhdBox, getMoovBoxFromState, getStsdBox, getSttsBox, getTraks, } from './containers/iso-base-media/traversal';
|
|
2
|
+
import { getStrhBox, getStrlBoxes } from './containers/riff/traversal';
|
|
3
|
+
import { isAudioStructure } from './is-audio-structure';
|
|
7
4
|
const calculateFps = ({ sttsBox, timeScale, durationInSamples, }) => {
|
|
8
5
|
let totalSamples = 0;
|
|
9
6
|
for (const sample of sttsBox.sampleDistribution) {
|
|
@@ -16,8 +13,8 @@ const calculateFps = ({ sttsBox, timeScale, durationInSamples, }) => {
|
|
|
16
13
|
const fps = totalSamples / durationInSeconds;
|
|
17
14
|
return fps;
|
|
18
15
|
};
|
|
19
|
-
const trakBoxContainsAudio = (trakBox) => {
|
|
20
|
-
const stsd =
|
|
16
|
+
export const trakBoxContainsAudio = (trakBox) => {
|
|
17
|
+
const stsd = getStsdBox(trakBox);
|
|
21
18
|
if (!stsd) {
|
|
22
19
|
return false;
|
|
23
20
|
}
|
|
@@ -27,9 +24,8 @@ const trakBoxContainsAudio = (trakBox) => {
|
|
|
27
24
|
}
|
|
28
25
|
return true;
|
|
29
26
|
};
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
const stsd = (0, traversal_1.getStsdBox)(trakBox);
|
|
27
|
+
export const trakBoxContainsVideo = (trakBox) => {
|
|
28
|
+
const stsd = getStsdBox(trakBox);
|
|
33
29
|
if (!stsd) {
|
|
34
30
|
return false;
|
|
35
31
|
}
|
|
@@ -39,21 +35,19 @@ const trakBoxContainsVideo = (trakBox) => {
|
|
|
39
35
|
}
|
|
40
36
|
return true;
|
|
41
37
|
};
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
const mdhdBox = (0, traversal_1.getMdhdBox)(trakBox);
|
|
38
|
+
export const getTimescaleAndDuration = (trakBox) => {
|
|
39
|
+
const mdhdBox = getMdhdBox(trakBox);
|
|
45
40
|
if (mdhdBox) {
|
|
46
41
|
return { timescale: mdhdBox.timescale, duration: mdhdBox.duration };
|
|
47
42
|
}
|
|
48
43
|
return null;
|
|
49
44
|
};
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
const timescaleAndDuration = (0, exports.getTimescaleAndDuration)(trakBox);
|
|
45
|
+
export const getFpsFromMp4TrakBox = (trakBox) => {
|
|
46
|
+
const timescaleAndDuration = getTimescaleAndDuration(trakBox);
|
|
53
47
|
if (!timescaleAndDuration) {
|
|
54
48
|
return null;
|
|
55
49
|
}
|
|
56
|
-
const sttsBox =
|
|
50
|
+
const sttsBox = getSttsBox(trakBox);
|
|
57
51
|
if (!sttsBox) {
|
|
58
52
|
return null;
|
|
59
53
|
}
|
|
@@ -63,23 +57,22 @@ const getFpsFromMp4TrakBox = (trakBox) => {
|
|
|
63
57
|
durationInSamples: timescaleAndDuration.duration,
|
|
64
58
|
});
|
|
65
59
|
};
|
|
66
|
-
exports.getFpsFromMp4TrakBox = getFpsFromMp4TrakBox;
|
|
67
60
|
const getFpsFromIsoMaseMedia = (state) => {
|
|
68
|
-
const moovBox = (
|
|
61
|
+
const moovBox = getMoovBoxFromState(state);
|
|
69
62
|
if (!moovBox) {
|
|
70
63
|
return null;
|
|
71
64
|
}
|
|
72
|
-
const trackBoxes =
|
|
73
|
-
const trackBox = trackBoxes.find(
|
|
65
|
+
const trackBoxes = getTraks(moovBox);
|
|
66
|
+
const trackBox = trackBoxes.find(trakBoxContainsVideo);
|
|
74
67
|
if (!trackBox) {
|
|
75
68
|
return null;
|
|
76
69
|
}
|
|
77
|
-
return
|
|
70
|
+
return getFpsFromMp4TrakBox(trackBox);
|
|
78
71
|
};
|
|
79
72
|
const getFpsFromAvi = (structure) => {
|
|
80
|
-
const strl =
|
|
73
|
+
const strl = getStrlBoxes(structure);
|
|
81
74
|
for (const s of strl) {
|
|
82
|
-
const strh =
|
|
75
|
+
const strh = getStrhBox(s.children);
|
|
83
76
|
if (!strh) {
|
|
84
77
|
throw new Error('No strh box');
|
|
85
78
|
}
|
|
@@ -90,7 +83,7 @@ const getFpsFromAvi = (structure) => {
|
|
|
90
83
|
}
|
|
91
84
|
return null;
|
|
92
85
|
};
|
|
93
|
-
const getFps = (state) => {
|
|
86
|
+
export const getFps = (state) => {
|
|
94
87
|
const segments = state.getStructure();
|
|
95
88
|
if (segments.type === 'iso-base-media') {
|
|
96
89
|
return getFpsFromIsoMaseMedia(state);
|
|
@@ -118,23 +111,21 @@ const getFps = (state) => {
|
|
|
118
111
|
}
|
|
119
112
|
throw new Error('Cannot get fps, not implemented: ' + segments);
|
|
120
113
|
};
|
|
121
|
-
|
|
122
|
-
const hasFpsSuitedForSlowFps = (state) => {
|
|
114
|
+
export const hasFpsSuitedForSlowFps = (state) => {
|
|
123
115
|
try {
|
|
124
|
-
return
|
|
116
|
+
return getFps(state) !== null;
|
|
125
117
|
}
|
|
126
118
|
catch (_a) {
|
|
127
119
|
return false;
|
|
128
120
|
}
|
|
129
121
|
};
|
|
130
|
-
|
|
131
|
-
const hasFps = (state) => {
|
|
122
|
+
export const hasFps = (state) => {
|
|
132
123
|
// Matroska and Transport stream has no FPS metadata
|
|
133
124
|
// Not bothering to parse
|
|
134
125
|
// Users should use `slowFps` field
|
|
135
126
|
// same goes for audio
|
|
136
127
|
const structure = state.getStructure();
|
|
137
|
-
if (
|
|
128
|
+
if (isAudioStructure(structure)) {
|
|
138
129
|
return true;
|
|
139
130
|
}
|
|
140
131
|
if (structure.type === 'matroska') {
|
|
@@ -146,6 +137,5 @@ const hasFps = (state) => {
|
|
|
146
137
|
if (structure.type === 'm3u') {
|
|
147
138
|
return true;
|
|
148
139
|
}
|
|
149
|
-
return
|
|
140
|
+
return hasFpsSuitedForSlowFps(state);
|
|
150
141
|
};
|
|
151
|
-
exports.hasFps = hasFps;
|