@remotion/webcodecs 4.0.244 → 4.0.246
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/LICENSE.md +1 -1
- package/dist/audio-decoder.d.ts +2 -1
- package/dist/audio-encoder.d.ts +2 -1
- package/dist/auto-select-writer.d.ts +1 -1
- package/dist/auto-select-writer.js +4 -4
- package/dist/convert-encoded-chunk.d.ts +0 -1
- package/dist/convert-encoded-chunk.js +1 -21
- package/dist/convert-media.d.ts +3 -2
- package/dist/convert-media.js +5 -3
- package/dist/create/event-emitter.d.ts +31 -0
- package/dist/create/event-emitter.js +25 -0
- package/dist/create/iso-base-media/codec-specific/avc1.d.ts +2 -0
- package/dist/create/iso-base-media/codec-specific/avc1.js +48 -0
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +22 -0
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +36 -0
- package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +2 -0
- package/dist/create/iso-base-media/codec-specific/mp4a.js +74 -0
- package/dist/create/iso-base-media/create-colr.d.ts +6 -0
- package/dist/create/iso-base-media/create-colr.js +26 -0
- package/dist/create/iso-base-media/create-ftyp.d.ts +10 -0
- package/dist/create/iso-base-media/create-ftyp.js +22 -0
- package/dist/create/iso-base-media/create-ilst.d.ts +1 -0
- package/dist/create/iso-base-media/create-ilst.js +14 -0
- package/dist/create/iso-base-media/create-iso-base-media.d.ts +2 -0
- package/dist/create/iso-base-media/create-iso-base-media.js +184 -0
- package/dist/create/iso-base-media/create-mdia.d.ts +5 -0
- package/dist/create/iso-base-media/create-mdia.js +18 -0
- package/dist/create/iso-base-media/create-moov.d.ts +5 -0
- package/dist/create/iso-base-media/create-moov.js +18 -0
- package/dist/create/iso-base-media/create-mvhd.d.ts +10 -0
- package/dist/create/iso-base-media/create-mvhd.js +48 -0
- package/dist/create/iso-base-media/create-trak.d.ts +4 -0
- package/dist/create/iso-base-media/create-trak.js +17 -0
- package/dist/create/iso-base-media/create-udta.d.ts +1 -0
- package/dist/create/iso-base-media/create-udta.js +14 -0
- package/dist/create/iso-base-media/create-url.d.ts +1 -0
- package/dist/create/iso-base-media/create-url.js +16 -0
- package/dist/create/iso-base-media/example-stts.d.ts +3 -0
- package/dist/create/iso-base-media/example-stts.js +2797 -0
- package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -0
- package/dist/create/iso-base-media/ilst/create-cmt.js +26 -0
- package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -0
- package/dist/create/iso-base-media/ilst/create-too.js +27 -0
- package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +6 -0
- package/dist/create/iso-base-media/mdia/create-mdhd.js +33 -0
- package/dist/create/iso-base-media/mp4-header.d.ts +6 -0
- package/dist/create/iso-base-media/mp4-header.js +48 -0
- package/dist/create/iso-base-media/primitives.d.ts +26 -0
- package/dist/create/iso-base-media/primitives.js +133 -0
- package/dist/create/iso-base-media/serialize-track.d.ts +9 -0
- package/dist/create/iso-base-media/serialize-track.js +63 -0
- package/dist/create/iso-base-media/trak/create-tkhd.d.ts +27 -0
- package/dist/create/iso-base-media/trak/create-tkhd.js +97 -0
- package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +4 -0
- package/dist/create/iso-base-media/trak/mdia/create-minf.js +19 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.js +22 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +6 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +41 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +45 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.js +28 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.js +56 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.js +23 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.js +25 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +51 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.js +16 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.js +13 -0
- package/dist/create/iso-base-media/udta/create-meta.d.ts +4 -0
- package/dist/create/iso-base-media/udta/create-meta.js +20 -0
- package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -0
- package/dist/create/iso-base-media/udta/meta/create-hdlr.js +32 -0
- package/dist/create/make-track-info.d.ts +20 -0
- package/dist/create/matroska/cluster-segment.d.ts +10 -0
- package/dist/create/matroska/cluster-segment.js +38 -0
- package/dist/create/matroska/cluster.d.ts +25 -0
- package/dist/create/matroska/cluster.js +76 -0
- package/dist/create/matroska/color.d.ts +2 -0
- package/dist/create/matroska/color.js +85 -0
- package/dist/create/matroska/create-matroska-media.d.ts +2 -0
- package/dist/create/matroska/create-matroska-media.js +189 -0
- package/dist/create/matroska/make-duration-with-padding.d.ts +1 -0
- package/dist/create/matroska/make-duration-with-padding.js +15 -0
- package/dist/create/matroska/matroska-cues.d.ts +6 -0
- package/dist/create/matroska/matroska-cues.js +49 -0
- package/dist/create/matroska/matroska-header.d.ts +1 -0
- package/dist/create/matroska/matroska-header.js +66 -0
- package/dist/create/matroska/matroska-info.d.ts +3 -0
- package/dist/create/matroska/matroska-info.js +33 -0
- package/dist/create/matroska/matroska-seek.d.ts +6 -0
- package/dist/create/matroska/matroska-seek.js +32 -0
- package/dist/create/matroska/matroska-segment.d.ts +3 -0
- package/dist/create/matroska/matroska-segment.js +13 -0
- package/dist/create/matroska/matroska-trackentry.d.ts +10 -0
- package/dist/create/matroska/matroska-trackentry.js +249 -0
- package/dist/create/matroska/matroska-utils.d.ts +30 -0
- package/dist/create/matroska/matroska-utils.js +292 -0
- package/dist/create/media-fn.d.ts +32 -0
- package/dist/create/progress-tracker.d.ts +9 -0
- package/dist/create/progress-tracker.js +67 -0
- package/dist/create/timescale.d.ts +1 -0
- package/dist/create/timescale.js +4 -0
- package/dist/create/wav/create-wav.d.ts +2 -0
- package/dist/create/wav/create-wav.js +110 -0
- package/dist/create/with-resolvers.d.ts +10 -0
- package/dist/create/with-resolvers.js +28 -0
- package/dist/esm/buffer.mjs +74 -0
- package/dist/esm/index.mjs +2518 -40
- package/dist/esm/web-fs.mjs +92 -0
- package/dist/from-unix-timestamp.d.ts +1 -0
- package/dist/from-unix-timestamp.js +11 -0
- package/dist/index.d.ts +1 -0
- package/dist/io-manager/io-synchronizer.d.ts +1 -1
- package/dist/io-manager/io-synchronizer.js +5 -4
- package/dist/io-manager/make-timeout-promise.js +2 -2
- package/dist/on-audio-track.d.ts +3 -1
- package/dist/on-video-track.d.ts +3 -1
- package/dist/select-container-creator.d.ts +1 -1
- package/dist/select-container-creator.js +6 -4
- package/dist/test/avc1.test.d.ts +1 -0
- package/dist/test/avc1.test.js +39 -0
- package/dist/test/avcc.test.d.ts +1 -0
- package/dist/test/avcc.test.js +15 -0
- package/dist/test/cmt.test.d.ts +1 -0
- package/dist/test/cmt.test.js +13 -0
- package/dist/test/colr.test.d.ts +1 -0
- package/dist/test/colr.test.js +16 -0
- package/dist/test/create-ftyp.test.d.ts +1 -0
- package/dist/test/create-ftyp.test.js +47 -0
- package/dist/test/create-matroska.test.d.ts +1 -0
- package/dist/test/create-matroska.test.js +101 -0
- package/dist/test/create-mvhd.test.d.ts +1 -0
- package/dist/test/create-mvhd.test.js +108 -0
- package/dist/test/ctts.test.d.ts +1 -0
- package/dist/test/ctts.test.js +49 -0
- package/dist/test/dinf.test.d.ts +1 -0
- package/dist/test/dinf.test.js +12 -0
- package/dist/test/ilst.test.d.ts +1 -0
- package/dist/test/ilst.test.js +22 -0
- package/dist/test/mdhd.test.d.ts +1 -0
- package/dist/test/mdhd.test.js +17 -0
- package/dist/test/meta.test.d.ts +1 -0
- package/dist/test/meta.test.js +26 -0
- package/dist/test/mp4a.test.d.ts +1 -0
- package/dist/test/mp4a.test.js +24 -0
- package/dist/test/pasp.test.d.ts +1 -0
- package/dist/test/pasp.test.js +12 -0
- package/dist/test/stbl.test.js +166 -0
- package/dist/test/stco.test.d.ts +1 -0
- package/dist/test/stco.test.js +34 -0
- package/dist/test/stsc.test.d.ts +1 -0
- package/dist/test/stsc.test.js +63 -0
- package/dist/test/stsd.test.d.ts +1 -0
- package/dist/test/stsd.test.js +264 -0
- package/dist/test/stss.test.d.ts +1 -0
- package/dist/test/stss.test.js +14 -0
- package/dist/test/stsz.test.d.ts +1 -0
- package/dist/test/stsz.test.js +43 -0
- package/dist/test/stts.test.d.ts +1 -0
- package/dist/test/stts.test.js +12 -0
- package/dist/test/tkhd.test.d.ts +1 -0
- package/dist/test/tkhd.test.js +175 -0
- package/dist/test/too.test.d.ts +1 -0
- package/dist/test/too.test.js +12 -0
- package/dist/test/url.test.d.ts +1 -0
- package/dist/test/url.test.js +11 -0
- package/dist/truthy.d.ts +3 -0
- package/dist/truthy.js +6 -0
- package/dist/video-decoder.d.ts +2 -1
- package/dist/video-encoder.d.ts +2 -1
- package/dist/writers/buffer-implementation/writer.d.ts +2 -0
- package/dist/writers/buffer-implementation/writer.js +54 -0
- package/dist/writers/buffer.d.ts +2 -0
- package/dist/writers/buffer.js +7 -0
- package/dist/writers/web-fs.d.ts +3 -0
- package/dist/writers/web-fs.js +75 -0
- package/dist/writers/writer.d.ts +15 -0
- package/package.json +36 -5
- package/dist/get-operation-id.js +0 -1
- package/dist/resizing/resizing.d.ts +0 -13
- package/dist/resizing.d.ts +0 -13
- package/dist/rotate-video-frame.d.ts +0 -9
- package/dist/rotate-video-frame.js +0 -53
- package/dist/scaling.d.ts +0 -13
- /package/dist/{resizing.js → create/make-track-info.js} +0 -0
- /package/dist/{resizing/resizing.js → create/media-fn.js} +0 -0
- /package/dist/{get-operation-id.d.ts → test/stbl.test.d.ts} +0 -0
- /package/dist/{scaling.js → writers/writer.js} +0 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createIsoBaseMedia = void 0;
|
|
4
|
+
const media_parser_1 = require("@remotion/media-parser");
|
|
5
|
+
const matroska_utils_1 = require("../matroska/matroska-utils");
|
|
6
|
+
const create_ftyp_1 = require("./create-ftyp");
|
|
7
|
+
const mp4_header_1 = require("./mp4-header");
|
|
8
|
+
const primitives_1 = require("./primitives");
|
|
9
|
+
const CONTAINER_TIMESCALE = 1000;
|
|
10
|
+
const createIsoBaseMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, logLevel, filename, progressTracker, }) => {
|
|
11
|
+
const header = (0, create_ftyp_1.createIsoBaseMediaFtyp)({
|
|
12
|
+
compatibleBrands: ['isom', 'iso2', 'avc1', 'mp42'],
|
|
13
|
+
majorBrand: 'isom',
|
|
14
|
+
minorBrand: 512,
|
|
15
|
+
});
|
|
16
|
+
const w = await writer.createContent({ filename, mimeType: 'video/mp4' });
|
|
17
|
+
await w.write(header);
|
|
18
|
+
let globalDurationInUnits = 0;
|
|
19
|
+
const lowestTrackTimestamps = {};
|
|
20
|
+
const trackDurations = {};
|
|
21
|
+
const currentTracks = [];
|
|
22
|
+
const samplePositions = [];
|
|
23
|
+
const sampleChunkIndices = [];
|
|
24
|
+
const moovOffset = w.getWrittenByteCount();
|
|
25
|
+
const getPaddedMoovAtom = () => {
|
|
26
|
+
return (0, mp4_header_1.createPaddedMoovAtom)({
|
|
27
|
+
durationInUnits: globalDurationInUnits,
|
|
28
|
+
trackInfo: currentTracks.map((track) => {
|
|
29
|
+
var _a, _b;
|
|
30
|
+
return {
|
|
31
|
+
track,
|
|
32
|
+
durationInUnits: (_a = trackDurations[track.trackNumber]) !== null && _a !== void 0 ? _a : 0,
|
|
33
|
+
samplePositions: (_b = samplePositions[track.trackNumber]) !== null && _b !== void 0 ? _b : [],
|
|
34
|
+
timescale: track.timescale,
|
|
35
|
+
};
|
|
36
|
+
}),
|
|
37
|
+
timescale: CONTAINER_TIMESCALE,
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
await w.write(getPaddedMoovAtom());
|
|
41
|
+
let mdatSize = 8;
|
|
42
|
+
const mdatSizeOffset = w.getWrittenByteCount();
|
|
43
|
+
await w.write((0, matroska_utils_1.combineUint8Arrays)([
|
|
44
|
+
// size
|
|
45
|
+
(0, primitives_1.numberTo32BitUIntOrInt)(mdatSize),
|
|
46
|
+
// type
|
|
47
|
+
(0, primitives_1.stringsToUint8Array)('mdat'),
|
|
48
|
+
]));
|
|
49
|
+
const updateMdatSize = async () => {
|
|
50
|
+
await w.updateDataAt(mdatSizeOffset, (0, primitives_1.numberTo32BitUIntOrInt)(mdatSize));
|
|
51
|
+
onBytesProgress(w.getWrittenByteCount());
|
|
52
|
+
};
|
|
53
|
+
const operationProm = { current: Promise.resolve() };
|
|
54
|
+
const updateMoov = async () => {
|
|
55
|
+
await w.updateDataAt(moovOffset, getPaddedMoovAtom());
|
|
56
|
+
onBytesProgress(w.getWrittenByteCount());
|
|
57
|
+
};
|
|
58
|
+
const addCodecPrivateToTrack = ({ trackNumber, codecPrivate, }) => {
|
|
59
|
+
currentTracks.forEach((track) => {
|
|
60
|
+
if (track.trackNumber === trackNumber) {
|
|
61
|
+
track.codecPrivate = codecPrivate;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
let lastChunkWasVideo = false;
|
|
66
|
+
const addSample = async ({ chunk, trackNumber, isVideo, codecPrivate, }) => {
|
|
67
|
+
var _a, _b, _c, _d;
|
|
68
|
+
const position = w.getWrittenByteCount();
|
|
69
|
+
await w.write(chunk.data);
|
|
70
|
+
mdatSize += chunk.data.length;
|
|
71
|
+
onBytesProgress(w.getWrittenByteCount());
|
|
72
|
+
progressTracker.setPossibleLowestTimestamp(Math.min(chunk.timestamp, (_a = chunk.cts) !== null && _a !== void 0 ? _a : Infinity, (_b = chunk.dts) !== null && _b !== void 0 ? _b : Infinity));
|
|
73
|
+
progressTracker.updateTrackProgress(trackNumber, chunk.timestamp);
|
|
74
|
+
if (codecPrivate) {
|
|
75
|
+
addCodecPrivateToTrack({ trackNumber, codecPrivate });
|
|
76
|
+
}
|
|
77
|
+
const currentTrack = currentTracks.find((t) => t.trackNumber === trackNumber);
|
|
78
|
+
if (!currentTrack) {
|
|
79
|
+
throw new Error(`Tried to add sample to track ${trackNumber}, but it doesn't exist`);
|
|
80
|
+
}
|
|
81
|
+
if (!lowestTrackTimestamps[trackNumber] ||
|
|
82
|
+
chunk.timestamp < lowestTrackTimestamps[trackNumber]) {
|
|
83
|
+
lowestTrackTimestamps[trackNumber] = chunk.timestamp;
|
|
84
|
+
}
|
|
85
|
+
if (typeof lowestTrackTimestamps[trackNumber] !== 'number') {
|
|
86
|
+
throw new Error(`Tried to add sample to track ${trackNumber}, but it has no timestamp`);
|
|
87
|
+
}
|
|
88
|
+
const newDurationInMicroSeconds = chunk.timestamp +
|
|
89
|
+
((_c = chunk.duration) !== null && _c !== void 0 ? _c : 0) -
|
|
90
|
+
lowestTrackTimestamps[trackNumber];
|
|
91
|
+
const newDurationInTrackTimeUnits = Math.round(newDurationInMicroSeconds / (1000000 / currentTrack.timescale));
|
|
92
|
+
trackDurations[trackNumber] = newDurationInTrackTimeUnits;
|
|
93
|
+
// webcodecs returns frame duration in microseconds
|
|
94
|
+
const newDurationInMilliseconds = Math.round((newDurationInMicroSeconds / 1000000) * CONTAINER_TIMESCALE);
|
|
95
|
+
if (newDurationInMilliseconds > globalDurationInUnits) {
|
|
96
|
+
globalDurationInUnits = newDurationInMilliseconds;
|
|
97
|
+
onMillisecondsProgress(newDurationInMilliseconds);
|
|
98
|
+
}
|
|
99
|
+
if (!samplePositions[trackNumber]) {
|
|
100
|
+
samplePositions[trackNumber] = [];
|
|
101
|
+
}
|
|
102
|
+
if (typeof sampleChunkIndices[trackNumber] === 'undefined') {
|
|
103
|
+
sampleChunkIndices[trackNumber] = 0;
|
|
104
|
+
}
|
|
105
|
+
// For video, make a new chunk if it's a keyframe
|
|
106
|
+
if (isVideo && chunk.type === 'key') {
|
|
107
|
+
sampleChunkIndices[trackNumber]++;
|
|
108
|
+
} // For audio, make a new chunk every 22 samples, that's how bbb.mp4 is encoded
|
|
109
|
+
else if (!isVideo && samplePositions[trackNumber].length % 22 === 0) {
|
|
110
|
+
sampleChunkIndices[trackNumber]++;
|
|
111
|
+
}
|
|
112
|
+
// Need to create a new chunk if the last chunk was a different type
|
|
113
|
+
else if (lastChunkWasVideo !== isVideo) {
|
|
114
|
+
sampleChunkIndices[trackNumber]++;
|
|
115
|
+
}
|
|
116
|
+
// media parser and EncodedVideoChunk returns timestamps in microseconds
|
|
117
|
+
// need to normalize the timestamps to milliseconds
|
|
118
|
+
const samplePositionToAdd = {
|
|
119
|
+
isKeyframe: chunk.type === 'key',
|
|
120
|
+
offset: position,
|
|
121
|
+
chunk: sampleChunkIndices[trackNumber],
|
|
122
|
+
cts: Math.round((chunk.cts / 1000000) * currentTrack.timescale),
|
|
123
|
+
dts: Math.round((chunk.dts / 1000000) * currentTrack.timescale),
|
|
124
|
+
duration: Math.round((((_d = chunk.duration) !== null && _d !== void 0 ? _d : 0) / 1000000) * currentTrack.timescale),
|
|
125
|
+
size: chunk.data.length,
|
|
126
|
+
};
|
|
127
|
+
lastChunkWasVideo = isVideo;
|
|
128
|
+
samplePositions[trackNumber].push(samplePositionToAdd);
|
|
129
|
+
};
|
|
130
|
+
const addTrack = (track) => {
|
|
131
|
+
const trackNumber = currentTracks.length + 1;
|
|
132
|
+
currentTracks.push({ ...track, trackNumber });
|
|
133
|
+
progressTracker.registerTrack(trackNumber);
|
|
134
|
+
return Promise.resolve({ trackNumber });
|
|
135
|
+
};
|
|
136
|
+
const waitForFinishPromises = [];
|
|
137
|
+
return {
|
|
138
|
+
save: () => {
|
|
139
|
+
return w.save();
|
|
140
|
+
},
|
|
141
|
+
remove: async () => {
|
|
142
|
+
await w.remove();
|
|
143
|
+
},
|
|
144
|
+
addSample: ({ chunk, trackNumber, isVideo, codecPrivate }) => {
|
|
145
|
+
operationProm.current = operationProm.current.then(() => {
|
|
146
|
+
return addSample({
|
|
147
|
+
chunk,
|
|
148
|
+
trackNumber,
|
|
149
|
+
isVideo,
|
|
150
|
+
codecPrivate,
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
return operationProm.current;
|
|
154
|
+
},
|
|
155
|
+
addTrack: (track) => {
|
|
156
|
+
operationProm.current = operationProm.current.then(() => addTrack(track));
|
|
157
|
+
return operationProm.current;
|
|
158
|
+
},
|
|
159
|
+
updateTrackSampleRate: ({ sampleRate, trackNumber }) => {
|
|
160
|
+
currentTracks.forEach((track) => {
|
|
161
|
+
if (track.trackNumber === trackNumber) {
|
|
162
|
+
if (track.type !== 'audio') {
|
|
163
|
+
throw new Error(`Tried to update sample rate of track ${trackNumber}, but it's not an audio track`);
|
|
164
|
+
}
|
|
165
|
+
track.sampleRate = sampleRate;
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
},
|
|
169
|
+
addWaitForFinishPromise: (promise) => {
|
|
170
|
+
waitForFinishPromises.push(promise);
|
|
171
|
+
},
|
|
172
|
+
async waitForFinish() {
|
|
173
|
+
media_parser_1.MediaParserInternals.Log.verbose(logLevel, 'All write operations queued. Waiting for finish...');
|
|
174
|
+
await Promise.all(waitForFinishPromises.map((p) => p()));
|
|
175
|
+
media_parser_1.MediaParserInternals.Log.verbose(logLevel, 'Cleanup tasks executed');
|
|
176
|
+
await operationProm.current;
|
|
177
|
+
await updateMoov();
|
|
178
|
+
await updateMdatSize();
|
|
179
|
+
media_parser_1.MediaParserInternals.Log.verbose(logLevel, 'All write operations done. Waiting for finish...');
|
|
180
|
+
await w.waitForFinish();
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
exports.createIsoBaseMedia = createIsoBaseMedia;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMdia = void 0;
|
|
4
|
+
const matroska_utils_1 = require("../matroska/matroska-utils");
|
|
5
|
+
const primitives_1 = require("./primitives");
|
|
6
|
+
const createMdia = ({ mdhd, hdlr, minf, }) => {
|
|
7
|
+
return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
|
|
8
|
+
// type
|
|
9
|
+
(0, primitives_1.stringsToUint8Array)('mdia'),
|
|
10
|
+
// mdhd
|
|
11
|
+
mdhd,
|
|
12
|
+
// hdlr
|
|
13
|
+
hdlr,
|
|
14
|
+
// minf
|
|
15
|
+
minf,
|
|
16
|
+
]));
|
|
17
|
+
};
|
|
18
|
+
exports.createMdia = createMdia;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMoov = void 0;
|
|
4
|
+
const matroska_utils_1 = require("../matroska/matroska-utils");
|
|
5
|
+
const primitives_1 = require("./primitives");
|
|
6
|
+
const createMoov = ({ mvhd, traks, udta, }) => {
|
|
7
|
+
return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
|
|
8
|
+
// type
|
|
9
|
+
(0, primitives_1.stringsToUint8Array)('moov'),
|
|
10
|
+
// moov atom
|
|
11
|
+
mvhd,
|
|
12
|
+
// traks
|
|
13
|
+
...traks,
|
|
14
|
+
// udta
|
|
15
|
+
udta,
|
|
16
|
+
]));
|
|
17
|
+
};
|
|
18
|
+
exports.createMoov = createMoov;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const createMvhd: ({ timescale, durationInUnits, rate, volume, nextTrackId, matrix, creationTime, modificationTime, }: {
|
|
2
|
+
timescale: number;
|
|
3
|
+
durationInUnits: number;
|
|
4
|
+
rate: number;
|
|
5
|
+
volume: number;
|
|
6
|
+
nextTrackId: number;
|
|
7
|
+
matrix: number[];
|
|
8
|
+
creationTime: number | null;
|
|
9
|
+
modificationTime: number | null;
|
|
10
|
+
}) => Uint8Array;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMvhd = void 0;
|
|
4
|
+
const from_unix_timestamp_1 = require("../../from-unix-timestamp");
|
|
5
|
+
const matroska_utils_1 = require("../matroska/matroska-utils");
|
|
6
|
+
const primitives_1 = require("./primitives");
|
|
7
|
+
const createMvhd = ({ timescale, durationInUnits, rate, volume, nextTrackId, matrix, creationTime, modificationTime, }) => {
|
|
8
|
+
if (matrix.length !== 9) {
|
|
9
|
+
throw new Error('Matrix must be 9 elements long');
|
|
10
|
+
}
|
|
11
|
+
const content = (0, matroska_utils_1.combineUint8Arrays)([
|
|
12
|
+
// type
|
|
13
|
+
(0, primitives_1.stringsToUint8Array)('mvhd'),
|
|
14
|
+
// version
|
|
15
|
+
new Uint8Array([0]),
|
|
16
|
+
// flags
|
|
17
|
+
new Uint8Array([0, 0, 0]),
|
|
18
|
+
// creation time
|
|
19
|
+
creationTime === null
|
|
20
|
+
? (0, primitives_1.numberTo32BitUIntOrInt)(0)
|
|
21
|
+
: (0, primitives_1.numberTo32BitUIntOrInt)((0, from_unix_timestamp_1.fromUnixTimestamp)(creationTime)),
|
|
22
|
+
// modification time
|
|
23
|
+
modificationTime === null
|
|
24
|
+
? (0, primitives_1.numberTo32BitUIntOrInt)(0)
|
|
25
|
+
: (0, primitives_1.numberTo32BitUIntOrInt)((0, from_unix_timestamp_1.fromUnixTimestamp)(modificationTime)),
|
|
26
|
+
// timescale
|
|
27
|
+
(0, primitives_1.numberTo32BitUIntOrInt)(timescale),
|
|
28
|
+
// duration in units, 32bit for version 0
|
|
29
|
+
(0, primitives_1.numberTo32BitUIntOrInt)(durationInUnits),
|
|
30
|
+
// rate
|
|
31
|
+
(0, primitives_1.floatTo16Point1632Bit)(rate),
|
|
32
|
+
// volume
|
|
33
|
+
(0, primitives_1.floatTo16Point16_16Bit)(volume),
|
|
34
|
+
// reserved
|
|
35
|
+
new Uint8Array([0, 0]),
|
|
36
|
+
// reserved
|
|
37
|
+
new Uint8Array([0, 0, 0, 0]),
|
|
38
|
+
// reserved
|
|
39
|
+
new Uint8Array([0, 0, 0, 0]),
|
|
40
|
+
(0, primitives_1.serializeMatrix)(matrix),
|
|
41
|
+
// predefined
|
|
42
|
+
(0, matroska_utils_1.combineUint8Arrays)(new Array(6).fill(new Uint8Array([0, 0, 0, 0]))),
|
|
43
|
+
// next track id
|
|
44
|
+
(0, primitives_1.numberTo32BitUIntOrInt)(nextTrackId),
|
|
45
|
+
]);
|
|
46
|
+
return (0, primitives_1.addSize)(content);
|
|
47
|
+
};
|
|
48
|
+
exports.createMvhd = createMvhd;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTrak = void 0;
|
|
4
|
+
const truthy_1 = require("../../truthy");
|
|
5
|
+
const matroska_utils_1 = require("../matroska/matroska-utils");
|
|
6
|
+
const primitives_1 = require("./primitives");
|
|
7
|
+
const createTrak = ({ tkhd, mdia, }) => {
|
|
8
|
+
return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
|
|
9
|
+
// name
|
|
10
|
+
(0, primitives_1.stringsToUint8Array)('trak'),
|
|
11
|
+
// tkhd
|
|
12
|
+
tkhd,
|
|
13
|
+
// mdia
|
|
14
|
+
mdia,
|
|
15
|
+
].filter(truthy_1.truthy)));
|
|
16
|
+
};
|
|
17
|
+
exports.createTrak = createTrak;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createUdta: (children: Uint8Array) => Uint8Array;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createUdta = void 0;
|
|
4
|
+
const matroska_utils_1 = require("../matroska/matroska-utils");
|
|
5
|
+
const primitives_1 = require("./primitives");
|
|
6
|
+
const createUdta = (children) => {
|
|
7
|
+
return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
|
|
8
|
+
// type
|
|
9
|
+
(0, primitives_1.stringsToUint8Array)('udta'),
|
|
10
|
+
// children
|
|
11
|
+
children,
|
|
12
|
+
]));
|
|
13
|
+
};
|
|
14
|
+
exports.createUdta = createUdta;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createUrlAtom: () => Uint8Array;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createUrlAtom = void 0;
|
|
4
|
+
const matroska_utils_1 = require("../matroska/matroska-utils");
|
|
5
|
+
const primitives_1 = require("./primitives");
|
|
6
|
+
const createUrlAtom = () => {
|
|
7
|
+
return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
|
|
8
|
+
// type
|
|
9
|
+
(0, primitives_1.stringsToUint8Array)('url '),
|
|
10
|
+
// version
|
|
11
|
+
new Uint8Array([0]),
|
|
12
|
+
// flags
|
|
13
|
+
new Uint8Array([0, 0, 1]),
|
|
14
|
+
]));
|
|
15
|
+
};
|
|
16
|
+
exports.createUrlAtom = createUrlAtom;
|