@remotion/media-parser 4.0.248 → 4.0.250
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/boxes/avc/key.d.ts +1 -1
- package/dist/boxes/iso-base-media/continue-mdat-routine.d.ts +14 -0
- package/dist/boxes/iso-base-media/continue-mdat-routine.js +74 -0
- package/dist/boxes/iso-base-media/get-children.d.ts +8 -0
- package/dist/boxes/iso-base-media/get-children.js +23 -0
- package/dist/boxes/iso-base-media/mdat/mdat.d.ts +3 -22
- package/dist/boxes/iso-base-media/mdat/mdat.js +80 -121
- package/dist/boxes/iso-base-media/moov/moov.d.ts +1 -6
- package/dist/boxes/iso-base-media/moov/moov.js +5 -15
- package/dist/boxes/iso-base-media/parse-all-children.d.ts +8 -0
- package/dist/boxes/iso-base-media/parse-all-children.js +20 -0
- package/dist/boxes/iso-base-media/parse-boxes.d.ts +7 -0
- package/dist/boxes/iso-base-media/parse-boxes.js +46 -0
- package/dist/boxes/iso-base-media/parse-mdat-partially.d.ts +9 -0
- package/dist/boxes/iso-base-media/parse-mdat-partially.js +24 -0
- package/dist/boxes/iso-base-media/process-box.d.ts +2 -29
- package/dist/boxes/iso-base-media/process-box.js +56 -367
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +1 -4
- package/dist/boxes/iso-base-media/stsd/mebx.js +5 -15
- package/dist/boxes/iso-base-media/stsd/samples.d.ts +4 -12
- package/dist/boxes/iso-base-media/stsd/samples.js +24 -70
- package/dist/boxes/iso-base-media/stsd/stsd.d.ts +1 -4
- package/dist/boxes/iso-base-media/stsd/stsd.js +2 -5
- package/dist/boxes/iso-base-media/trak/trak.d.ts +1 -6
- package/dist/boxes/iso-base-media/trak/trak.js +5 -15
- package/dist/boxes/iso-base-media/traversal.d.ts +0 -2
- package/dist/boxes/iso-base-media/traversal.js +1 -12
- package/dist/boxes/mp3/get-duration.d.ts +2 -0
- package/dist/boxes/mp3/get-duration.js +30 -0
- package/dist/boxes/mp3/get-frame-length.d.ts +13 -0
- package/dist/boxes/mp3/get-frame-length.js +33 -0
- package/dist/boxes/mp3/get-metadata-from-mp3.d.ts +3 -0
- package/dist/boxes/mp3/get-metadata-from-mp3.js +8 -0
- package/dist/boxes/mp3/get-tracks-from-mp3.d.ts +4 -0
- package/dist/boxes/mp3/get-tracks-from-mp3.js +25 -0
- package/dist/boxes/mp3/id3-v1.d.ts +2 -0
- package/dist/boxes/mp3/id3-v1.js +12 -0
- package/dist/boxes/mp3/id3-v2.d.ts +0 -0
- package/dist/boxes/mp3/id3-v2.js +1 -0
- package/dist/boxes/mp3/id3.d.ts +6 -0
- package/dist/boxes/mp3/id3.js +80 -0
- package/dist/boxes/mp3/parse-mp3.d.ts +7 -0
- package/dist/boxes/mp3/parse-mp3.js +41 -0
- package/dist/boxes/mp3/parse-mpeg-header.d.ts +6 -0
- package/dist/boxes/mp3/parse-mpeg-header.js +274 -0
- package/dist/boxes/mp3/samples-per-mpeg-file.d.ts +4 -0
- package/dist/boxes/mp3/samples-per-mpeg-file.js +26 -0
- package/dist/boxes/riff/continue-after-riff-result.d.ts +13 -0
- package/dist/boxes/riff/continue-after-riff-result.js +34 -0
- package/dist/boxes/riff/expect-riff-box.d.ts +1 -7
- package/dist/boxes/riff/expect-riff-box.js +47 -24
- package/dist/boxes/riff/get-tracks-from-avi.d.ts +1 -1
- package/dist/boxes/riff/get-tracks-from-avi.js +6 -10
- package/dist/boxes/riff/parse-box.d.ts +1 -7
- package/dist/boxes/riff/parse-box.js +4 -120
- package/dist/boxes/riff/parse-fmt-box.d.ts +3 -2
- package/dist/boxes/riff/parse-fmt-box.js +7 -5
- package/dist/boxes/riff/parse-list-box.js +15 -14
- package/dist/boxes/riff/parse-movi.d.ts +2 -5
- package/dist/boxes/riff/parse-movi.js +34 -56
- package/dist/boxes/riff/parse-riff-body.d.ts +7 -0
- package/dist/boxes/riff/parse-riff-body.js +25 -0
- package/dist/boxes/riff/parse-riff-box.d.ts +1 -2
- package/dist/boxes/riff/parse-riff-box.js +2 -6
- package/dist/boxes/riff/parse-riff-header.d.ts +7 -0
- package/dist/boxes/riff/parse-riff-header.js +23 -0
- package/dist/boxes/riff/parse-riff.d.ts +7 -0
- package/dist/boxes/riff/parse-riff.js +15 -0
- package/dist/boxes/riff/parse-strf.d.ts +4 -4
- package/dist/boxes/riff/parse-strf.js +4 -8
- package/dist/boxes/riff/parse-strh.js +11 -0
- package/dist/boxes/riff/parse-video-section.d.ts +6 -0
- package/dist/boxes/riff/parse-video-section.js +20 -0
- package/dist/boxes/riff/riff-box.d.ts +4 -5
- package/dist/boxes/riff/traversal.d.ts +1 -2
- package/dist/boxes/riff/traversal.js +1 -6
- package/dist/boxes/transport-stream/get-tracks.d.ts +2 -3
- package/dist/boxes/transport-stream/get-tracks.js +4 -3
- package/dist/boxes/transport-stream/parse-packet.d.ts +1 -7
- package/dist/boxes/transport-stream/parse-packet.js +3 -4
- package/dist/boxes/transport-stream/parse-stream-packet.d.ts +1 -5
- package/dist/boxes/transport-stream/parse-stream-packet.js +10 -12
- package/dist/boxes/transport-stream/parse-transport-stream.d.ts +1 -7
- package/dist/boxes/transport-stream/parse-transport-stream.js +19 -49
- package/dist/boxes/transport-stream/process-stream-buffers.d.ts +1 -2
- package/dist/boxes/transport-stream/process-stream-buffers.js +3 -3
- package/dist/boxes/webm/parse-ebml.js +3 -0
- package/dist/boxes/webm/parse-webm-header.d.ts +2 -4
- package/dist/boxes/webm/parse-webm-header.js +41 -25
- package/dist/boxes/webm/segments/parse-children.d.ts +2 -16
- package/dist/boxes/webm/segments/parse-children.js +7 -130
- package/dist/boxes/webm/segments.d.ts +4 -8
- package/dist/boxes/webm/segments.js +41 -123
- package/dist/buffer-iterator.d.ts +6 -3
- package/dist/buffer-iterator.js +27 -16
- package/dist/bun-reader.d.ts +1 -0
- package/dist/bun-reader.js +17 -0
- package/dist/continue-mdat-routine.d.ts +17 -0
- package/dist/continue-mdat-routine.js +92 -0
- package/dist/emit-available-info.js +42 -28
- package/dist/esm/from-node.mjs +8 -9
- package/dist/esm/index.mjs +5133 -5085
- package/dist/file-types/detect-file-type.js +6 -2
- package/dist/get-audio-codec.d.ts +1 -1
- package/dist/get-audio-codec.js +3 -3
- package/dist/get-container.js +5 -1
- package/dist/get-dimensions.d.ts +1 -1
- package/dist/get-dimensions.js +4 -1
- package/dist/get-duration.js +6 -2
- package/dist/get-fields-from-callbacks.js +1 -0
- package/dist/get-fps.js +3 -0
- package/dist/get-is-hdr.d.ts +1 -1
- package/dist/get-is-hdr.js +3 -3
- package/dist/get-keyframes.js +1 -1
- package/dist/get-tracks.d.ts +2 -2
- package/dist/get-tracks.js +23 -15
- package/dist/get-video-codec.d.ts +1 -1
- package/dist/get-video-codec.js +3 -3
- package/dist/has-all-info.js +4 -3
- package/dist/index.d.ts +65 -21
- package/dist/index.js +1 -1
- package/dist/may-skip-video-data/may-skip-video-data.js +6 -2
- package/dist/may-skip-video-data/need-samples-for-fields.js +1 -0
- package/dist/metadata/get-metadata.d.ts +1 -0
- package/dist/metadata/get-metadata.js +16 -1
- package/dist/options.d.ts +12 -5
- package/dist/parse-media.js +88 -68
- package/dist/parse-result.d.ts +17 -19
- package/dist/parse-video.d.ts +3 -17
- package/dist/parse-video.js +52 -40
- package/dist/readers/from-node.js +7 -8
- package/dist/state/can-skip-tracks.d.ts +8 -1
- package/dist/state/can-skip-tracks.js +38 -26
- package/dist/state/emitted-fields.js +1 -0
- package/dist/state/images.d.ts +9 -0
- package/dist/state/images.js +14 -0
- package/dist/state/iso-base-media/cached-sample-positions.d.ts +15 -0
- package/dist/state/iso-base-media/cached-sample-positions.js +42 -0
- package/dist/state/iso-base-media/iso-state.d.ts +8 -0
- package/dist/state/iso-base-media/iso-state.js +15 -0
- package/dist/state/iso-state.d.ts +4 -0
- package/dist/state/iso-state.js +13 -0
- package/dist/state/mp3.d.ts +11 -0
- package/dist/state/mp3.js +13 -0
- package/dist/state/parser-state.d.ts +57 -11
- package/dist/state/parser-state.js +17 -2
- package/dist/state/sample-callbacks.d.ts +5 -1
- package/dist/state/sample-callbacks.js +8 -2
- package/dist/state/slow-duration-fps.d.ts +2 -1
- package/dist/state/slow-duration-fps.js +52 -18
- package/dist/state/transport-stream.d.ts +8 -0
- package/dist/state/transport-stream.js +11 -0
- package/dist/state/video-section.d.ts +16 -0
- package/dist/state/video-section.js +37 -0
- package/dist/state/webm.d.ts +15 -0
- package/dist/state/webm.js +32 -0
- package/dist/throttled-progress.d.ts +14 -0
- package/dist/throttled-progress.js +44 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
- package/test.json +663 -0
|
@@ -43,10 +43,14 @@ const isTransportStream = (data) => {
|
|
|
43
43
|
exports.isTransportStream = isTransportStream;
|
|
44
44
|
const isMp3 = (data) => {
|
|
45
45
|
const mpegPattern = new Uint8Array([0xff, 0xf3, 0xe4, 0x64]);
|
|
46
|
-
const
|
|
46
|
+
const id3v4Pattern = new Uint8Array([0x49, 0x44, 0x33, 4]);
|
|
47
|
+
const id3v3Pattern = new Uint8Array([0x49, 0x44, 0x33, 3]);
|
|
48
|
+
const id3v2Pattern = new Uint8Array([0x49, 0x44, 0x33, 2]);
|
|
47
49
|
const subarray = data.subarray(0, 4);
|
|
48
50
|
return ((0, exports.matchesPattern)(mpegPattern)(subarray) ||
|
|
49
|
-
(0, exports.matchesPattern)(
|
|
51
|
+
(0, exports.matchesPattern)(id3v4Pattern)(subarray) ||
|
|
52
|
+
(0, exports.matchesPattern)(id3v3Pattern)(subarray) ||
|
|
53
|
+
(0, exports.matchesPattern)(id3v2Pattern)(subarray));
|
|
50
54
|
};
|
|
51
55
|
exports.isMp3 = isMp3;
|
|
52
56
|
const isGif = (data) => {
|
|
@@ -3,7 +3,7 @@ import type { TrakBox } from './boxes/iso-base-media/trak/trak';
|
|
|
3
3
|
import { type MediaParserAudioCodec } from './get-tracks';
|
|
4
4
|
import type { Structure } from './parse-result';
|
|
5
5
|
import type { ParserState } from './state/parser-state';
|
|
6
|
-
export declare const getAudioCodec: (
|
|
6
|
+
export declare const getAudioCodec: (parserState: ParserState) => MediaParserAudioCodec | null;
|
|
7
7
|
export declare const hasAudioCodec: (boxes: Structure, state: ParserState) => boolean;
|
|
8
8
|
type AudioCodecInfo = {
|
|
9
9
|
format: string;
|
package/dist/get-audio-codec.js
CHANGED
|
@@ -4,8 +4,8 @@ exports.getAudioCodecFromTrack = exports.getAudioCodecStringFromTrak = exports.g
|
|
|
4
4
|
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
5
5
|
const get_fps_1 = require("./get-fps");
|
|
6
6
|
const get_tracks_1 = require("./get-tracks");
|
|
7
|
-
const getAudioCodec = (
|
|
8
|
-
const tracks = (0, get_tracks_1.getTracks)(
|
|
7
|
+
const getAudioCodec = (parserState) => {
|
|
8
|
+
const tracks = (0, get_tracks_1.getTracks)(parserState);
|
|
9
9
|
const allTracks = tracks.audioTracks.length +
|
|
10
10
|
tracks.otherTracks.length +
|
|
11
11
|
tracks.videoTracks.length;
|
|
@@ -23,7 +23,7 @@ const getAudioCodec = (boxes, parserState) => {
|
|
|
23
23
|
};
|
|
24
24
|
exports.getAudioCodec = getAudioCodec;
|
|
25
25
|
const hasAudioCodec = (boxes, state) => {
|
|
26
|
-
return (0, get_tracks_1.
|
|
26
|
+
return (0, get_tracks_1.getHasTracks)(boxes, state);
|
|
27
27
|
};
|
|
28
28
|
exports.hasAudioCodec = hasAudioCodec;
|
|
29
29
|
const getCodecSpecificatorFromEsdsBox = ({ child, }) => {
|
package/dist/get-container.js
CHANGED
|
@@ -12,12 +12,16 @@ const getContainer = (segments) => {
|
|
|
12
12
|
if (segments.type === 'transport-stream') {
|
|
13
13
|
return 'transport-stream';
|
|
14
14
|
}
|
|
15
|
+
if (segments.type === 'mp3') {
|
|
16
|
+
return 'mp3';
|
|
17
|
+
}
|
|
15
18
|
if (segments.type === 'riff') {
|
|
16
19
|
if ((0, traversal_1.isRiffAvi)(segments)) {
|
|
17
20
|
return 'avi';
|
|
18
21
|
}
|
|
22
|
+
throw new Error('Unknown RIFF container ' + segments.type);
|
|
19
23
|
}
|
|
20
|
-
throw new Error('Unknown container');
|
|
24
|
+
throw new Error('Unknown container ' + segments);
|
|
21
25
|
};
|
|
22
26
|
exports.getContainer = getContainer;
|
|
23
27
|
const hasContainer = (boxes) => {
|
package/dist/get-dimensions.d.ts
CHANGED
|
@@ -9,5 +9,5 @@ export type ExpandedDimensions = Dimensions & {
|
|
|
9
9
|
unrotatedWidth: number;
|
|
10
10
|
unrotatedHeight: number;
|
|
11
11
|
};
|
|
12
|
-
export declare const getDimensions: (boxes: Structure, state: ParserState) => ExpandedDimensions;
|
|
12
|
+
export declare const getDimensions: (boxes: Structure, state: ParserState) => ExpandedDimensions | null;
|
|
13
13
|
export declare const hasDimensions: (boxes: Structure, state: ParserState) => boolean;
|
package/dist/get-dimensions.js
CHANGED
|
@@ -3,8 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.hasDimensions = exports.getDimensions = void 0;
|
|
4
4
|
const get_tracks_1 = require("./get-tracks");
|
|
5
5
|
const getDimensions = (boxes, state) => {
|
|
6
|
-
const { videoTracks } = (0, get_tracks_1.getTracks)(
|
|
6
|
+
const { videoTracks } = (0, get_tracks_1.getTracks)(state);
|
|
7
7
|
if (!videoTracks.length) {
|
|
8
|
+
if (boxes.type === 'mp3') {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
8
11
|
throw new Error('Expected video track');
|
|
9
12
|
}
|
|
10
13
|
const firstVideoTrack = videoTracks[0];
|
package/dist/get-duration.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.hasSlowDuration = exports.hasDuration = exports.getDuration = exports.isMatroska = void 0;
|
|
4
4
|
const get_sample_positions_from_track_1 = require("./boxes/iso-base-media/get-sample-positions-from-track");
|
|
5
5
|
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
6
|
+
const get_duration_1 = require("./boxes/mp3/get-duration");
|
|
6
7
|
const traversal_2 = require("./boxes/riff/traversal");
|
|
7
8
|
const get_tracks_1 = require("./get-tracks");
|
|
8
9
|
const getDurationFromMatroska = (segments) => {
|
|
@@ -50,7 +51,7 @@ const getDurationFromIsoBaseMedia = (structure, parserState) => {
|
|
|
50
51
|
if (mvhdBox.durationInSeconds > 0) {
|
|
51
52
|
return mvhdBox.durationInSeconds;
|
|
52
53
|
}
|
|
53
|
-
const tracks = (0, get_tracks_1.getTracks)(
|
|
54
|
+
const tracks = (0, get_tracks_1.getTracks)(parserState);
|
|
54
55
|
const allTracks = [
|
|
55
56
|
...tracks.videoTracks,
|
|
56
57
|
...tracks.audioTracks,
|
|
@@ -92,13 +93,16 @@ const getDuration = (structure, parserState) => {
|
|
|
92
93
|
if (structure.type === 'transport-stream') {
|
|
93
94
|
return null;
|
|
94
95
|
}
|
|
96
|
+
if (structure.type === 'mp3') {
|
|
97
|
+
return (0, get_duration_1.getDurationFromMp3)(parserState);
|
|
98
|
+
}
|
|
95
99
|
throw new Error('Has no duration ' + structure);
|
|
96
100
|
};
|
|
97
101
|
exports.getDuration = getDuration;
|
|
98
102
|
// `duration` just grabs from metadata, and otherwise returns null
|
|
99
103
|
// Therefore just checking if we have tracks
|
|
100
104
|
const hasDuration = (structure, parserState) => {
|
|
101
|
-
return (0, get_tracks_1.
|
|
105
|
+
return (0, get_tracks_1.getHasTracks)(structure, parserState);
|
|
102
106
|
};
|
|
103
107
|
exports.hasDuration = hasDuration;
|
|
104
108
|
// `slowDuration` does through everything, and therefore is false
|
|
@@ -25,6 +25,7 @@ const getFieldsFromCallback = ({ fields, callbacks, }) => {
|
|
|
25
25
|
slowFps: Boolean(callbacks.onSlowFps),
|
|
26
26
|
slowNumberOfFrames: Boolean(callbacks.onSlowNumberOfFrames),
|
|
27
27
|
keyframes: Boolean(callbacks.onKeyframes),
|
|
28
|
+
images: Boolean(callbacks.onImages),
|
|
28
29
|
...fields,
|
|
29
30
|
};
|
|
30
31
|
return newFields;
|
package/dist/get-fps.js
CHANGED
|
@@ -101,6 +101,9 @@ const getFps = (segments) => {
|
|
|
101
101
|
if (segments.type === 'transport-stream') {
|
|
102
102
|
return null;
|
|
103
103
|
}
|
|
104
|
+
if (segments.type === 'mp3') {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
104
107
|
throw new Error('Cannot get fps, not implemented');
|
|
105
108
|
};
|
|
106
109
|
exports.getFps = getFps;
|
package/dist/get-is-hdr.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Structure } from './parse-result';
|
|
2
2
|
import type { ParserState } from './state/parser-state';
|
|
3
|
-
export declare const getIsHdr: (
|
|
3
|
+
export declare const getIsHdr: (state: ParserState) => boolean;
|
|
4
4
|
export declare const hasHdr: (boxes: Structure, state: ParserState) => boolean;
|
package/dist/get-is-hdr.js
CHANGED
|
@@ -7,12 +7,12 @@ const isVideoTrackHdr = (track) => {
|
|
|
7
7
|
track.color.transferCharacteristics === 'arib-std-b67' &&
|
|
8
8
|
track.color.primaries === 'bt2020');
|
|
9
9
|
};
|
|
10
|
-
const getIsHdr = (
|
|
11
|
-
const { videoTracks } = (0, get_tracks_1.getTracks)(
|
|
10
|
+
const getIsHdr = (state) => {
|
|
11
|
+
const { videoTracks } = (0, get_tracks_1.getTracks)(state);
|
|
12
12
|
return videoTracks.some((track) => isVideoTrackHdr(track));
|
|
13
13
|
};
|
|
14
14
|
exports.getIsHdr = getIsHdr;
|
|
15
15
|
const hasHdr = (boxes, state) => {
|
|
16
|
-
return (0, get_tracks_1.
|
|
16
|
+
return (0, get_tracks_1.getHasTracks)(boxes, state);
|
|
17
17
|
};
|
|
18
18
|
exports.hasHdr = hasHdr;
|
package/dist/get-keyframes.js
CHANGED
|
@@ -12,7 +12,7 @@ const getKeyframes = (structure) => {
|
|
|
12
12
|
exports.getKeyframes = getKeyframes;
|
|
13
13
|
const hasKeyframes = (structure, parserState) => {
|
|
14
14
|
if (structure.type === 'iso-base-media') {
|
|
15
|
-
return (0, get_tracks_1.
|
|
15
|
+
return (0, get_tracks_1.getHasTracks)(structure, parserState);
|
|
16
16
|
}
|
|
17
17
|
// Has, but will be null
|
|
18
18
|
return true;
|
package/dist/get-tracks.d.ts
CHANGED
|
@@ -57,11 +57,11 @@ export type OtherTrack = {
|
|
|
57
57
|
export type Track = VideoTrack | AudioTrack | OtherTrack;
|
|
58
58
|
export declare const getNumberOfTracks: (moovBox: MoovBox) => number;
|
|
59
59
|
export declare const isoBaseMediaHasTracks: (structure: IsoBaseMediaStructure) => boolean;
|
|
60
|
-
export declare const
|
|
60
|
+
export declare const getHasTracks: (structure: Structure, state: ParserState) => boolean;
|
|
61
61
|
export declare const getTracksFromIsoBaseMedia: (segments: IsoBaseMediaBox[]) => {
|
|
62
62
|
videoTracks: VideoTrack[];
|
|
63
63
|
audioTracks: AudioTrack[];
|
|
64
64
|
otherTracks: OtherTrack[];
|
|
65
65
|
};
|
|
66
|
-
export declare const getTracks: (
|
|
66
|
+
export declare const getTracks: (state: ParserState) => AllTracks;
|
|
67
67
|
export {};
|
package/dist/get-tracks.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getTracks = exports.getTracksFromIsoBaseMedia = exports.
|
|
3
|
+
exports.getTracks = exports.getTracksFromIsoBaseMedia = exports.getHasTracks = exports.isoBaseMediaHasTracks = exports.getNumberOfTracks = void 0;
|
|
4
4
|
const make_track_1 = require("./boxes/iso-base-media/make-track");
|
|
5
5
|
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
6
|
+
const get_tracks_from_mp3_1 = require("./boxes/mp3/get-tracks-from-mp3");
|
|
6
7
|
const get_tracks_from_avi_1 = require("./boxes/riff/get-tracks-from-avi");
|
|
7
8
|
const get_tracks_1 = require("./boxes/transport-stream/get-tracks");
|
|
8
9
|
const get_ready_tracks_1 = require("./boxes/webm/get-ready-tracks");
|
|
@@ -25,7 +26,7 @@ const isoBaseMediaHasTracks = (structure) => {
|
|
|
25
26
|
return tracks.length === numberOfTracks;
|
|
26
27
|
};
|
|
27
28
|
exports.isoBaseMediaHasTracks = isoBaseMediaHasTracks;
|
|
28
|
-
const
|
|
29
|
+
const getHasTracks = (structure, state) => {
|
|
29
30
|
if (structure.type === 'matroska') {
|
|
30
31
|
const mainSegment = (0, traversal_2.getMainSegment)(structure.boxes);
|
|
31
32
|
if (!mainSegment) {
|
|
@@ -37,14 +38,17 @@ const hasTracks = (structure, state) => {
|
|
|
37
38
|
return (0, exports.isoBaseMediaHasTracks)(structure);
|
|
38
39
|
}
|
|
39
40
|
if (structure.type === 'riff') {
|
|
40
|
-
return (0, get_tracks_from_avi_1.hasAllTracksFromAvi)(
|
|
41
|
+
return (0, get_tracks_from_avi_1.hasAllTracksFromAvi)(state);
|
|
41
42
|
}
|
|
42
43
|
if (structure.type === 'transport-stream') {
|
|
43
|
-
return (0, get_tracks_1.hasAllTracksFromTransportStream)(
|
|
44
|
+
return (0, get_tracks_1.hasAllTracksFromTransportStream)(state);
|
|
45
|
+
}
|
|
46
|
+
if (structure.type === 'mp3') {
|
|
47
|
+
return state.callbacks.tracks.getTracks().length > 0;
|
|
44
48
|
}
|
|
45
49
|
throw new Error('Unknown container ' + structure);
|
|
46
50
|
};
|
|
47
|
-
exports.
|
|
51
|
+
exports.getHasTracks = getHasTracks;
|
|
48
52
|
const getTracksFromMa = (segments, state) => {
|
|
49
53
|
const videoTracks = [];
|
|
50
54
|
const audioTracks = [];
|
|
@@ -106,19 +110,23 @@ const getTracksFromIsoBaseMedia = (segments) => {
|
|
|
106
110
|
};
|
|
107
111
|
};
|
|
108
112
|
exports.getTracksFromIsoBaseMedia = getTracksFromIsoBaseMedia;
|
|
109
|
-
const getTracks = (
|
|
110
|
-
|
|
111
|
-
|
|
113
|
+
const getTracks = (state) => {
|
|
114
|
+
const structure = state.structure.getStructure();
|
|
115
|
+
if (structure.type === 'matroska') {
|
|
116
|
+
return getTracksFromMa(structure.boxes, state);
|
|
117
|
+
}
|
|
118
|
+
if (structure.type === 'iso-base-media') {
|
|
119
|
+
return (0, exports.getTracksFromIsoBaseMedia)(structure.boxes);
|
|
112
120
|
}
|
|
113
|
-
if (
|
|
114
|
-
return (0,
|
|
121
|
+
if (structure.type === 'riff') {
|
|
122
|
+
return (0, get_tracks_from_avi_1.getTracksFromAvi)(structure, state);
|
|
115
123
|
}
|
|
116
|
-
if (
|
|
117
|
-
return (0,
|
|
124
|
+
if (structure.type === 'transport-stream') {
|
|
125
|
+
return (0, get_tracks_1.getTracksFromTransportStream)(state);
|
|
118
126
|
}
|
|
119
|
-
if (
|
|
120
|
-
return (0,
|
|
127
|
+
if (structure.type === 'mp3') {
|
|
128
|
+
return (0, get_tracks_from_mp3_1.getTracksFromMp3)(state);
|
|
121
129
|
}
|
|
122
|
-
throw new Error(`Unknown container${
|
|
130
|
+
throw new Error(`Unknown container${structure}`);
|
|
123
131
|
};
|
|
124
132
|
exports.getTracks = getTracks;
|
|
@@ -2,7 +2,7 @@ import type { TrakBox } from './boxes/iso-base-media/trak/trak';
|
|
|
2
2
|
import { type MediaParserVideoCodec, type VideoTrackColorParams } from './get-tracks';
|
|
3
3
|
import type { Structure } from './parse-result';
|
|
4
4
|
import type { ParserState } from './state/parser-state';
|
|
5
|
-
export declare const getVideoCodec: (
|
|
5
|
+
export declare const getVideoCodec: (state: ParserState) => MediaParserVideoCodec | null;
|
|
6
6
|
export declare const hasVideoCodec: (boxes: Structure, state: ParserState) => boolean;
|
|
7
7
|
export declare const getVideoPrivateData: (trakBox: TrakBox) => Uint8Array | null;
|
|
8
8
|
export declare const getIsoBmColrConfig: (trakBox: TrakBox) => VideoTrackColorParams | null;
|
package/dist/get-video-codec.js
CHANGED
|
@@ -5,14 +5,14 @@ const color_1 = require("./boxes/avc/color");
|
|
|
5
5
|
const av1_codec_private_1 = require("./boxes/webm/av1-codec-private");
|
|
6
6
|
const get_sample_aspect_ratio_1 = require("./get-sample-aspect-ratio");
|
|
7
7
|
const get_tracks_1 = require("./get-tracks");
|
|
8
|
-
const getVideoCodec = (
|
|
8
|
+
const getVideoCodec = (state) => {
|
|
9
9
|
var _a, _b;
|
|
10
|
-
const track = (0, get_tracks_1.getTracks)(
|
|
10
|
+
const track = (0, get_tracks_1.getTracks)(state);
|
|
11
11
|
return (_b = (_a = track.videoTracks[0]) === null || _a === void 0 ? void 0 : _a.codecWithoutConfig) !== null && _b !== void 0 ? _b : null;
|
|
12
12
|
};
|
|
13
13
|
exports.getVideoCodec = getVideoCodec;
|
|
14
14
|
const hasVideoCodec = (boxes, state) => {
|
|
15
|
-
return (0, get_tracks_1.
|
|
15
|
+
return (0, get_tracks_1.getHasTracks)(boxes, state);
|
|
16
16
|
};
|
|
17
17
|
exports.hasVideoCodec = hasVideoCodec;
|
|
18
18
|
const getVideoPrivateData = (trakBox) => {
|
package/dist/has-all-info.js
CHANGED
|
@@ -11,6 +11,7 @@ const get_keyframes_1 = require("./get-keyframes");
|
|
|
11
11
|
const get_tracks_1 = require("./get-tracks");
|
|
12
12
|
const get_video_codec_1 = require("./get-video-codec");
|
|
13
13
|
const may_skip_video_data_1 = require("./may-skip-video-data/may-skip-video-data");
|
|
14
|
+
const get_metadata_1 = require("./metadata/get-metadata");
|
|
14
15
|
const getAvailableInfo = ({ fieldsToFetch, state, }) => {
|
|
15
16
|
const keys = Object.entries(fieldsToFetch).filter(([, value]) => value);
|
|
16
17
|
const structure = state.structure.getStructureOrNull();
|
|
@@ -47,7 +48,7 @@ const getAvailableInfo = ({ fieldsToFetch, state, }) => {
|
|
|
47
48
|
return Boolean(structure && (0, get_audio_codec_1.hasAudioCodec)(structure, state));
|
|
48
49
|
}
|
|
49
50
|
if (key === 'tracks') {
|
|
50
|
-
return Boolean(structure && (0, get_tracks_1.
|
|
51
|
+
return Boolean(structure && (0, get_tracks_1.getHasTracks)(structure, state));
|
|
51
52
|
}
|
|
52
53
|
if (key === 'keyframes') {
|
|
53
54
|
return Boolean(structure && (0, get_keyframes_1.hasKeyframes)(structure, state));
|
|
@@ -67,8 +68,8 @@ const getAvailableInfo = ({ fieldsToFetch, state, }) => {
|
|
|
67
68
|
if (key === 'container') {
|
|
68
69
|
return Boolean(structure && (0, get_container_1.hasContainer)(structure));
|
|
69
70
|
}
|
|
70
|
-
if (key === 'metadata' || key === 'location') {
|
|
71
|
-
return
|
|
71
|
+
if (key === 'metadata' || key === 'location' || key === 'images') {
|
|
72
|
+
return Boolean(structure && (0, get_metadata_1.hasMetadata)(structure));
|
|
72
73
|
}
|
|
73
74
|
if (key === 'slowKeyframes') {
|
|
74
75
|
return false;
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export { IsAGifError, IsAnImageError, IsAnUnsupportedAudioTypeError, IsAnUnsuppo
|
|
|
5
5
|
export type { SamplePosition } from './get-sample-positions';
|
|
6
6
|
export { MetadataEntry } from './metadata/get-metadata';
|
|
7
7
|
export { MediaParserKeyframe } from './options';
|
|
8
|
+
export type { MediaParserEmbeddedImage } from './state/images';
|
|
8
9
|
export { AudioTrack, MediaParserAudioCodec, MediaParserVideoCodec, OtherTrack, Track, VideoTrack, VideoTrackColorParams, } from './get-tracks';
|
|
9
10
|
export type { Options, ParseMediaContainer, ParseMediaDynamicOptions, ParseMediaFields, ParseMediaOnProgress, ParseMediaOptions, ParseMediaProgress, ParseMediaResult, TracksField, } from './options';
|
|
10
11
|
export { parseMedia } from './parse-media';
|
|
@@ -664,7 +665,6 @@ export declare const MediaParserInternals: {
|
|
|
664
665
|
peekB: (length: number) => void;
|
|
665
666
|
peekD: (length: number) => void;
|
|
666
667
|
getBits: (bits: number) => number;
|
|
667
|
-
byteLength: () => number;
|
|
668
668
|
bytesRemaining: () => number;
|
|
669
669
|
leb128: () => number;
|
|
670
670
|
removeBytesRead: () => void;
|
|
@@ -694,6 +694,9 @@ export declare const MediaParserInternals: {
|
|
|
694
694
|
getPascalString: () => number[];
|
|
695
695
|
getUint(length: number): number;
|
|
696
696
|
getByteString(length: number, trimTrailingZeroes: boolean): string;
|
|
697
|
+
planBytes: (size: number) => {
|
|
698
|
+
discardRest: () => Uint8Array;
|
|
699
|
+
};
|
|
697
700
|
getFloat64: () => number;
|
|
698
701
|
readUntilNullTerminator: () => string;
|
|
699
702
|
getFloat32: () => number;
|
|
@@ -701,23 +704,22 @@ export declare const MediaParserInternals: {
|
|
|
701
704
|
getInt32Le: () => number;
|
|
702
705
|
getInt32: () => number;
|
|
703
706
|
destroy: () => void;
|
|
704
|
-
disallowDiscard: () => void;
|
|
705
|
-
allowDiscard: () => void;
|
|
706
707
|
startBox: (size: number) => {
|
|
707
708
|
discardRest: () => void;
|
|
708
709
|
expectNoMoreBytes: () => void;
|
|
709
710
|
};
|
|
710
711
|
readExpGolomb: () => number;
|
|
712
|
+
startCheckpoint: () => {
|
|
713
|
+
returnToCheckpoint: () => void;
|
|
714
|
+
};
|
|
711
715
|
};
|
|
712
|
-
parseStsd: ({ iterator, offset, size, state,
|
|
716
|
+
parseStsd: ({ iterator, offset, size, state, }: {
|
|
713
717
|
iterator: import("./buffer-iterator").BufferIterator;
|
|
714
718
|
offset: number;
|
|
715
719
|
size: number;
|
|
716
720
|
state: import("./state/parser-state").ParserState;
|
|
717
|
-
signal: AbortSignal | null;
|
|
718
|
-
fields: import("./options").Options<import("./options").ParseMediaFields>;
|
|
719
721
|
}) => Promise<import("./boxes/iso-base-media/stsd/stsd").StsdBox>;
|
|
720
|
-
makeParserState: ({ hasAudioTrackHandlers, hasVideoTrackHandlers, signal, getIterator, fields, onAudioTrack, onVideoTrack, supportsContentRange, }: {
|
|
722
|
+
makeParserState: ({ hasAudioTrackHandlers, hasVideoTrackHandlers, signal, getIterator, fields, onAudioTrack, onVideoTrack, supportsContentRange, contentLength, logLevel, }: {
|
|
721
723
|
hasAudioTrackHandlers: boolean;
|
|
722
724
|
hasVideoTrackHandlers: boolean;
|
|
723
725
|
signal: AbortSignal | undefined;
|
|
@@ -726,6 +728,8 @@ export declare const MediaParserInternals: {
|
|
|
726
728
|
supportsContentRange: boolean;
|
|
727
729
|
onAudioTrack: import("./webcodec-sample-types").OnAudioTrack | null;
|
|
728
730
|
onVideoTrack: import("./webcodec-sample-types").OnVideoTrack | null;
|
|
731
|
+
contentLength: number | null;
|
|
732
|
+
logLevel: LogLevel;
|
|
729
733
|
}) => {
|
|
730
734
|
riff: {
|
|
731
735
|
getAvcProfile: () => import("./state/parser-state").SpsAndPps | null;
|
|
@@ -734,6 +738,38 @@ export declare const MediaParserInternals: {
|
|
|
734
738
|
getNextTrackIndex: () => number;
|
|
735
739
|
incrementNextTrackIndex: () => void;
|
|
736
740
|
};
|
|
741
|
+
transportStream: {
|
|
742
|
+
nextPesHeaderStore: {
|
|
743
|
+
setNextPesHeader: (pesHeader: import("./boxes/transport-stream/parse-pes").PacketPes) => void;
|
|
744
|
+
getNextPesHeader: () => import("./boxes/transport-stream/parse-pes").PacketPes;
|
|
745
|
+
};
|
|
746
|
+
streamBuffers: Map<number, import("./boxes/transport-stream/process-stream-buffers").TransportStreamPacketBuffer>;
|
|
747
|
+
};
|
|
748
|
+
webm: {
|
|
749
|
+
onTrackEntrySegment: import("./boxes/webm/segments").OnTrackEntrySegment;
|
|
750
|
+
getTrackInfoByNumber: (id: number) => import("./boxes/webm/segments/track-entry").TrackInfo;
|
|
751
|
+
setTimestampOffset: (byteOffset: number, timestamp: number) => void;
|
|
752
|
+
getTimestampOffsetForByteOffset: (byteOffset: number) => number | undefined;
|
|
753
|
+
timescale: null;
|
|
754
|
+
getTimescale: () => number;
|
|
755
|
+
setTimescale: (newTimescale: number) => void;
|
|
756
|
+
addSegment: (seg: Omit<import("./state/webm").SegmentSection, "index">) => void;
|
|
757
|
+
addCluster: (cluster: import("./state/webm").ClusterSection) => void;
|
|
758
|
+
isInsideSegment: (iterator: import("./buffer-iterator").BufferIterator) => import("./state/webm").SegmentSection | null;
|
|
759
|
+
isInsideCluster: (iterator: import("./buffer-iterator").BufferIterator) => import("./state/webm").ClusterSection | null;
|
|
760
|
+
};
|
|
761
|
+
iso: {
|
|
762
|
+
getShouldReturnToVideoSectionAfterEnd: () => boolean;
|
|
763
|
+
setShouldReturnToVideoSectionAfterEnd: (value: boolean) => void;
|
|
764
|
+
flatSamples: {
|
|
765
|
+
getSamples: () => import("./state/iso-base-media/cached-sample-positions").FlatSample[] | null;
|
|
766
|
+
setSamples: (samples: import("./state/iso-base-media/cached-sample-positions").FlatSample[]) => void;
|
|
767
|
+
};
|
|
768
|
+
};
|
|
769
|
+
mp3Info: {
|
|
770
|
+
getMp3Info: () => import("./state/mp3").Mp3Info | null;
|
|
771
|
+
setMp3Info: (info: import("./state/mp3").Mp3Info) => void;
|
|
772
|
+
};
|
|
737
773
|
callbacks: {
|
|
738
774
|
registerVideoSampleCallback: (id: number, callback: import("./webcodec-sample-types").OnVideoSample | null) => Promise<void>;
|
|
739
775
|
onAudioSample: (trackId: number, audioSample: import("./webcodec-sample-types").AudioOrVideoSample) => Promise<void>;
|
|
@@ -752,6 +788,8 @@ export declare const MediaParserInternals: {
|
|
|
752
788
|
};
|
|
753
789
|
audioSampleCallbacks: Record<number, import("./webcodec-sample-types").OnAudioSample>;
|
|
754
790
|
videoSampleCallbacks: Record<number, import("./webcodec-sample-types").OnVideoSample>;
|
|
791
|
+
hasAudioTrackHandlers: boolean;
|
|
792
|
+
hasVideoTrackHandlers: boolean;
|
|
755
793
|
};
|
|
756
794
|
getInternalStats: () => import("./state/parser-state").InternalStats;
|
|
757
795
|
getSkipBytes: () => number;
|
|
@@ -768,30 +806,36 @@ export declare const MediaParserInternals: {
|
|
|
768
806
|
onAudioTrack: import("./webcodec-sample-types").OnAudioTrack | null;
|
|
769
807
|
onVideoTrack: import("./webcodec-sample-types").OnVideoTrack | null;
|
|
770
808
|
supportsContentRange: boolean;
|
|
771
|
-
webm: {
|
|
772
|
-
onTrackEntrySegment: import("./boxes/webm/segments").OnTrackEntrySegment;
|
|
773
|
-
getTrackInfoByNumber: (id: number) => import("./boxes/webm/segments/track-entry").TrackInfo;
|
|
774
|
-
setTimestampOffset: (byteOffset: number, timestamp: number) => void;
|
|
775
|
-
getTimestampOffsetForByteOffset: (byteOffset: number) => number | undefined;
|
|
776
|
-
timescale: null;
|
|
777
|
-
getTimescale: () => number;
|
|
778
|
-
setTimescale: (newTimescale: number) => void;
|
|
779
|
-
};
|
|
780
809
|
emittedFields: import("./options").AllOptions<import("./options").ParseMediaFields>;
|
|
781
810
|
fields: Partial<import("./options").AllOptions<import("./options").ParseMediaFields>>;
|
|
782
811
|
slowDurationAndFps: {
|
|
783
|
-
|
|
812
|
+
addVideoSample: (videoSample: import("./webcodec-sample-types").AudioOrVideoSample) => void;
|
|
813
|
+
addAudioSample: (audioSample: import("./webcodec-sample-types").AudioOrVideoSample) => void;
|
|
784
814
|
getSlowDurationInSeconds: () => number;
|
|
785
815
|
getFps: () => number;
|
|
786
816
|
getSlowNumberOfFrames: () => number;
|
|
787
817
|
};
|
|
818
|
+
contentLength: number | null;
|
|
819
|
+
images: {
|
|
820
|
+
images: import("./state/images").MediaParserEmbeddedImage[];
|
|
821
|
+
addImage: (image: import("./state/images").MediaParserEmbeddedImage) => void;
|
|
822
|
+
};
|
|
823
|
+
videoSection: {
|
|
824
|
+
setVideoSection: (section: {
|
|
825
|
+
start: number;
|
|
826
|
+
size: number;
|
|
827
|
+
}) => void;
|
|
828
|
+
getVideoSection: () => {
|
|
829
|
+
start: number;
|
|
830
|
+
size: number;
|
|
831
|
+
};
|
|
832
|
+
isInVideoSectionState: (iterator: import("./buffer-iterator").BufferIterator) => "no-section-defined" | "in-section" | "outside-section";
|
|
833
|
+
};
|
|
834
|
+
logLevel: "trace" | "verbose" | "info" | "warn" | "error";
|
|
788
835
|
};
|
|
789
|
-
processSample: ({ iterator, state
|
|
836
|
+
processSample: ({ iterator, state, }: {
|
|
790
837
|
iterator: import("./buffer-iterator").BufferIterator;
|
|
791
838
|
state: import("./state/parser-state").ParserState;
|
|
792
|
-
signal: AbortSignal | null;
|
|
793
|
-
logLevel: LogLevel;
|
|
794
|
-
fields: import("./options").Options<import("./options").ParseMediaFields>;
|
|
795
839
|
}) => Promise<{
|
|
796
840
|
sample: import("./boxes/iso-base-media/stsd/samples").Sample | null;
|
|
797
841
|
}>;
|
package/dist/index.js
CHANGED
|
@@ -29,7 +29,7 @@ exports.MediaParserInternals = {
|
|
|
29
29
|
getArrayBufferIterator: buffer_iterator_1.getArrayBufferIterator,
|
|
30
30
|
parseStsd: stsd_1.parseStsd,
|
|
31
31
|
makeParserState: parser_state_1.makeParserState,
|
|
32
|
-
processSample: samples_1.
|
|
32
|
+
processSample: samples_1.processIsoFormatBox,
|
|
33
33
|
parseFtyp: ftyp_1.parseFtyp,
|
|
34
34
|
parseEbml: parse_ebml_1.parseEbml,
|
|
35
35
|
parseMvhd: mvhd_1.parseMvhd,
|
|
@@ -3,9 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.maySkipVideoData = void 0;
|
|
4
4
|
const need_samples_for_fields_1 = require("./need-samples-for-fields");
|
|
5
5
|
const maySkipVideoData = ({ state }) => {
|
|
6
|
-
|
|
6
|
+
const hasAllTracksAndNoCallbacks = state.callbacks.tracks.hasAllTracks() &&
|
|
7
7
|
Object.values(state.callbacks.videoSampleCallbacks).length === 0 &&
|
|
8
|
-
Object.values(state.callbacks.audioSampleCallbacks).length === 0
|
|
8
|
+
Object.values(state.callbacks.audioSampleCallbacks).length === 0;
|
|
9
|
+
const hasNoTrackHandlers = !state.callbacks.hasAudioTrackHandlers &&
|
|
10
|
+
!state.callbacks.hasVideoTrackHandlers;
|
|
11
|
+
const noCallbacksNeeded = hasNoTrackHandlers || hasAllTracksAndNoCallbacks;
|
|
12
|
+
return (noCallbacksNeeded &&
|
|
9
13
|
!(0, need_samples_for_fields_1.needsToIterateOverSamples)({
|
|
10
14
|
emittedFields: state.emittedFields,
|
|
11
15
|
fields: state.fields,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getMetadata = void 0;
|
|
3
|
+
exports.hasMetadata = exports.getMetadata = void 0;
|
|
4
|
+
const get_metadata_from_mp3_1 = require("../boxes/mp3/get-metadata-from-mp3");
|
|
4
5
|
const metadata_from_iso_1 = require("./metadata-from-iso");
|
|
5
6
|
const metadata_from_matroska_1 = require("./metadata-from-matroska");
|
|
6
7
|
const metadata_from_riff_1 = require("./metadata-from-riff");
|
|
@@ -14,6 +15,20 @@ const getMetadata = (structure) => {
|
|
|
14
15
|
if (structure.type === 'transport-stream') {
|
|
15
16
|
return [];
|
|
16
17
|
}
|
|
18
|
+
if (structure.type === 'mp3') {
|
|
19
|
+
const tags = (0, get_metadata_from_mp3_1.getMetadataFromMp3)(structure);
|
|
20
|
+
if (tags === null) {
|
|
21
|
+
throw new Error('Failed to get metadata from mp3');
|
|
22
|
+
}
|
|
23
|
+
return tags;
|
|
24
|
+
}
|
|
17
25
|
return (0, metadata_from_iso_1.getMetadataFromIsoBase)(structure);
|
|
18
26
|
};
|
|
19
27
|
exports.getMetadata = getMetadata;
|
|
28
|
+
const hasMetadata = (structure) => {
|
|
29
|
+
if (structure.type === 'mp3') {
|
|
30
|
+
return (0, get_metadata_from_mp3_1.getMetadataFromMp3)(structure) !== null;
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
};
|
|
34
|
+
exports.hasMetadata = hasMetadata;
|