@remotion/media-parser 4.0.351 → 4.0.353
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/elst.js +2 -2
- package/dist/containers/iso-base-media/stsd/stss.js +1 -1
- package/dist/esm/index.mjs +4 -4
- package/dist/esm/worker-server-entry.mjs +3 -3
- package/dist/esm/worker-web-entry.mjs +3 -3
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
- package/dist/containers/iso-base-media/mdat/calculate-jump-marks.d.ts +0 -6
- package/dist/containers/iso-base-media/mdat/calculate-jump-marks.js +0 -131
- package/dist/containers/iso-base-media/mvhd.d.ts +0 -30
- package/dist/containers/iso-base-media/mvhd.js +0 -65
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseElst = void 0;
|
|
4
4
|
const parseElst = ({ iterator, size, offset, }) => {
|
|
5
|
-
const {
|
|
5
|
+
const { discardRest } = iterator.startBox(size - 8);
|
|
6
6
|
const version = iterator.getUint8();
|
|
7
7
|
const flags = iterator.getUint24();
|
|
8
8
|
const entryCount = iterator.getUint32();
|
|
@@ -19,7 +19,7 @@ const parseElst = ({ iterator, size, offset, }) => {
|
|
|
19
19
|
mediaRateFraction,
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
discardRest();
|
|
23
23
|
const result = {
|
|
24
24
|
type: 'elst-box',
|
|
25
25
|
version,
|
|
@@ -14,7 +14,7 @@ const parseStss = ({ iterator, offset, boxSize, }) => {
|
|
|
14
14
|
}
|
|
15
15
|
const bytesRemainingInBox = boxSize - (iterator.counter.getOffset() - offset);
|
|
16
16
|
if (bytesRemainingInBox > 0) {
|
|
17
|
-
|
|
17
|
+
iterator.discard(bytesRemainingInBox);
|
|
18
18
|
}
|
|
19
19
|
return {
|
|
20
20
|
type: 'stss-box',
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1979,7 +1979,7 @@ var parseElst = ({
|
|
|
1979
1979
|
size,
|
|
1980
1980
|
offset
|
|
1981
1981
|
}) => {
|
|
1982
|
-
const {
|
|
1982
|
+
const { discardRest } = iterator.startBox(size - 8);
|
|
1983
1983
|
const version = iterator.getUint8();
|
|
1984
1984
|
const flags = iterator.getUint24();
|
|
1985
1985
|
const entryCount = iterator.getUint32();
|
|
@@ -1996,7 +1996,7 @@ var parseElst = ({
|
|
|
1996
1996
|
mediaRateFraction
|
|
1997
1997
|
});
|
|
1998
1998
|
}
|
|
1999
|
-
|
|
1999
|
+
discardRest();
|
|
2000
2000
|
const result = {
|
|
2001
2001
|
type: "elst-box",
|
|
2002
2002
|
version,
|
|
@@ -5096,7 +5096,7 @@ var parseStss = ({
|
|
|
5096
5096
|
}
|
|
5097
5097
|
const bytesRemainingInBox = boxSize - (iterator.counter.getOffset() - offset);
|
|
5098
5098
|
if (bytesRemainingInBox > 0) {
|
|
5099
|
-
|
|
5099
|
+
iterator.discard(bytesRemainingInBox);
|
|
5100
5100
|
}
|
|
5101
5101
|
return {
|
|
5102
5102
|
type: "stss-box",
|
|
@@ -18187,7 +18187,7 @@ var downloadAndParseMedia = async (options) => {
|
|
|
18187
18187
|
return returnValue;
|
|
18188
18188
|
};
|
|
18189
18189
|
// src/version.ts
|
|
18190
|
-
var VERSION = "4.0.
|
|
18190
|
+
var VERSION = "4.0.353";
|
|
18191
18191
|
|
|
18192
18192
|
// src/index.ts
|
|
18193
18193
|
var MediaParserInternals = {
|
|
@@ -9718,7 +9718,7 @@ var parseElst = ({
|
|
|
9718
9718
|
size,
|
|
9719
9719
|
offset
|
|
9720
9720
|
}) => {
|
|
9721
|
-
const {
|
|
9721
|
+
const { discardRest } = iterator.startBox(size - 8);
|
|
9722
9722
|
const version = iterator.getUint8();
|
|
9723
9723
|
const flags = iterator.getUint24();
|
|
9724
9724
|
const entryCount = iterator.getUint32();
|
|
@@ -9735,7 +9735,7 @@ var parseElst = ({
|
|
|
9735
9735
|
mediaRateFraction
|
|
9736
9736
|
});
|
|
9737
9737
|
}
|
|
9738
|
-
|
|
9738
|
+
discardRest();
|
|
9739
9739
|
const result = {
|
|
9740
9740
|
type: "elst-box",
|
|
9741
9741
|
version,
|
|
@@ -11039,7 +11039,7 @@ var parseStss = ({
|
|
|
11039
11039
|
}
|
|
11040
11040
|
const bytesRemainingInBox = boxSize - (iterator.counter.getOffset() - offset);
|
|
11041
11041
|
if (bytesRemainingInBox > 0) {
|
|
11042
|
-
|
|
11042
|
+
iterator.discard(bytesRemainingInBox);
|
|
11043
11043
|
}
|
|
11044
11044
|
return {
|
|
11045
11045
|
type: "stss-box",
|
|
@@ -9615,7 +9615,7 @@ var parseElst = ({
|
|
|
9615
9615
|
size,
|
|
9616
9616
|
offset
|
|
9617
9617
|
}) => {
|
|
9618
|
-
const {
|
|
9618
|
+
const { discardRest } = iterator.startBox(size - 8);
|
|
9619
9619
|
const version = iterator.getUint8();
|
|
9620
9620
|
const flags = iterator.getUint24();
|
|
9621
9621
|
const entryCount = iterator.getUint32();
|
|
@@ -9632,7 +9632,7 @@ var parseElst = ({
|
|
|
9632
9632
|
mediaRateFraction
|
|
9633
9633
|
});
|
|
9634
9634
|
}
|
|
9635
|
-
|
|
9635
|
+
discardRest();
|
|
9636
9636
|
const result = {
|
|
9637
9637
|
type: "elst-box",
|
|
9638
9638
|
version,
|
|
@@ -10936,7 +10936,7 @@ var parseStss = ({
|
|
|
10936
10936
|
}
|
|
10937
10937
|
const bytesRemainingInBox = boxSize - (iterator.counter.getOffset() - offset);
|
|
10938
10938
|
if (bytesRemainingInBox > 0) {
|
|
10939
|
-
|
|
10939
|
+
iterator.discard(bytesRemainingInBox);
|
|
10940
10940
|
}
|
|
10941
10941
|
return {
|
|
10942
10942
|
type: "stss-box",
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "4.0.
|
|
1
|
+
export declare const VERSION = "4.0.353";
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
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.353",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"sideEffects": false,
|
|
9
9
|
"devDependencies": {
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"eslint": "9.19.0",
|
|
12
12
|
"mediabunny": "1.17.0",
|
|
13
13
|
"@types/bun": "1.2.8",
|
|
14
|
-
"@remotion/example-videos": "4.0.
|
|
15
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
14
|
+
"@remotion/example-videos": "4.0.353",
|
|
15
|
+
"@remotion/eslint-config-internal": "4.0.353"
|
|
16
16
|
},
|
|
17
17
|
"publishConfig": {
|
|
18
18
|
"access": "public"
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { MinimalFlatSampleForTesting } from '../../../state/iso-base-media/cached-sample-positions';
|
|
2
|
-
export type JumpMark = {
|
|
3
|
-
afterSampleWithOffset: number;
|
|
4
|
-
jumpToOffset: number;
|
|
5
|
-
};
|
|
6
|
-
export declare const calculateJumpMarks: (samplePositionTracks: MinimalFlatSampleForTesting[][], endOfMdat: number) => JumpMark[];
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
https://discord.com/channels/809501355504959528/1001500302375125055/1364798934832119870
|
|
4
|
-
Android 13 produces MP4 videos where first, all video samples are at the beginning,
|
|
5
|
-
then all audio samples are at the end.
|
|
6
|
-
|
|
7
|
-
This causes issues with our video decoder: "Waited too long for VideoDecoder" because
|
|
8
|
-
the overall progress is stuck.
|
|
9
|
-
*/
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.calculateJumpMarks = void 0;
|
|
12
|
-
// In WebCodecs, we require the tracks to deviate by at most 10 seconds
|
|
13
|
-
// Therefore, we need to emit them to be less than 10 seconds apart
|
|
14
|
-
const MAX_SPREAD_IN_SECONDS = 8;
|
|
15
|
-
const getKey = (samplePositionTrack) => {
|
|
16
|
-
return `${samplePositionTrack.track.trackId}-${samplePositionTrack.samplePosition.decodingTimestamp}`;
|
|
17
|
-
};
|
|
18
|
-
const findBestJump = ({ allSamplesSortedByOffset, visited, progresses, }) => {
|
|
19
|
-
var _a;
|
|
20
|
-
const minProgress = Math.min(...Object.values(progresses));
|
|
21
|
-
const trackNumberWithLowestProgress = (_a = Object.entries(progresses).find(([, progress]) => progress === minProgress)) === null || _a === void 0 ? void 0 : _a[0];
|
|
22
|
-
const firstSampleAboveMinProgress = allSamplesSortedByOffset.findIndex((sample) => sample.track.trackId === Number(trackNumberWithLowestProgress) &&
|
|
23
|
-
!visited.has(getKey(sample)));
|
|
24
|
-
return firstSampleAboveMinProgress;
|
|
25
|
-
};
|
|
26
|
-
const calculateJumpMarks = (samplePositionTracks, endOfMdat) => {
|
|
27
|
-
const progresses = {};
|
|
28
|
-
for (const track of samplePositionTracks) {
|
|
29
|
-
progresses[track[0].track.trackId] = 0;
|
|
30
|
-
}
|
|
31
|
-
const jumpMarks = [];
|
|
32
|
-
const allSamplesSortedByOffset = samplePositionTracks
|
|
33
|
-
.flat(1)
|
|
34
|
-
.sort((a, b) => a.samplePosition.offset - b.samplePosition.offset);
|
|
35
|
-
let indexToVisit = 0;
|
|
36
|
-
const visited = new Set();
|
|
37
|
-
let rollOverToProcess = false;
|
|
38
|
-
const increaseIndex = () => {
|
|
39
|
-
indexToVisit++;
|
|
40
|
-
if (indexToVisit >= allSamplesSortedByOffset.length) {
|
|
41
|
-
rollOverToProcess = true;
|
|
42
|
-
indexToVisit = 0;
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
let lastVisitedSample = null;
|
|
46
|
-
const addJumpMark = ({ firstSampleAboveMinProgress, }) => {
|
|
47
|
-
if (!lastVisitedSample) {
|
|
48
|
-
throw new Error('no last visited sample');
|
|
49
|
-
}
|
|
50
|
-
const jumpMark = {
|
|
51
|
-
afterSampleWithOffset: lastVisitedSample.samplePosition.offset,
|
|
52
|
-
jumpToOffset: allSamplesSortedByOffset[firstSampleAboveMinProgress].samplePosition
|
|
53
|
-
.offset,
|
|
54
|
-
};
|
|
55
|
-
indexToVisit = firstSampleAboveMinProgress;
|
|
56
|
-
jumpMarks.push(jumpMark);
|
|
57
|
-
};
|
|
58
|
-
const addFinalJumpIfNecessary = () => {
|
|
59
|
-
if (indexToVisit === allSamplesSortedByOffset.length - 1) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
jumpMarks.push({
|
|
63
|
-
afterSampleWithOffset: allSamplesSortedByOffset[indexToVisit].samplePosition.offset,
|
|
64
|
-
jumpToOffset: endOfMdat,
|
|
65
|
-
});
|
|
66
|
-
};
|
|
67
|
-
const considerJump = () => {
|
|
68
|
-
const firstSampleAboveMinProgress = findBestJump({
|
|
69
|
-
allSamplesSortedByOffset,
|
|
70
|
-
visited,
|
|
71
|
-
progresses,
|
|
72
|
-
});
|
|
73
|
-
if (firstSampleAboveMinProgress > -1 &&
|
|
74
|
-
firstSampleAboveMinProgress !== indexToVisit + 1) {
|
|
75
|
-
addJumpMark({ firstSampleAboveMinProgress });
|
|
76
|
-
indexToVisit = firstSampleAboveMinProgress;
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
while (true) {
|
|
80
|
-
increaseIndex();
|
|
81
|
-
if (!visited.has(getKey(allSamplesSortedByOffset[indexToVisit]))) {
|
|
82
|
-
break;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
while (true) {
|
|
88
|
-
const currentSamplePosition = allSamplesSortedByOffset[indexToVisit];
|
|
89
|
-
const sampleKey = getKey(currentSamplePosition);
|
|
90
|
-
if (visited.has(sampleKey)) {
|
|
91
|
-
considerJump();
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
visited.add(sampleKey);
|
|
95
|
-
if (rollOverToProcess) {
|
|
96
|
-
if (!lastVisitedSample) {
|
|
97
|
-
throw new Error('no last visited sample');
|
|
98
|
-
}
|
|
99
|
-
jumpMarks.push({
|
|
100
|
-
afterSampleWithOffset: lastVisitedSample.samplePosition.offset,
|
|
101
|
-
jumpToOffset: currentSamplePosition.samplePosition.offset,
|
|
102
|
-
});
|
|
103
|
-
rollOverToProcess = false;
|
|
104
|
-
}
|
|
105
|
-
lastVisitedSample = currentSamplePosition;
|
|
106
|
-
if (visited.size === allSamplesSortedByOffset.length) {
|
|
107
|
-
addFinalJumpIfNecessary();
|
|
108
|
-
break;
|
|
109
|
-
}
|
|
110
|
-
const timestamp = currentSamplePosition.samplePosition.decodingTimestamp /
|
|
111
|
-
currentSamplePosition.track.originalTimescale;
|
|
112
|
-
progresses[currentSamplePosition.track.trackId] = timestamp;
|
|
113
|
-
const progressValues = Object.values(progresses);
|
|
114
|
-
const maxProgress = Math.max(...progressValues);
|
|
115
|
-
const minProgress = Math.min(...progressValues);
|
|
116
|
-
const spread = maxProgress - minProgress;
|
|
117
|
-
if (visited.size === allSamplesSortedByOffset.length) {
|
|
118
|
-
addFinalJumpIfNecessary();
|
|
119
|
-
break;
|
|
120
|
-
}
|
|
121
|
-
// Also don't allow audio progress to go more
|
|
122
|
-
if (spread > MAX_SPREAD_IN_SECONDS) {
|
|
123
|
-
considerJump();
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
increaseIndex();
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return jumpMarks;
|
|
130
|
-
};
|
|
131
|
-
exports.calculateJumpMarks = calculateJumpMarks;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { BufferIterator } from '../../iterator/buffer-iterator';
|
|
2
|
-
import type { BaseBox } from './base-type';
|
|
3
|
-
export type ThreeDMatrix = [
|
|
4
|
-
number,
|
|
5
|
-
number,
|
|
6
|
-
number,
|
|
7
|
-
number,
|
|
8
|
-
number,
|
|
9
|
-
number,
|
|
10
|
-
number,
|
|
11
|
-
number,
|
|
12
|
-
number
|
|
13
|
-
];
|
|
14
|
-
export interface MvhdBox extends BaseBox {
|
|
15
|
-
durationInUnits: number;
|
|
16
|
-
durationInSeconds: number;
|
|
17
|
-
creationTime: number | null;
|
|
18
|
-
modificationTime: number | null;
|
|
19
|
-
timeScale: number;
|
|
20
|
-
rate: number;
|
|
21
|
-
volume: number;
|
|
22
|
-
matrix: ThreeDMatrix;
|
|
23
|
-
nextTrackId: number;
|
|
24
|
-
type: 'mvhd-box';
|
|
25
|
-
}
|
|
26
|
-
export declare const parseMvhd: ({ iterator, offset, size, }: {
|
|
27
|
-
iterator: BufferIterator;
|
|
28
|
-
offset: number;
|
|
29
|
-
size: number;
|
|
30
|
-
}) => MvhdBox;
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseMvhd = void 0;
|
|
4
|
-
const buffer_iterator_1 = require("../../iterator/buffer-iterator");
|
|
5
|
-
const to_date_1 = require("./to-date");
|
|
6
|
-
const parseMvhd = ({ iterator, offset, size, }) => {
|
|
7
|
-
const version = iterator.getUint8();
|
|
8
|
-
// Flags, we discard them
|
|
9
|
-
iterator.discard(3);
|
|
10
|
-
const creationTime = version === 1 ? iterator.getUint64() : iterator.getUint32();
|
|
11
|
-
const modificationTime = version === 1 ? iterator.getUint64() : iterator.getUint32();
|
|
12
|
-
const timeScale = iterator.getUint32();
|
|
13
|
-
const durationInUnits = version === 1 ? iterator.getUint64() : iterator.getUint32();
|
|
14
|
-
const durationInSeconds = Number(durationInUnits) / timeScale;
|
|
15
|
-
const rateArray = iterator.getSlice(4);
|
|
16
|
-
const rateView = (0, buffer_iterator_1.getArrayBufferIterator)(rateArray, rateArray.length);
|
|
17
|
-
const rate = rateView.getInt8() * 10 +
|
|
18
|
-
rateView.getInt8() +
|
|
19
|
-
rateView.getInt8() * 0.1 +
|
|
20
|
-
rateView.getInt8() * 0.01;
|
|
21
|
-
const volumeArray = iterator.getSlice(2);
|
|
22
|
-
const volumeView = (0, buffer_iterator_1.getArrayBufferIterator)(volumeArray, volumeArray.length);
|
|
23
|
-
const volume = volumeView.getInt8() + volumeView.getInt8() * 0.1;
|
|
24
|
-
// reserved 16bit
|
|
25
|
-
iterator.discard(2);
|
|
26
|
-
// reserved 32bit x2
|
|
27
|
-
iterator.discard(4);
|
|
28
|
-
iterator.discard(4);
|
|
29
|
-
// matrix
|
|
30
|
-
const matrix = [
|
|
31
|
-
iterator.getFixedPointSigned1616Number(),
|
|
32
|
-
iterator.getFixedPointSigned1616Number(),
|
|
33
|
-
iterator.getFixedPointSigned230Number(),
|
|
34
|
-
iterator.getFixedPointSigned1616Number(),
|
|
35
|
-
iterator.getFixedPointSigned1616Number(),
|
|
36
|
-
iterator.getFixedPointSigned230Number(),
|
|
37
|
-
iterator.getFixedPointSigned1616Number(),
|
|
38
|
-
iterator.getFixedPointSigned1616Number(),
|
|
39
|
-
iterator.getFixedPointSigned230Number(),
|
|
40
|
-
];
|
|
41
|
-
// pre-defined
|
|
42
|
-
iterator.discard(4 * 6);
|
|
43
|
-
// next track id
|
|
44
|
-
const nextTrackId = iterator.getUint32();
|
|
45
|
-
volumeView.destroy();
|
|
46
|
-
const bytesRemaining = size - (iterator.counter.getOffset() - offset);
|
|
47
|
-
if (bytesRemaining !== 0) {
|
|
48
|
-
throw new Error('expected 0 bytes ' + bytesRemaining);
|
|
49
|
-
}
|
|
50
|
-
return {
|
|
51
|
-
creationTime: (0, to_date_1.toUnixTimestamp)(Number(creationTime)),
|
|
52
|
-
modificationTime: (0, to_date_1.toUnixTimestamp)(Number(modificationTime)),
|
|
53
|
-
timeScale,
|
|
54
|
-
durationInUnits: Number(durationInUnits),
|
|
55
|
-
durationInSeconds,
|
|
56
|
-
rate,
|
|
57
|
-
volume,
|
|
58
|
-
matrix: matrix,
|
|
59
|
-
nextTrackId,
|
|
60
|
-
type: 'mvhd-box',
|
|
61
|
-
boxSize: size,
|
|
62
|
-
offset,
|
|
63
|
-
};
|
|
64
|
-
};
|
|
65
|
-
exports.parseMvhd = parseMvhd;
|