@remotion/media-parser 4.0.240 → 4.0.242
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-avc-profile-to-track.js +2 -2
- package/dist/boxes/avc/codec-private.d.ts +1 -1
- package/dist/boxes/avc/codec-private.js +2 -2
- package/dist/boxes/avc/create-sps-pps-data.d.ts +2 -0
- package/dist/boxes/avc/create-sps-pps-data.js +28 -0
- package/dist/boxes/iso-base-media/get-keyframes.d.ts +3 -0
- package/dist/boxes/iso-base-media/get-keyframes.js +30 -0
- package/dist/boxes/iso-base-media/mdat/mdat.d.ts +3 -3
- package/dist/boxes/iso-base-media/mdat/mdat.js +9 -5
- package/dist/boxes/iso-base-media/moov/moov.d.ts +3 -3
- package/dist/boxes/iso-base-media/moov/moov.js +5 -4
- package/dist/boxes/iso-base-media/process-box.d.ts +9 -9
- package/dist/boxes/iso-base-media/process-box.js +48 -56
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +3 -3
- package/dist/boxes/iso-base-media/stsd/mebx.js +5 -4
- package/dist/boxes/iso-base-media/stsd/samples.d.ts +5 -5
- package/dist/boxes/iso-base-media/stsd/samples.js +19 -16
- package/dist/boxes/iso-base-media/stsd/stsd.d.ts +3 -3
- package/dist/boxes/iso-base-media/stsd/stsd.js +2 -2
- package/dist/boxes/iso-base-media/trak/trak.d.ts +3 -3
- package/dist/boxes/iso-base-media/trak/trak.js +7 -6
- package/dist/boxes/riff/expect-riff-box.d.ts +3 -3
- package/dist/boxes/riff/expect-riff-box.js +5 -5
- package/dist/boxes/riff/get-tracks-from-avi.js +1 -1
- package/dist/boxes/riff/parse-box.d.ts +7 -7
- package/dist/boxes/riff/parse-box.js +29 -24
- package/dist/boxes/riff/parse-list-box.d.ts +3 -3
- package/dist/boxes/riff/parse-list-box.js +2 -2
- package/dist/boxes/riff/parse-movi.d.ts +5 -5
- package/dist/boxes/riff/parse-movi.js +35 -20
- package/dist/boxes/riff/parse-riff-box.d.ts +3 -3
- package/dist/boxes/riff/parse-riff-box.js +2 -2
- package/dist/boxes/transport-stream/adts-header.d.ts +1 -1
- package/dist/boxes/transport-stream/discard-rest-of-packet.d.ts +1 -1
- package/dist/boxes/transport-stream/get-tracks.js +1 -1
- package/dist/boxes/transport-stream/handle-aac-packet.d.ts +4 -3
- package/dist/boxes/transport-stream/handle-aac-packet.js +6 -4
- package/dist/boxes/transport-stream/handle-avc-packet.d.ts +4 -3
- package/dist/boxes/transport-stream/handle-avc-packet.js +8 -6
- package/dist/boxes/transport-stream/parse-packet.d.ts +3 -3
- package/dist/boxes/transport-stream/parse-packet.js +2 -2
- package/dist/boxes/transport-stream/parse-stream-packet.d.ts +3 -3
- package/dist/boxes/transport-stream/parse-stream-packet.js +14 -7
- package/dist/boxes/transport-stream/parse-transport-stream.d.ts +5 -6
- package/dist/boxes/transport-stream/parse-transport-stream.js +10 -9
- package/dist/boxes/transport-stream/process-stream-buffers.d.ts +6 -5
- package/dist/boxes/transport-stream/process-stream-buffers.js +18 -8
- package/dist/boxes/webm/ebml.d.ts +1 -1
- package/dist/boxes/webm/get-sample-from-block.d.ts +2 -2
- package/dist/boxes/webm/get-sample-from-block.js +8 -4
- package/dist/boxes/webm/make-header.d.ts +3 -3
- package/dist/boxes/webm/parse-ebml.d.ts +4 -4
- package/dist/boxes/webm/parse-ebml.js +18 -18
- package/dist/boxes/webm/parse-webm-header.d.ts +5 -5
- package/dist/boxes/webm/parse-webm-header.js +6 -5
- package/dist/boxes/webm/segments/parse-children.d.ts +5 -5
- package/dist/boxes/webm/segments/parse-children.js +12 -13
- package/dist/boxes/webm/segments.d.ts +3 -3
- package/dist/boxes/webm/segments.js +13 -13
- package/dist/buffer-iterator.d.ts +2 -6
- package/dist/buffer-iterator.js +4 -29
- package/dist/convert-audio-or-video-sample.js +2 -0
- package/dist/create/iso-base-media/codec-specific/avc1.d.ts +1 -1
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +1 -1
- package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +1 -1
- package/dist/create/iso-base-media/create-colr.d.ts +1 -1
- package/dist/create/iso-base-media/create-ftyp.d.ts +2 -2
- package/dist/create/iso-base-media/create-ilst.d.ts +1 -1
- package/dist/create/iso-base-media/create-mdia.d.ts +1 -1
- package/dist/create/iso-base-media/create-moov.d.ts +1 -1
- package/dist/create/iso-base-media/create-mvhd.d.ts +1 -1
- package/dist/create/iso-base-media/create-trak.d.ts +1 -1
- package/dist/create/iso-base-media/create-udta.d.ts +1 -1
- package/dist/create/iso-base-media/create-url.d.ts +1 -1
- package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -1
- package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -1
- package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +1 -1
- package/dist/create/iso-base-media/mp4-header.d.ts +1 -1
- package/dist/create/iso-base-media/primitives.d.ts +13 -13
- package/dist/create/iso-base-media/serialize-track.d.ts +1 -1
- package/dist/create/iso-base-media/trak/create-tkhd.d.ts +2 -2
- package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -1
- package/dist/create/iso-base-media/udta/create-meta.d.ts +1 -1
- package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -1
- package/dist/create/matroska/cluster-segment.d.ts +1 -1
- package/dist/emit-available-info.d.ts +6 -4
- package/dist/emit-available-info.js +231 -79
- package/dist/errors/detect-file-type.d.ts +1 -0
- package/dist/errors/detect-file-type.js +88 -0
- package/dist/errors/file-types.d.ts +1 -0
- package/dist/errors/file-types.js +88 -0
- package/dist/errors.d.ts +68 -0
- package/dist/errors.js +71 -0
- package/dist/esm/from-fetch.mjs +1 -0
- package/dist/esm/from-node.mjs +1 -0
- package/dist/esm/from-web-file.mjs +2 -1
- package/dist/esm/index.mjs +1457 -542
- package/dist/file-types/bmp.d.ts +6 -0
- package/dist/file-types/bmp.js +23 -0
- package/dist/file-types/detect-file-type.d.ts +42 -0
- package/dist/file-types/detect-file-type.js +59 -0
- package/dist/file-types/get-jpeg-dimensions.d.ts +4 -0
- package/dist/file-types/get-jpeg-dimensions.js +32 -0
- package/dist/file-types/index.d.ts +2 -0
- package/dist/file-types/index.js +57 -0
- package/dist/file-types/jpeg.d.ts +12 -0
- package/dist/file-types/jpeg.js +44 -0
- package/dist/file-types/pdf.d.ts +4 -0
- package/dist/file-types/pdf.js +12 -0
- package/dist/file-types/png.d.ts +10 -0
- package/dist/file-types/png.js +32 -0
- package/dist/file-types/webp.d.ts +6 -0
- package/dist/file-types/webp.js +69 -0
- package/dist/file-types.d.ts +1 -0
- package/dist/file-types.js +88 -0
- package/dist/get-audio-codec.d.ts +1 -1
- package/dist/get-duration.d.ts +1 -0
- package/dist/get-duration.js +14 -1
- package/dist/get-fields-from-callbacks.d.ts +5 -0
- package/dist/get-fields-from-callbacks.js +32 -0
- package/dist/get-fps.d.ts +1 -0
- package/dist/get-fps.js +17 -12
- package/dist/get-keyframes.d.ts +5 -0
- package/dist/get-keyframes.js +20 -0
- package/dist/get-tracks.d.ts +7 -1
- package/dist/get-tracks.js +15 -10
- package/dist/has-all-info.d.ts +5 -4
- package/dist/has-all-info.js +31 -5
- package/dist/index.d.ts +2 -0
- package/dist/index.js +7 -1
- package/dist/may-skip-video-data/may-skip-video-data.d.ts +4 -0
- package/dist/may-skip-video-data/may-skip-video-data.js +14 -0
- package/dist/may-skip-video-data/need-samples-for-fields.d.ts +5 -0
- package/dist/may-skip-video-data/need-samples-for-fields.js +33 -0
- package/dist/options.d.ts +68 -53
- package/dist/parse-media.js +42 -31
- package/dist/parse-result.d.ts +2 -4
- package/dist/parse-video.d.ts +8 -5
- package/dist/parse-video.js +94 -17
- package/dist/probing/detect-file-type.d.ts +1 -0
- package/dist/probing/detect-file-type.js +88 -0
- package/dist/probing/get-jpeg-dimensions.d.ts +4 -0
- package/dist/probing/get-jpeg-dimensions.js +32 -0
- package/dist/readers/from-fetch.js +1 -0
- package/dist/readers/from-node.js +1 -0
- package/dist/readers/from-web-file.js +1 -0
- package/dist/readers/reader.d.ts +1 -0
- package/dist/register-track.d.ts +5 -5
- package/dist/register-track.js +12 -12
- package/dist/state/can-skip-tracks.js +6 -0
- package/dist/state/emitted-fields.d.ts +2 -0
- package/dist/state/emitted-fields.js +31 -0
- package/dist/state/has-tracks-section.d.ts +1 -0
- package/dist/state/keyframes.d.ts +6 -0
- package/dist/state/keyframes.js +15 -0
- package/dist/state/parser-state.d.ts +60 -29
- package/dist/state/parser-state.js +32 -150
- package/dist/state/riff.d.ts +10 -0
- package/dist/state/riff.js +32 -0
- package/dist/state/sample-callbacks.d.ts +31 -0
- package/dist/state/sample-callbacks.js +96 -0
- package/dist/state/slow-duration-fps.d.ts +8 -0
- package/dist/state/slow-duration-fps.js +36 -0
- package/dist/state/structure.d.ts +7 -0
- package/dist/state/structure.js +21 -0
- package/dist/state/tracks-and-samples.d.ts +0 -0
- package/dist/state/tracks-and-samples.js +1 -0
- package/dist/state/webm.d.ts +11 -0
- package/dist/state/webm.js +67 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/webcodec-sample-types.d.ts +2 -0
- package/package.json +3 -3
package/dist/get-fps.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hasFps = exports.getFps = exports.getFpsFromMp4TrakBox = exports.getTimescaleAndDuration = exports.trakBoxContainsVideo = exports.trakBoxContainsAudio = void 0;
|
|
3
|
+
exports.hasFps = exports.hasFpsSuitedForSlowFps = exports.getFps = exports.getFpsFromMp4TrakBox = exports.getTimescaleAndDuration = exports.trakBoxContainsVideo = exports.trakBoxContainsAudio = void 0;
|
|
4
4
|
const traversal_1 = require("./boxes/iso-base-media/traversal");
|
|
5
5
|
const traversal_2 = require("./boxes/riff/traversal");
|
|
6
6
|
const calculateFps = ({ sttsBox, timeScale, durationInSamples, }) => {
|
|
@@ -93,31 +93,36 @@ const getFps = (segments) => {
|
|
|
93
93
|
if (segments.type === 'riff') {
|
|
94
94
|
return getFpsFromAvi(segments);
|
|
95
95
|
}
|
|
96
|
-
//
|
|
96
|
+
// People need to get it from slowFps
|
|
97
97
|
if (segments.type === 'matroska') {
|
|
98
98
|
return null;
|
|
99
99
|
}
|
|
100
|
+
// People need to get it from slowFps
|
|
100
101
|
if (segments.type === 'transport-stream') {
|
|
101
102
|
return null;
|
|
102
103
|
}
|
|
103
104
|
throw new Error('Cannot get fps, not implemented');
|
|
104
105
|
};
|
|
105
106
|
exports.getFps = getFps;
|
|
106
|
-
const
|
|
107
|
+
const hasFpsSuitedForSlowFps = (boxes) => {
|
|
107
108
|
try {
|
|
108
|
-
// Matroska and Transport stream has no FPS metadata
|
|
109
|
-
// Not bothering to parse
|
|
110
|
-
// Idea: `guaranteedFps` field
|
|
111
|
-
if (boxes.type === 'matroska') {
|
|
112
|
-
return true;
|
|
113
|
-
}
|
|
114
|
-
if (boxes.type === 'transport-stream') {
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
109
|
return (0, exports.getFps)(boxes) !== null;
|
|
118
110
|
}
|
|
119
111
|
catch (_a) {
|
|
120
112
|
return false;
|
|
121
113
|
}
|
|
122
114
|
};
|
|
115
|
+
exports.hasFpsSuitedForSlowFps = hasFpsSuitedForSlowFps;
|
|
116
|
+
const hasFps = (boxes) => {
|
|
117
|
+
// Matroska and Transport stream has no FPS metadata
|
|
118
|
+
// Not bothering to parse
|
|
119
|
+
// Users should use `slowFps` field
|
|
120
|
+
if (boxes.type === 'matroska') {
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
if (boxes.type === 'transport-stream') {
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
return (0, exports.hasFpsSuitedForSlowFps)(boxes);
|
|
127
|
+
};
|
|
123
128
|
exports.hasFps = hasFps;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MediaParserKeyframe } from './options';
|
|
2
|
+
import type { Structure } from './parse-result';
|
|
3
|
+
import type { ParserState } from './state/parser-state';
|
|
4
|
+
export declare const getKeyframes: (structure: Structure) => MediaParserKeyframe[] | null;
|
|
5
|
+
export declare const hasKeyframes: (structure: Structure, parserState: ParserState) => boolean;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasKeyframes = exports.getKeyframes = void 0;
|
|
4
|
+
const get_keyframes_1 = require("./boxes/iso-base-media/get-keyframes");
|
|
5
|
+
const get_tracks_1 = require("./get-tracks");
|
|
6
|
+
const getKeyframes = (structure) => {
|
|
7
|
+
if (structure.type === 'iso-base-media') {
|
|
8
|
+
return (0, get_keyframes_1.getKeyframesFromIsoBaseMedia)(structure);
|
|
9
|
+
}
|
|
10
|
+
return null;
|
|
11
|
+
};
|
|
12
|
+
exports.getKeyframes = getKeyframes;
|
|
13
|
+
const hasKeyframes = (structure, parserState) => {
|
|
14
|
+
if (structure.type === 'iso-base-media') {
|
|
15
|
+
return (0, get_tracks_1.hasTracks)(structure, parserState);
|
|
16
|
+
}
|
|
17
|
+
// Has, but will be null
|
|
18
|
+
return true;
|
|
19
|
+
};
|
|
20
|
+
exports.hasKeyframes = hasKeyframes;
|
package/dist/get-tracks.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { MatrixCoefficients, Primaries, TransferCharacteristics } from './b
|
|
|
2
2
|
import type { MoovBox } from './boxes/iso-base-media/moov/moov';
|
|
3
3
|
import type { TrakBox } from './boxes/iso-base-media/trak/trak';
|
|
4
4
|
import type { AllTracks } from './boxes/riff/get-tracks-from-avi';
|
|
5
|
-
import type { Structure } from './parse-result';
|
|
5
|
+
import type { IsoBaseMediaBox, IsoBaseMediaStructure, Structure } from './parse-result';
|
|
6
6
|
import type { ParserState } from './state/parser-state';
|
|
7
7
|
type SampleAspectRatio = {
|
|
8
8
|
numerator: number;
|
|
@@ -56,6 +56,12 @@ export type OtherTrack = {
|
|
|
56
56
|
};
|
|
57
57
|
export type Track = VideoTrack | AudioTrack | OtherTrack;
|
|
58
58
|
export declare const getNumberOfTracks: (moovBox: MoovBox) => number;
|
|
59
|
+
export declare const isoBaseMediaHasTracks: (structure: IsoBaseMediaStructure) => boolean;
|
|
59
60
|
export declare const hasTracks: (structure: Structure, state: ParserState) => boolean;
|
|
61
|
+
export declare const getTracksFromIsoBaseMedia: (segments: IsoBaseMediaBox[]) => {
|
|
62
|
+
videoTracks: VideoTrack[];
|
|
63
|
+
audioTracks: AudioTrack[];
|
|
64
|
+
otherTracks: OtherTrack[];
|
|
65
|
+
};
|
|
60
66
|
export declare const getTracks: (segments: Structure, state: ParserState) => AllTracks;
|
|
61
67
|
export {};
|
package/dist/get-tracks.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getTracks = exports.hasTracks = exports.getNumberOfTracks = void 0;
|
|
3
|
+
exports.getTracks = exports.getTracksFromIsoBaseMedia = exports.hasTracks = 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
6
|
const get_tracks_from_avi_1 = require("./boxes/riff/get-tracks-from-avi");
|
|
@@ -15,6 +15,16 @@ const getNumberOfTracks = (moovBox) => {
|
|
|
15
15
|
return mvHdBox.nextTrackId - 1;
|
|
16
16
|
};
|
|
17
17
|
exports.getNumberOfTracks = getNumberOfTracks;
|
|
18
|
+
const isoBaseMediaHasTracks = (structure) => {
|
|
19
|
+
const moovBox = (0, traversal_1.getMoovBox)(structure.boxes);
|
|
20
|
+
if (!moovBox) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const numberOfTracks = (0, exports.getNumberOfTracks)(moovBox);
|
|
24
|
+
const tracks = (0, traversal_1.getTraks)(moovBox);
|
|
25
|
+
return tracks.length === numberOfTracks;
|
|
26
|
+
};
|
|
27
|
+
exports.isoBaseMediaHasTracks = isoBaseMediaHasTracks;
|
|
18
28
|
const hasTracks = (structure, state) => {
|
|
19
29
|
if (structure.type === 'matroska') {
|
|
20
30
|
const mainSegment = (0, traversal_2.getMainSegment)(structure.boxes);
|
|
@@ -24,13 +34,7 @@ const hasTracks = (structure, state) => {
|
|
|
24
34
|
return (0, traversal_2.getTracksSegment)(mainSegment) !== null;
|
|
25
35
|
}
|
|
26
36
|
if (structure.type === 'iso-base-media') {
|
|
27
|
-
|
|
28
|
-
if (!moovBox) {
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
const numberOfTracks = (0, exports.getNumberOfTracks)(moovBox);
|
|
32
|
-
const tracks = (0, traversal_1.getTraks)(moovBox);
|
|
33
|
-
return tracks.length === numberOfTracks;
|
|
37
|
+
return (0, exports.isoBaseMediaHasTracks)(structure);
|
|
34
38
|
}
|
|
35
39
|
if (structure.type === 'riff') {
|
|
36
40
|
return (0, get_tracks_from_avi_1.hasAllTracksFromAvi)(structure, state);
|
|
@@ -49,7 +53,7 @@ const getTracksFromMa = (segments, state) => {
|
|
|
49
53
|
if (!mainSegment) {
|
|
50
54
|
throw new Error('No main segment found');
|
|
51
55
|
}
|
|
52
|
-
const matroskaTracks = (0, get_ready_tracks_1.getTracksFromMatroska)(mainSegment, state.getTimescale());
|
|
56
|
+
const matroskaTracks = (0, get_ready_tracks_1.getTracksFromMatroska)(mainSegment, state.webm.getTimescale());
|
|
53
57
|
for (const track of matroskaTracks) {
|
|
54
58
|
if (track.type === 'video') {
|
|
55
59
|
videoTracks.push(track);
|
|
@@ -101,12 +105,13 @@ const getTracksFromIsoBaseMedia = (segments) => {
|
|
|
101
105
|
otherTracks,
|
|
102
106
|
};
|
|
103
107
|
};
|
|
108
|
+
exports.getTracksFromIsoBaseMedia = getTracksFromIsoBaseMedia;
|
|
104
109
|
const getTracks = (segments, state) => {
|
|
105
110
|
if (segments.type === 'matroska') {
|
|
106
111
|
return getTracksFromMa(segments.boxes, state);
|
|
107
112
|
}
|
|
108
113
|
if (segments.type === 'iso-base-media') {
|
|
109
|
-
return getTracksFromIsoBaseMedia(segments.boxes);
|
|
114
|
+
return (0, exports.getTracksFromIsoBaseMedia)(segments.boxes);
|
|
110
115
|
}
|
|
111
116
|
if (segments.type === 'riff') {
|
|
112
117
|
return (0, get_tracks_from_avi_1.getTracksFromAvi)(segments, state);
|
package/dist/has-all-info.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { Options, ParseMediaFields } from './options';
|
|
2
|
-
import type { Structure } from './parse-result';
|
|
3
2
|
import type { ParserState } from './state/parser-state';
|
|
4
|
-
export declare const getAvailableInfo: (
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
export declare const getAvailableInfo: ({ fieldsToFetch, state, }: {
|
|
4
|
+
fieldsToFetch: Options<ParseMediaFields>;
|
|
5
|
+
state: ParserState;
|
|
6
|
+
}) => Record<keyof Options<ParseMediaFields>, boolean>;
|
|
7
|
+
export declare const hasAllInfo: ({ fields, state, }: {
|
|
7
8
|
fields: Options<ParseMediaFields>;
|
|
8
9
|
state: ParserState;
|
|
9
10
|
}) => boolean;
|
package/dist/has-all-info.js
CHANGED
|
@@ -7,10 +7,13 @@ const get_dimensions_1 = require("./get-dimensions");
|
|
|
7
7
|
const get_duration_1 = require("./get-duration");
|
|
8
8
|
const get_fps_1 = require("./get-fps");
|
|
9
9
|
const get_is_hdr_1 = require("./get-is-hdr");
|
|
10
|
+
const get_keyframes_1 = require("./get-keyframes");
|
|
10
11
|
const get_tracks_1 = require("./get-tracks");
|
|
11
12
|
const get_video_codec_1 = require("./get-video-codec");
|
|
12
|
-
const
|
|
13
|
-
|
|
13
|
+
const may_skip_video_data_1 = require("./may-skip-video-data/may-skip-video-data");
|
|
14
|
+
const getAvailableInfo = ({ fieldsToFetch, state, }) => {
|
|
15
|
+
const keys = Object.entries(fieldsToFetch).filter(([, value]) => value);
|
|
16
|
+
const structure = state.structure.getStructureOrNull();
|
|
14
17
|
const infos = keys.map(([_key]) => {
|
|
15
18
|
const key = _key;
|
|
16
19
|
if (key === 'structure') {
|
|
@@ -19,6 +22,9 @@ const getAvailableInfo = (options, structure, state) => {
|
|
|
19
22
|
if (key === 'durationInSeconds') {
|
|
20
23
|
return Boolean(structure && (0, get_duration_1.hasDuration)(structure, state));
|
|
21
24
|
}
|
|
25
|
+
if (key === 'slowDurationInSeconds') {
|
|
26
|
+
return Boolean(structure && (0, get_duration_1.hasSlowDuration)(structure, state));
|
|
27
|
+
}
|
|
22
28
|
if (key === 'dimensions' ||
|
|
23
29
|
key === 'rotation' ||
|
|
24
30
|
key === 'unrotatedDimensions') {
|
|
@@ -27,6 +33,10 @@ const getAvailableInfo = (options, structure, state) => {
|
|
|
27
33
|
if (key === 'fps') {
|
|
28
34
|
return Boolean(structure && (0, get_fps_1.hasFps)(structure));
|
|
29
35
|
}
|
|
36
|
+
if (key === 'slowFps') {
|
|
37
|
+
// In case FPS is available an non-null, it also works for `slowFps`
|
|
38
|
+
return Boolean(structure && (0, get_fps_1.hasFpsSuitedForSlowFps)(structure));
|
|
39
|
+
}
|
|
30
40
|
if (key === 'isHdr') {
|
|
31
41
|
return Boolean(structure && (0, get_is_hdr_1.hasHdr)(structure, state));
|
|
32
42
|
}
|
|
@@ -39,12 +49,18 @@ const getAvailableInfo = (options, structure, state) => {
|
|
|
39
49
|
if (key === 'tracks') {
|
|
40
50
|
return Boolean(structure && (0, get_tracks_1.hasTracks)(structure, state));
|
|
41
51
|
}
|
|
52
|
+
if (key === 'keyframes') {
|
|
53
|
+
return Boolean(structure && (0, get_keyframes_1.hasKeyframes)(structure, state));
|
|
54
|
+
}
|
|
42
55
|
if (key === 'internalStats') {
|
|
43
56
|
return true;
|
|
44
57
|
}
|
|
45
58
|
if (key === 'size') {
|
|
46
59
|
return true;
|
|
47
60
|
}
|
|
61
|
+
if (key === 'mimeType') {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
48
64
|
if (key === 'name') {
|
|
49
65
|
return true;
|
|
50
66
|
}
|
|
@@ -54,6 +70,12 @@ const getAvailableInfo = (options, structure, state) => {
|
|
|
54
70
|
if (key === 'metadata' || key === 'location') {
|
|
55
71
|
return false;
|
|
56
72
|
}
|
|
73
|
+
if (key === 'slowKeyframes') {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
if (key === 'slowNumberOfFrames') {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
57
79
|
throw new Error(`Unknown key: ${key}`);
|
|
58
80
|
});
|
|
59
81
|
const entries = [];
|
|
@@ -64,9 +86,13 @@ const getAvailableInfo = (options, structure, state) => {
|
|
|
64
86
|
return Object.fromEntries(entries);
|
|
65
87
|
};
|
|
66
88
|
exports.getAvailableInfo = getAvailableInfo;
|
|
67
|
-
const hasAllInfo = ({ fields, state,
|
|
68
|
-
const availableInfo = (0, exports.getAvailableInfo)(
|
|
89
|
+
const hasAllInfo = ({ fields, state, }) => {
|
|
90
|
+
const availableInfo = (0, exports.getAvailableInfo)({
|
|
91
|
+
fieldsToFetch: fields !== null && fields !== void 0 ? fields : {},
|
|
92
|
+
state,
|
|
93
|
+
});
|
|
69
94
|
return (Object.values(availableInfo).every(Boolean) &&
|
|
70
|
-
(
|
|
95
|
+
((0, may_skip_video_data_1.maySkipVideoData)({ state }) ||
|
|
96
|
+
state.callbacks.canSkipTracksState.canSkipTracks()));
|
|
71
97
|
};
|
|
72
98
|
exports.hasAllInfo = hasAllInfo;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { IoEventEmitter } from './create/event-emitter';
|
|
2
2
|
import type { ProgressTracker } from './create/progress-tracker';
|
|
3
3
|
import type { LogLevel } from './log';
|
|
4
|
+
export { IsAGifError, IsAnImageError, IsAnUnsupportedAudioTypeError, IsAnUnsupportedFileTypeError, IsAPdfError, } from './errors';
|
|
4
5
|
export { MetadataEntry } from './metadata/get-metadata';
|
|
6
|
+
export { MediaParserKeyframe } from './options';
|
|
5
7
|
export { WriterInterface } from './writers/writer';
|
|
6
8
|
export { AudioTrack, MediaParserAudioCodec, MediaParserVideoCodec, OtherTrack, Track, VideoTrack, VideoTrackColorParams, } from './get-tracks';
|
|
7
9
|
export type { Options, ParseMediaContainer, ParseMediaDynamicOptions, ParseMediaFields, ParseMediaOnProgress, ParseMediaOptions, ParseMediaProgress, ParseMediaResult, TracksField, } from './options';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VERSION = exports.MediaParserInternals = exports.parseMedia = void 0;
|
|
3
|
+
exports.VERSION = exports.MediaParserInternals = exports.parseMedia = exports.IsAPdfError = exports.IsAnUnsupportedFileTypeError = exports.IsAnUnsupportedAudioTypeError = exports.IsAnImageError = exports.IsAGifError = void 0;
|
|
4
4
|
const aac_codecprivate_1 = require("./aac-codecprivate");
|
|
5
5
|
const event_emitter_1 = require("./create/event-emitter");
|
|
6
6
|
const create_iso_base_media_1 = require("./create/iso-base-media/create-iso-base-media");
|
|
@@ -9,6 +9,12 @@ const progress_tracker_1 = require("./create/progress-tracker");
|
|
|
9
9
|
const create_wav_1 = require("./create/wav/create-wav");
|
|
10
10
|
const with_resolvers_1 = require("./create/with-resolvers");
|
|
11
11
|
const log_1 = require("./log");
|
|
12
|
+
var errors_1 = require("./errors");
|
|
13
|
+
Object.defineProperty(exports, "IsAGifError", { enumerable: true, get: function () { return errors_1.IsAGifError; } });
|
|
14
|
+
Object.defineProperty(exports, "IsAnImageError", { enumerable: true, get: function () { return errors_1.IsAnImageError; } });
|
|
15
|
+
Object.defineProperty(exports, "IsAnUnsupportedAudioTypeError", { enumerable: true, get: function () { return errors_1.IsAnUnsupportedAudioTypeError; } });
|
|
16
|
+
Object.defineProperty(exports, "IsAnUnsupportedFileTypeError", { enumerable: true, get: function () { return errors_1.IsAnUnsupportedFileTypeError; } });
|
|
17
|
+
Object.defineProperty(exports, "IsAPdfError", { enumerable: true, get: function () { return errors_1.IsAPdfError; } });
|
|
12
18
|
var parse_media_1 = require("./parse-media");
|
|
13
19
|
Object.defineProperty(exports, "parseMedia", { enumerable: true, get: function () { return parse_media_1.parseMedia; } });
|
|
14
20
|
exports.MediaParserInternals = {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.maySkipVideoData = void 0;
|
|
4
|
+
const need_samples_for_fields_1 = require("./need-samples-for-fields");
|
|
5
|
+
const maySkipVideoData = ({ state }) => {
|
|
6
|
+
return (state.callbacks.tracks.hasAllTracks() &&
|
|
7
|
+
Object.values(state.callbacks.videoSampleCallbacks).length === 0 &&
|
|
8
|
+
Object.values(state.callbacks.audioSampleCallbacks).length === 0 &&
|
|
9
|
+
!(0, need_samples_for_fields_1.needsToIterateOverSamples)({
|
|
10
|
+
emittedFields: state.emittedFields,
|
|
11
|
+
fields: state.fields,
|
|
12
|
+
}));
|
|
13
|
+
};
|
|
14
|
+
exports.maySkipVideoData = maySkipVideoData;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.needsToIterateOverSamples = void 0;
|
|
4
|
+
const needsSamples = {
|
|
5
|
+
slowDurationInSeconds: true,
|
|
6
|
+
slowFps: true,
|
|
7
|
+
slowKeyframes: true,
|
|
8
|
+
slowNumberOfFrames: true,
|
|
9
|
+
audioCodec: false,
|
|
10
|
+
container: false,
|
|
11
|
+
dimensions: false,
|
|
12
|
+
durationInSeconds: false,
|
|
13
|
+
fps: false,
|
|
14
|
+
internalStats: false,
|
|
15
|
+
isHdr: false,
|
|
16
|
+
name: false,
|
|
17
|
+
rotation: false,
|
|
18
|
+
size: false,
|
|
19
|
+
structure: false,
|
|
20
|
+
tracks: false,
|
|
21
|
+
unrotatedDimensions: false,
|
|
22
|
+
videoCodec: false,
|
|
23
|
+
metadata: false,
|
|
24
|
+
location: false,
|
|
25
|
+
mimeType: false,
|
|
26
|
+
keyframes: false,
|
|
27
|
+
};
|
|
28
|
+
const needsToIterateOverSamples = ({ fields, emittedFields, }) => {
|
|
29
|
+
const keys = Object.keys(fields !== null && fields !== void 0 ? fields : {});
|
|
30
|
+
const selectedKeys = keys.filter((k) => fields[k]);
|
|
31
|
+
return selectedKeys.some((k) => needsSamples[k] && !emittedFields[k]);
|
|
32
|
+
};
|
|
33
|
+
exports.needsToIterateOverSamples = needsToIterateOverSamples;
|
package/dist/options.d.ts
CHANGED
|
@@ -11,8 +11,10 @@ export type KnownAudioCodecs = 'aac' | 'mp3' | 'aiff' | 'opus' | 'pcm' | 'vorbis
|
|
|
11
11
|
export type ParseMediaFields = {
|
|
12
12
|
dimensions: boolean;
|
|
13
13
|
durationInSeconds: boolean;
|
|
14
|
+
slowDurationInSeconds: boolean;
|
|
14
15
|
structure: boolean;
|
|
15
16
|
fps: boolean;
|
|
17
|
+
slowFps: boolean;
|
|
16
18
|
videoCodec: boolean;
|
|
17
19
|
audioCodec: boolean;
|
|
18
20
|
tracks: boolean;
|
|
@@ -25,10 +27,17 @@ export type ParseMediaFields = {
|
|
|
25
27
|
isHdr: boolean;
|
|
26
28
|
metadata: boolean;
|
|
27
29
|
location: boolean;
|
|
30
|
+
mimeType: boolean;
|
|
31
|
+
keyframes: boolean;
|
|
32
|
+
slowKeyframes: boolean;
|
|
33
|
+
slowNumberOfFrames: boolean;
|
|
28
34
|
};
|
|
29
35
|
export type AllParseMediaFields = {
|
|
30
36
|
dimensions: true;
|
|
31
37
|
durationInSeconds: true;
|
|
38
|
+
slowDurationInSeconds: true;
|
|
39
|
+
slowNumberOfFrames: true;
|
|
40
|
+
slowFps: true;
|
|
32
41
|
structure: true;
|
|
33
42
|
fps: true;
|
|
34
43
|
videoCodec: true;
|
|
@@ -43,95 +52,101 @@ export type AllParseMediaFields = {
|
|
|
43
52
|
isHdr: true;
|
|
44
53
|
metadata: true;
|
|
45
54
|
location: true;
|
|
55
|
+
mimeType: true;
|
|
56
|
+
keyframes: true;
|
|
57
|
+
slowKeyframes: true;
|
|
46
58
|
};
|
|
47
|
-
export type
|
|
48
|
-
dimensions
|
|
49
|
-
durationInSeconds
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
export type AllOptions<Fields extends ParseMediaFields> = {
|
|
60
|
+
dimensions: Fields['dimensions'];
|
|
61
|
+
durationInSeconds: Fields['durationInSeconds'];
|
|
62
|
+
slowDurationInSeconds: Fields['slowDurationInSeconds'];
|
|
63
|
+
slowFps: Fields['slowFps'];
|
|
64
|
+
structure: Fields['structure'];
|
|
65
|
+
fps: Fields['fps'];
|
|
66
|
+
videoCodec: Fields['videoCodec'];
|
|
67
|
+
audioCodec: Fields['audioCodec'];
|
|
68
|
+
tracks: Fields['tracks'];
|
|
69
|
+
rotation: Fields['rotation'];
|
|
70
|
+
unrotatedDimensions: Fields['unrotatedDimensions'];
|
|
71
|
+
internalStats: Fields['internalStats'];
|
|
72
|
+
size: Fields['size'];
|
|
73
|
+
name: Fields['name'];
|
|
74
|
+
container: Fields['container'];
|
|
75
|
+
isHdr: Fields['isHdr'];
|
|
76
|
+
metadata: Fields['metadata'];
|
|
77
|
+
location: Fields['location'];
|
|
78
|
+
mimeType: Fields['mimeType'];
|
|
79
|
+
keyframes: Fields['keyframes'];
|
|
80
|
+
slowKeyframes: Fields['slowKeyframes'];
|
|
81
|
+
slowNumberOfFrames: Fields['slowNumberOfFrames'];
|
|
64
82
|
};
|
|
83
|
+
export type Options<Fields extends ParseMediaFields> = Partial<AllOptions<Fields>>;
|
|
65
84
|
export type TracksField = {
|
|
66
85
|
videoTracks: VideoTrack[];
|
|
67
86
|
audioTracks: AudioTrack[];
|
|
68
87
|
};
|
|
69
88
|
export type ParseMediaContainer = 'mp4' | 'webm' | 'avi' | 'transport-stream';
|
|
70
|
-
export type
|
|
89
|
+
export type MediaParserKeyframe = {
|
|
90
|
+
positionInBytes: number;
|
|
91
|
+
sizeInBytes: number;
|
|
92
|
+
presentationTimeInSeconds: number;
|
|
93
|
+
decodingTimeInSeconds: number;
|
|
94
|
+
trackId: number;
|
|
95
|
+
};
|
|
96
|
+
export interface ParseMediaCallbacks {
|
|
71
97
|
onDimensions?: (dimensions: Dimensions) => void;
|
|
72
|
-
} : {}) & (Fields['durationInSeconds'] extends true ? {
|
|
73
98
|
onDurationInSeconds?: (durationInSeconds: number | null) => void;
|
|
74
|
-
|
|
99
|
+
onSlowDurationInSeconds?: (durationInSeconds: number) => void;
|
|
100
|
+
onSlowFps?: (fps: number) => void;
|
|
75
101
|
onStructure?: (structure: Structure) => void;
|
|
76
|
-
} : {}) & (Fields['fps'] extends true ? {
|
|
77
102
|
onFps?: (fps: number | null) => void;
|
|
78
|
-
} : {}) & (Fields['videoCodec'] extends true ? {
|
|
79
103
|
onVideoCodec?: (codec: MediaParserVideoCodec | null) => void;
|
|
80
|
-
} : {}) & (Fields['audioCodec'] extends true ? {
|
|
81
104
|
onAudioCodec?: (codec: MediaParserAudioCodec | null) => void;
|
|
82
|
-
} : {}) & (Fields['tracks'] extends true ? {
|
|
83
105
|
onTracks?: (tracks: TracksField) => void;
|
|
84
|
-
} : {}) & (Fields['rotation'] extends true ? {
|
|
85
106
|
onRotation?: (rotation: number | null) => void;
|
|
86
|
-
} : {}) & (Fields['metadata'] extends true ? {
|
|
87
|
-
onMetadata?: (metadata: MetadataEntry[]) => void;
|
|
88
|
-
} : {}) & (Fields['location'] extends true ? {
|
|
89
|
-
onLocation?: (location: MediaParserLocation | null) => void;
|
|
90
|
-
} : {}) & (Fields['unrotatedDimensions'] extends true ? {
|
|
91
107
|
onUnrotatedDimensions?: (dimensions: Dimensions) => void;
|
|
92
|
-
|
|
93
|
-
onIsHdr?: (isHdr: boolean) => void;
|
|
94
|
-
} : {}) & (Fields['size'] extends true ? {
|
|
108
|
+
onInternalStats?: (internalStats: InternalStats) => void;
|
|
95
109
|
onSize?: (size: number | null) => void;
|
|
96
|
-
} : {}) & (Fields['name'] extends true ? {
|
|
97
110
|
onName?: (name: string) => void;
|
|
98
|
-
} : {}) & (Fields['container'] extends true ? {
|
|
99
111
|
onContainer?: (container: ParseMediaContainer) => void;
|
|
100
|
-
|
|
101
|
-
|
|
112
|
+
onIsHdr?: (isHdr: boolean) => void;
|
|
113
|
+
onMetadata?: (metadata: MetadataEntry[]) => void;
|
|
114
|
+
onLocation?: (location: MediaParserLocation | null) => void;
|
|
115
|
+
onMimeType?: (mimeType: string | null) => void;
|
|
116
|
+
onKeyframes?: (keyframes: MediaParserKeyframe[] | null) => void;
|
|
117
|
+
onSlowKeyframes?: (keyframes: MediaParserKeyframe[]) => void;
|
|
118
|
+
onSlowNumberOfFrames?: (samples: number) => void;
|
|
119
|
+
}
|
|
120
|
+
export interface ParseMediaData {
|
|
102
121
|
dimensions: Dimensions;
|
|
103
|
-
} : {}) & (Fields['durationInSeconds'] extends true ? {
|
|
104
122
|
durationInSeconds: number | null;
|
|
105
|
-
|
|
123
|
+
slowDurationInSeconds: number;
|
|
124
|
+
slowFps: number;
|
|
106
125
|
structure: Structure;
|
|
107
|
-
} : {}) & (Fields['fps'] extends true ? {
|
|
108
126
|
fps: number | null;
|
|
109
|
-
} : {}) & (Fields['videoCodec'] extends true ? {
|
|
110
127
|
videoCodec: MediaParserVideoCodec | null;
|
|
111
|
-
} : {}) & (Fields['audioCodec'] extends true ? {
|
|
112
128
|
audioCodec: MediaParserAudioCodec | null;
|
|
113
|
-
|
|
129
|
+
tracks: TracksField;
|
|
114
130
|
rotation: number | null;
|
|
115
|
-
} : {}) & (Fields['unrotatedDimensions'] extends true ? {
|
|
116
131
|
unrotatedDimensions: Dimensions;
|
|
117
|
-
} : {}) & (Fields['isHdr'] extends true ? {
|
|
118
132
|
isHdr: boolean;
|
|
119
|
-
} : {}) & (Fields['internalStats'] extends true ? {
|
|
120
133
|
internalStats: InternalStats;
|
|
121
|
-
} : {}) & (Fields['size'] extends true ? {
|
|
122
134
|
size: number | null;
|
|
123
|
-
} : {}) & (Fields['name'] extends true ? {
|
|
124
135
|
name: string;
|
|
125
|
-
} : {}) & (Fields['metadata'] extends true ? {
|
|
126
136
|
metadata: MetadataEntry[];
|
|
127
|
-
} : {}) & (Fields['location'] extends true ? {
|
|
128
137
|
location: MediaParserLocation | null;
|
|
129
|
-
} : {}) & (Fields['container'] extends true ? {
|
|
130
138
|
container: ParseMediaContainer;
|
|
131
|
-
|
|
139
|
+
mimeType: string | null;
|
|
140
|
+
keyframes: MediaParserKeyframe[] | null;
|
|
141
|
+
slowKeyframes: MediaParserKeyframe[];
|
|
142
|
+
slowNumberOfFrames: number;
|
|
143
|
+
}
|
|
144
|
+
export type ParseMediaResult<T extends Partial<ParseMediaFields>> = {
|
|
145
|
+
[K in keyof T]: T[K] extends true ? K extends keyof ParseMediaData ? ParseMediaData[K] : never : never;
|
|
146
|
+
};
|
|
132
147
|
export type ParseMediaDynamicOptions<F extends Options<ParseMediaFields>> = {
|
|
133
148
|
fields?: F;
|
|
134
|
-
} & ParseMediaCallbacks
|
|
149
|
+
} & ParseMediaCallbacks;
|
|
135
150
|
export type ParseMediaProgress = {
|
|
136
151
|
bytes: number;
|
|
137
152
|
percentage: number | null;
|