@remotion/media-parser 4.0.293 → 4.0.294
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/containers/iso-base-media/are-samples-complete.d.ts +6 -0
- package/dist/containers/iso-base-media/are-samples-complete.js +11 -0
- package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +2 -3
- package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.js +1 -3
- package/dist/containers/iso-base-media/find-track-to-seek.js +9 -2
- package/dist/containers/iso-base-media/get-keyframes.js +6 -2
- package/dist/containers/iso-base-media/get-sample-positions-from-track.d.ts +2 -3
- package/dist/containers/iso-base-media/get-sample-positions-from-track.js +4 -4
- package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.js +6 -1
- package/dist/containers/iso-base-media/mdat/mdat.js +18 -1
- package/dist/containers/iso-base-media/process-box.js +7 -7
- package/dist/containers/iso-base-media/seeking-hints.js +1 -1
- package/dist/containers/iso-base-media/traversal.d.ts +2 -1
- package/dist/containers/iso-base-media/traversal.js +8 -4
- package/dist/emit-available-info.js +26 -26
- package/dist/esm/index.mjs +160 -88
- package/dist/esm/node.mjs +7 -4
- package/dist/esm/universal.mjs +29 -37
- package/dist/esm/web.mjs +22 -33
- package/dist/esm/worker-server-entry.mjs +166 -91
- package/dist/esm/worker-web-entry.mjs +159 -87
- package/dist/get-duration.js +15 -3
- package/dist/has-all-info.js +2 -1
- package/dist/index.d.ts +1 -1
- package/dist/readers/fetch/get-body-and-reader.js +3 -1
- package/dist/readers/from-node.js +7 -3
- package/dist/readers/from-web-file.js +20 -32
- package/dist/readers/reader.d.ts +1 -1
- package/dist/seek-backwards.js +1 -0
- package/dist/seek-forwards.js +1 -0
- package/dist/state/iso-base-media/cached-sample-positions.d.ts +5 -2
- package/dist/state/iso-base-media/cached-sample-positions.js +17 -7
- package/dist/state/iso-base-media/iso-state.d.ts +1 -1
- package/dist/state/iso-base-media/last-moof-box.d.ts +2 -0
- package/dist/state/iso-base-media/last-moof-box.js +21 -0
- package/dist/state/iso-base-media/precomputed-moof.d.ts +1 -0
- package/dist/state/iso-base-media/precomputed-moof.js +1 -0
- package/dist/state/parser-state.d.ts +1 -1
- package/dist/state/parser-state.js +2 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
|
@@ -9,42 +9,30 @@ const webFileReadContent = ({ src, range, controller }) => {
|
|
|
9
9
|
? src
|
|
10
10
|
: typeof range === 'number'
|
|
11
11
|
? src.slice(range)
|
|
12
|
-
: src.slice(range[0], range[1]);
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
const ownController = new AbortController();
|
|
16
|
-
if (ownController) {
|
|
17
|
-
ownController.signal.addEventListener('abort', () => {
|
|
18
|
-
reader.abort();
|
|
19
|
-
}, { once: true });
|
|
20
|
-
}
|
|
12
|
+
: src.slice(range[0], range[1] + 1);
|
|
13
|
+
const stream = part.stream();
|
|
14
|
+
const streamReader = stream.getReader();
|
|
21
15
|
if (controller) {
|
|
22
16
|
controller._internals.signal.addEventListener('abort', () => {
|
|
23
|
-
|
|
17
|
+
streamReader.cancel();
|
|
24
18
|
}, { once: true });
|
|
25
19
|
}
|
|
26
|
-
return
|
|
27
|
-
reader
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
needsContentRange: true,
|
|
43
|
-
});
|
|
44
|
-
};
|
|
45
|
-
reader.onerror = () => {
|
|
46
|
-
reject(reader.error);
|
|
47
|
-
};
|
|
20
|
+
return Promise.resolve({
|
|
21
|
+
reader: {
|
|
22
|
+
reader: streamReader,
|
|
23
|
+
async abort() {
|
|
24
|
+
try {
|
|
25
|
+
await streamReader.cancel();
|
|
26
|
+
}
|
|
27
|
+
catch (_a) { }
|
|
28
|
+
return Promise.resolve();
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
contentLength: src.size,
|
|
32
|
+
name: src instanceof File ? src.name : src.toString(),
|
|
33
|
+
supportsContentRange: true,
|
|
34
|
+
contentType: src.type,
|
|
35
|
+
needsContentRange: true,
|
|
48
36
|
});
|
|
49
37
|
};
|
|
50
38
|
exports.webFileReadContent = webFileReadContent;
|
package/dist/readers/reader.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { ParseMediaRange, ParseMediaSrc } from '../options';
|
|
|
4
4
|
import type { PrefetchCache } from './from-fetch';
|
|
5
5
|
export type Reader = {
|
|
6
6
|
reader: ReadableStreamDefaultReader<Uint8Array>;
|
|
7
|
-
abort: () => void
|
|
7
|
+
abort: () => Promise<void>;
|
|
8
8
|
};
|
|
9
9
|
type ReadResult = {
|
|
10
10
|
reader: Reader;
|
package/dist/seek-backwards.js
CHANGED
|
@@ -13,6 +13,7 @@ const seekBackwards = async ({ iterator, seekTo, readerInterface, src, controlle
|
|
|
13
13
|
// (b) data has been discarded, making new reader
|
|
14
14
|
const time = Date.now();
|
|
15
15
|
log_1.Log.verbose(logLevel, `Seeking in video from position ${iterator.counter.getOffset()} -> ${seekTo}. Re-reading because this portion is not available.`);
|
|
16
|
+
await currentReader.getCurrent().abort();
|
|
16
17
|
const { reader: newReader } = await readerInterface.read({
|
|
17
18
|
src,
|
|
18
19
|
range: seekTo,
|
package/dist/seek-forwards.js
CHANGED
|
@@ -22,6 +22,7 @@ const seekForward = async ({ seekTo, userInitiated, iterator, fields, logLevel,
|
|
|
22
22
|
// (b) starting byte has not been fetched yet, making new reader
|
|
23
23
|
const time = Date.now();
|
|
24
24
|
log_1.Log.verbose(logLevel, `Skipping over video data from position ${iterator.counter.getOffset()} -> ${seekTo}. Re-reading because this portion is not available`);
|
|
25
|
+
await currentReader.getCurrent().abort();
|
|
25
26
|
const { reader: newReader } = await readerInterface.read({
|
|
26
27
|
src,
|
|
27
28
|
range: seekTo,
|
|
@@ -17,12 +17,15 @@ export type MinimalFlatSampleForTesting = {
|
|
|
17
17
|
offset: number;
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
|
-
export declare const calculateFlatSamples: (state
|
|
20
|
+
export declare const calculateFlatSamples: ({ state, mediaSectionStart, }: {
|
|
21
|
+
state: ParserState;
|
|
22
|
+
mediaSectionStart: number;
|
|
23
|
+
}) => {
|
|
21
24
|
track: VideoTrack | AudioTrack | OtherTrack;
|
|
22
25
|
samplePosition: SamplePosition;
|
|
23
26
|
}[][];
|
|
24
27
|
export declare const cachedSamplePositionsState: () => {
|
|
25
|
-
getSamples: (mdatStart: number) => FlatSample[]
|
|
28
|
+
getSamples: (mdatStart: number) => FlatSample[];
|
|
26
29
|
setSamples: (mdatStart: number, samples: FlatSample[]) => void;
|
|
27
30
|
setJumpMarks: (mdatStart: number, marks: JumpMark[]) => void;
|
|
28
31
|
getJumpMarks: (mdatStart: number) => JumpMark[];
|
|
@@ -1,21 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.cachedSamplePositionsState = exports.calculateFlatSamples = void 0;
|
|
4
|
+
const are_samples_complete_1 = require("../../containers/iso-base-media/are-samples-complete");
|
|
4
5
|
const get_sample_positions_from_track_1 = require("../../containers/iso-base-media/get-sample-positions-from-track");
|
|
5
6
|
const traversal_1 = require("../../containers/iso-base-media/traversal");
|
|
6
7
|
const get_tracks_1 = require("../../get-tracks");
|
|
7
|
-
const
|
|
8
|
+
const precomputed_tfra_1 = require("./precomputed-tfra");
|
|
9
|
+
const calculateFlatSamples = ({ state, mediaSectionStart, }) => {
|
|
8
10
|
const tracks = (0, get_tracks_1.getTracks)(state, true);
|
|
9
11
|
const allTracks = [
|
|
10
12
|
...tracks.videoTracks,
|
|
11
13
|
...tracks.audioTracks,
|
|
12
14
|
...tracks.otherTracks,
|
|
13
15
|
];
|
|
16
|
+
const moofBoxes = (0, traversal_1.getMoofBoxes)(state.structure.getIsoStructure().boxes);
|
|
17
|
+
const tfraBoxes = (0, precomputed_tfra_1.deduplicateTfraBoxesByOffset)([
|
|
18
|
+
...state.iso.tfra.getTfraBoxes(),
|
|
19
|
+
...(0, traversal_1.getTfraBoxes)(state.structure.getIsoStructure().boxes),
|
|
20
|
+
]);
|
|
21
|
+
const moofComplete = (0, are_samples_complete_1.areSamplesComplete)({ moofBoxes, tfraBoxes });
|
|
22
|
+
const relevantMoofBox = moofBoxes.find((moofBox) => moofBox.offset + moofBox.size + 8 === mediaSectionStart);
|
|
23
|
+
if (moofBoxes.length > 0 && !relevantMoofBox) {
|
|
24
|
+
throw new Error('No relevant moof box found');
|
|
25
|
+
}
|
|
14
26
|
const flatSamples = allTracks.map((track) => {
|
|
15
27
|
const { samplePositions } = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
|
|
16
28
|
trakBox: track.trakBox,
|
|
17
|
-
moofBoxes:
|
|
18
|
-
|
|
29
|
+
moofBoxes: relevantMoofBox ? [relevantMoofBox] : [],
|
|
30
|
+
moofComplete,
|
|
19
31
|
});
|
|
20
32
|
return samplePositions.map((samplePosition) => {
|
|
21
33
|
return {
|
|
@@ -32,10 +44,8 @@ const cachedSamplePositionsState = () => {
|
|
|
32
44
|
const jumpMarksForMdatStart = {};
|
|
33
45
|
return {
|
|
34
46
|
getSamples: (mdatStart) => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
return null;
|
|
47
|
+
var _a;
|
|
48
|
+
return (_a = cachedForMdatStart[mdatStart]) !== null && _a !== void 0 ? _a : null;
|
|
39
49
|
},
|
|
40
50
|
setSamples: (mdatStart, samples) => {
|
|
41
51
|
cachedForMdatStart[mdatStart] = samples;
|
|
@@ -12,7 +12,7 @@ export declare const isoBaseMediaState: ({ contentLength, controller, readerInte
|
|
|
12
12
|
prefetchCache: PrefetchCache;
|
|
13
13
|
}) => {
|
|
14
14
|
flatSamples: {
|
|
15
|
-
getSamples: (mdatStart: number) => import("./cached-sample-positions").FlatSample[]
|
|
15
|
+
getSamples: (mdatStart: number) => import("./cached-sample-positions").FlatSample[];
|
|
16
16
|
setSamples: (mdatStart: number, samples: import("./cached-sample-positions").FlatSample[]) => void;
|
|
17
17
|
setJumpMarks: (mdatStart: number, marks: import("../../containers/iso-base-media/mdat/calculate-jump-marks").JumpMark[]) => void;
|
|
18
18
|
getJumpMarks: (mdatStart: number) => import("../../containers/iso-base-media/mdat/calculate-jump-marks").JumpMark[];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLastMoofBox = void 0;
|
|
4
|
+
const truthy_1 = require("../../truthy");
|
|
5
|
+
const getLastMoofBox = (boxes) => {
|
|
6
|
+
if (boxes) {
|
|
7
|
+
const tfras = boxes.filter((b) => b.type === 'tfra-box');
|
|
8
|
+
const lastMoofOffsets = tfras.map((f) => {
|
|
9
|
+
if (f.entries.length <= 1) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return f.entries[f.entries.length - 1].moofOffset;
|
|
13
|
+
});
|
|
14
|
+
if (lastMoofOffsets.length > 0) {
|
|
15
|
+
const maxOffset = Math.max(...lastMoofOffsets.filter(truthy_1.truthy));
|
|
16
|
+
return maxOffset;
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.getLastMoofBox = getLastMoofBox;
|
|
@@ -135,7 +135,7 @@ export declare const makeParserState: ({ hasAudioTrackHandlers, hasVideoTrackHan
|
|
|
135
135
|
};
|
|
136
136
|
iso: {
|
|
137
137
|
flatSamples: {
|
|
138
|
-
getSamples: (mdatStart: number) => import("./iso-base-media/cached-sample-positions").FlatSample[]
|
|
138
|
+
getSamples: (mdatStart: number) => import("./iso-base-media/cached-sample-positions").FlatSample[];
|
|
139
139
|
setSamples: (mdatStart: number, samples: import("./iso-base-media/cached-sample-positions").FlatSample[]) => void;
|
|
140
140
|
setJumpMarks: (mdatStart: number, marks: import("../containers/iso-base-media/mdat/calculate-jump-marks").JumpMark[]) => void;
|
|
141
141
|
getJumpMarks: (mdatStart: number) => import("../containers/iso-base-media/mdat/calculate-jump-marks").JumpMark[];
|
|
@@ -52,6 +52,7 @@ const makeParserState = ({ hasAudioTrackHandlers, hasVideoTrackHandlers, control
|
|
|
52
52
|
fields: fieldsInReturnValue,
|
|
53
53
|
callbacks,
|
|
54
54
|
});
|
|
55
|
+
const mediaSection = (0, video_section_1.mediaSectionState)();
|
|
55
56
|
return {
|
|
56
57
|
riff: (0, riff_1.riffSpecificState)({
|
|
57
58
|
controller,
|
|
@@ -112,7 +113,7 @@ const makeParserState = ({ hasAudioTrackHandlers, hasVideoTrackHandlers, control
|
|
|
112
113
|
samplesObserved,
|
|
113
114
|
contentLength,
|
|
114
115
|
images,
|
|
115
|
-
mediaSection
|
|
116
|
+
mediaSection,
|
|
116
117
|
logLevel,
|
|
117
118
|
iterator,
|
|
118
119
|
controller,
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "4.0.
|
|
1
|
+
export declare const VERSION = "4.0.294";
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/media-parser"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/media-parser",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.294",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"sideEffects": false,
|
|
9
9
|
"devDependencies": {
|
|
10
10
|
"@types/wicg-file-system-access": "2023.10.5",
|
|
11
11
|
"eslint": "9.19.0",
|
|
12
12
|
"@types/bun": "1.2.8",
|
|
13
|
-
"@remotion/example-videos": "4.0.
|
|
14
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
13
|
+
"@remotion/example-videos": "4.0.294",
|
|
14
|
+
"@remotion/eslint-config-internal": "4.0.294"
|
|
15
15
|
},
|
|
16
16
|
"publishConfig": {
|
|
17
17
|
"access": "public"
|