@remotion/media-parser 4.0.229 → 4.0.231
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/boxes/iso-base-media/esds/decoder-specific-config.d.ts +3 -2
- package/dist/boxes/iso-base-media/esds/decoder-specific-config.js +7 -8
- package/dist/boxes/iso-base-media/esds/esds-descriptors.d.ts +4 -2
- package/dist/boxes/iso-base-media/esds/esds-descriptors.js +5 -4
- package/dist/boxes/iso-base-media/esds/esds.d.ts +3 -1
- package/dist/boxes/iso-base-media/esds/esds.js +2 -2
- package/dist/boxes/iso-base-media/make-track.js +2 -1
- package/dist/boxes/iso-base-media/mdat/mdat.js +13 -7
- package/dist/boxes/iso-base-media/moov/moov.d.ts +3 -1
- package/dist/boxes/iso-base-media/moov/moov.js +2 -2
- package/dist/boxes/iso-base-media/mvhd.js +11 -9
- package/dist/boxes/iso-base-media/parse-icc-profile.d.ts +36 -0
- package/dist/boxes/iso-base-media/parse-icc-profile.js +115 -0
- package/dist/boxes/iso-base-media/process-box.d.ts +5 -4
- package/dist/boxes/iso-base-media/process-box.js +17 -14
- package/dist/boxes/iso-base-media/stsd/colr.d.ts +14 -4
- package/dist/boxes/iso-base-media/stsd/colr.js +13 -1
- package/dist/boxes/iso-base-media/stsd/mebx.d.ts +1 -2
- package/dist/boxes/iso-base-media/stsd/mebx.js +2 -2
- package/dist/boxes/iso-base-media/stsd/samples.d.ts +5 -2
- package/dist/boxes/iso-base-media/stsd/samples.js +7 -6
- package/dist/boxes/iso-base-media/stsd/stsd.js +1 -0
- package/dist/boxes/iso-base-media/to-date.d.ts +1 -0
- package/dist/boxes/iso-base-media/to-date.js +9 -1
- package/dist/boxes/iso-base-media/trak/trak.d.ts +3 -1
- package/dist/boxes/iso-base-media/trak/trak.js +2 -2
- package/dist/boxes/webm/av1-codec-private.js +1 -1
- package/dist/boxes/webm/ebml.d.ts +1 -1
- package/dist/boxes/webm/get-sample-from-block.d.ts +4 -4
- package/dist/boxes/webm/get-sample-from-block.js +4 -2
- package/dist/boxes/webm/make-track.js +1 -0
- package/dist/boxes/webm/parse-webm-header.js +23 -4
- package/dist/boxes/webm/segments/parse-children.d.ts +12 -7
- package/dist/boxes/webm/segments/parse-children.js +67 -57
- package/dist/boxes/webm/segments.d.ts +8 -3
- package/dist/boxes/webm/segments.js +70 -39
- package/dist/buffer-iterator.d.ts +1 -1
- package/dist/buffer-iterator.js +1 -8
- 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 +90 -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 +167 -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 +47 -0
- package/dist/create/iso-base-media/primitives.d.ts +15 -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 +35 -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 +48 -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/make-track-info.js +2 -0
- package/dist/create/{cluster-segment.d.ts → matroska/cluster-segment.d.ts} +1 -1
- package/dist/create/{cluster-segment.js → matroska/cluster-segment.js} +2 -2
- package/dist/create/{cluster.d.ts → matroska/cluster.d.ts} +12 -5
- package/dist/create/{cluster.js → matroska/cluster.js} +23 -20
- package/dist/create/matroska/create-matroska-media.d.ts +2 -0
- package/dist/create/{create-media.js → matroska/create-matroska-media.js} +49 -25
- package/dist/create/matroska/make-duration-with-padding.d.ts +1 -0
- package/dist/create/{make-duration-with-padding.js → matroska/make-duration-with-padding.js} +1 -1
- package/dist/create/{matroska-cues.d.ts → matroska/matroska-cues.d.ts} +1 -1
- package/dist/create/{matroska-cues.js → matroska/matroska-cues.js} +1 -1
- package/dist/create/matroska/matroska-header.d.ts +1 -0
- package/dist/create/{matroska-header.js → matroska/matroska-header.js} +1 -1
- package/dist/create/{matroska-info.d.ts → matroska/matroska-info.d.ts} +1 -1
- package/dist/create/{matroska-info.js → matroska/matroska-info.js} +1 -1
- package/dist/create/matroska/matroska-seek.d.ts +6 -0
- package/dist/create/{matroska-seek.js → matroska/matroska-seek.js} +1 -1
- package/dist/create/{matroska-segment.d.ts → matroska/matroska-segment.d.ts} +1 -1
- package/dist/create/{matroska-segment.js → matroska/matroska-segment.js} +1 -1
- package/dist/create/matroska/matroska-trackentry.d.ts +10 -0
- package/dist/create/{matroska-trackentry.js → matroska/matroska-trackentry.js} +9 -3
- package/dist/create/{create-media.d.ts → media-fn.d.ts} +17 -4
- package/dist/create/media-fn.js +2 -0
- package/dist/create/timescale.d.ts +1 -1
- package/dist/create/timescale.js +2 -2
- package/dist/emit-available-info.d.ts +1 -1
- package/dist/emit-available-info.js +23 -10
- package/dist/esm/buffer.mjs +3 -3
- package/dist/esm/index.mjs +2104 -735
- package/dist/esm/web-fs.mjs +2 -2
- package/dist/get-audio-codec.d.ts +2 -1
- package/dist/get-audio-codec.js +29 -10
- package/dist/get-duration.d.ts +5 -0
- package/dist/get-duration.js +7 -3
- package/dist/get-fps.d.ts +1 -0
- package/dist/get-fps.js +24 -13
- package/dist/get-sample-positions.d.ts +1 -0
- package/dist/get-sample-positions.js +1 -0
- package/dist/get-tracks.d.ts +1 -0
- package/dist/get-video-codec.d.ts +2 -2
- package/dist/get-video-codec.js +6 -6
- package/dist/has-all-info.d.ts +1 -1
- package/dist/has-all-info.js +8 -8
- package/dist/index.d.ts +6 -8
- package/dist/index.js +7 -3
- package/dist/options.d.ts +10 -1
- package/dist/parse-media.js +42 -14
- package/dist/parse-result.d.ts +15 -0
- package/dist/parse-video.d.ts +3 -1
- package/dist/parse-video.js +6 -14
- package/dist/parser-state.d.ts +3 -3
- package/dist/readers/reader.d.ts +2 -2
- package/dist/samples-from-moof.js +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +5 -0
- package/dist/webcodec-sample-types.d.ts +7 -20
- package/dist/writers/buffer-implementation/writer.d.ts +2 -2
- package/dist/writers/buffer-implementation/writer.js +3 -3
- package/dist/writers/web-fs.js +2 -3
- package/dist/writers/writer.d.ts +5 -3
- package/package.json +3 -3
- package/dist/create/make-duration-with-padding.d.ts +0 -1
- package/dist/create/matroska-header.d.ts +0 -1
- package/dist/create/matroska-seek.d.ts +0 -6
- package/dist/create/matroska-trackentry.d.ts +0 -27
- package/dist/create/polyfill-audio-sample.d.ts +0 -3
- package/dist/create/polyfill-audio-sample.js +0 -15
- package/dist/writers/buffer-implementation/multi-buffer.d.ts +0 -0
- package/dist/writers/buffer-implementation/multi-buffer.js +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const ebml_1 = require("
|
|
5
|
-
const make_header_1 = require("
|
|
6
|
-
const all_segments_1 = require("
|
|
3
|
+
exports.createMatroskaMedia = void 0;
|
|
4
|
+
const ebml_1 = require("../../boxes/webm/ebml");
|
|
5
|
+
const make_header_1 = require("../../boxes/webm/make-header");
|
|
6
|
+
const all_segments_1 = require("../../boxes/webm/segments/all-segments");
|
|
7
7
|
const cluster_1 = require("./cluster");
|
|
8
8
|
const make_duration_with_padding_1 = require("./make-duration-with-padding");
|
|
9
9
|
const matroska_cues_1 = require("./matroska-cues");
|
|
@@ -12,14 +12,14 @@ const matroska_info_1 = require("./matroska-info");
|
|
|
12
12
|
const matroska_seek_1 = require("./matroska-seek");
|
|
13
13
|
const matroska_segment_1 = require("./matroska-segment");
|
|
14
14
|
const matroska_trackentry_1 = require("./matroska-trackentry");
|
|
15
|
-
const
|
|
16
|
-
const
|
|
15
|
+
const timescale = 1000000;
|
|
16
|
+
const createMatroskaMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, filename, logLevel, }) => {
|
|
17
17
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
18
18
|
const header = (0, matroska_header_1.makeMatroskaHeader)();
|
|
19
|
-
const w = await writer.createContent();
|
|
19
|
+
const w = await writer.createContent({ filename, mimeType: 'video/webm' });
|
|
20
20
|
await w.write(header.bytes);
|
|
21
21
|
const matroskaInfo = (0, matroska_info_1.makeMatroskaInfo)({
|
|
22
|
-
timescale
|
|
22
|
+
timescale,
|
|
23
23
|
});
|
|
24
24
|
const currentTracks = [];
|
|
25
25
|
const seeks = [];
|
|
@@ -69,14 +69,27 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
|
|
|
69
69
|
};
|
|
70
70
|
await w.write(matroskaSegment.bytes);
|
|
71
71
|
const clusterOffset = w.getWrittenByteCount();
|
|
72
|
-
let currentCluster = await (0, cluster_1.makeCluster)(
|
|
72
|
+
let currentCluster = await (0, cluster_1.makeCluster)({
|
|
73
|
+
writer: w,
|
|
74
|
+
clusterStartTimestamp: 0,
|
|
75
|
+
timescale,
|
|
76
|
+
logLevel,
|
|
77
|
+
});
|
|
73
78
|
seeks.push({
|
|
74
79
|
hexString: all_segments_1.matroskaElements.Cluster,
|
|
75
80
|
byte: clusterOffset - seekHeadOffset,
|
|
76
81
|
});
|
|
77
82
|
const trackNumberProgresses = {};
|
|
78
|
-
const getClusterOrMakeNew = async ({ chunk, isVideo, }) => {
|
|
79
|
-
const
|
|
83
|
+
const getClusterOrMakeNew = async ({ chunk, isVideo, trackNumber, }) => {
|
|
84
|
+
const trackProgressValues = Object.values(trackNumberProgresses);
|
|
85
|
+
const smallestProgress = trackProgressValues.length === 0 ? 0 : Math.min(...trackProgressValues);
|
|
86
|
+
// In Safari, samples can arrive out of order, e.g public/bigbuckbunny.mp4
|
|
87
|
+
// Therefore, only updating track number progress if it is a keyframe
|
|
88
|
+
// to allow for timestamps to be lower than the previous one
|
|
89
|
+
// Also doing this AFTER smallestProgress is calculated
|
|
90
|
+
if (chunk.type === 'key') {
|
|
91
|
+
trackNumberProgresses[trackNumber] = chunk.timestamp;
|
|
92
|
+
}
|
|
80
93
|
if (!currentCluster.shouldMakeNewCluster({
|
|
81
94
|
newT: smallestProgress,
|
|
82
95
|
isVideo,
|
|
@@ -84,7 +97,12 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
|
|
|
84
97
|
})) {
|
|
85
98
|
return { cluster: currentCluster, isNew: false, smallestProgress };
|
|
86
99
|
}
|
|
87
|
-
currentCluster = await (0, cluster_1.makeCluster)(
|
|
100
|
+
currentCluster = await (0, cluster_1.makeCluster)({
|
|
101
|
+
writer: w,
|
|
102
|
+
clusterStartTimestamp: smallestProgress,
|
|
103
|
+
timescale,
|
|
104
|
+
logLevel,
|
|
105
|
+
});
|
|
88
106
|
return { cluster: currentCluster, isNew: true, smallestProgress };
|
|
89
107
|
};
|
|
90
108
|
const updateDuration = async (newDuration) => {
|
|
@@ -92,12 +110,12 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
|
|
|
92
110
|
await w.updateDataAt(durationOffset, blocks.bytes);
|
|
93
111
|
onBytesProgress(w.getWrittenByteCount());
|
|
94
112
|
};
|
|
95
|
-
const addSample = async (chunk, trackNumber, isVideo) => {
|
|
113
|
+
const addSample = async ({ chunk, trackNumber, isVideo, }) => {
|
|
96
114
|
var _a;
|
|
97
|
-
trackNumberProgresses[trackNumber] = chunk.timestamp;
|
|
98
115
|
const { cluster, isNew, smallestProgress } = await getClusterOrMakeNew({
|
|
99
116
|
chunk,
|
|
100
117
|
isVideo,
|
|
118
|
+
trackNumber,
|
|
101
119
|
});
|
|
102
120
|
const newDuration = Math.round((chunk.timestamp + ((_a = chunk.duration) !== null && _a !== void 0 ? _a : 0)) / 1000);
|
|
103
121
|
await updateDuration(newDuration);
|
|
@@ -105,7 +123,7 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
|
|
|
105
123
|
if (isNew) {
|
|
106
124
|
const newCluster = w.getWrittenByteCount();
|
|
107
125
|
cues.push({
|
|
108
|
-
time: (0, cluster_1.timestampToClusterTimestamp)(smallestProgress) +
|
|
126
|
+
time: (0, cluster_1.timestampToClusterTimestamp)(smallestProgress, timescale) +
|
|
109
127
|
timecodeRelativeToCluster,
|
|
110
128
|
clusterPosition: newCluster - seekHeadOffset,
|
|
111
129
|
trackNumber,
|
|
@@ -122,15 +140,24 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
|
|
|
122
140
|
const operationProm = { current: Promise.resolve() };
|
|
123
141
|
const waitForFinishPromises = [];
|
|
124
142
|
return {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
143
|
+
updateTrackSampleRate: ({ sampleRate, trackNumber }) => {
|
|
144
|
+
currentTracks.forEach((track) => {
|
|
145
|
+
if (track.trackNumber === trackNumber) {
|
|
146
|
+
if (track.type !== 'audio') {
|
|
147
|
+
throw new Error('track is not audio');
|
|
148
|
+
}
|
|
149
|
+
track.sampleRate = sampleRate;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
},
|
|
153
|
+
save: () => {
|
|
154
|
+
return w.save();
|
|
128
155
|
},
|
|
129
156
|
remove: async () => {
|
|
130
157
|
await w.remove();
|
|
131
158
|
},
|
|
132
|
-
addSample: (chunk, trackNumber, isVideo) => {
|
|
133
|
-
operationProm.current = operationProm.current.then(() => addSample(chunk, trackNumber, isVideo));
|
|
159
|
+
addSample: ({ chunk, trackNumber, isVideo }) => {
|
|
160
|
+
operationProm.current = operationProm.current.then(() => addSample({ chunk, trackNumber, isVideo }));
|
|
134
161
|
return operationProm.current;
|
|
135
162
|
},
|
|
136
163
|
updateDuration: (duration) => {
|
|
@@ -139,10 +166,7 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
|
|
|
139
166
|
},
|
|
140
167
|
addTrack: (track) => {
|
|
141
168
|
const trackNumber = currentTracks.length + 1;
|
|
142
|
-
|
|
143
|
-
? (0, matroska_trackentry_1.makeMatroskaVideoTrackEntryBytes)({ ...track, trackNumber })
|
|
144
|
-
: (0, matroska_trackentry_1.makeMatroskaAudioTrackEntryBytes)({ ...track, trackNumber });
|
|
145
|
-
operationProm.current = operationProm.current.then(() => addTrack(bytes));
|
|
169
|
+
operationProm.current = operationProm.current.then(() => addTrack({ ...track, trackNumber }));
|
|
146
170
|
trackNumbers.push(trackNumber);
|
|
147
171
|
return operationProm.current.then(() => ({ trackNumber }));
|
|
148
172
|
},
|
|
@@ -167,4 +191,4 @@ const createMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, })
|
|
|
167
191
|
},
|
|
168
192
|
};
|
|
169
193
|
};
|
|
170
|
-
exports.
|
|
194
|
+
exports.createMatroskaMedia = createMatroskaMedia;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const makeDurationWithPadding: (newDuration: number) => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
|
package/dist/create/{make-duration-with-padding.js → matroska/make-duration-with-padding.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.makeDurationWithPadding = void 0;
|
|
4
|
-
const make_header_1 = require("
|
|
4
|
+
const make_header_1 = require("../../boxes/webm/make-header");
|
|
5
5
|
const makeDurationWithPadding = (newDuration) => {
|
|
6
6
|
return (0, make_header_1.makeMatroskaBytes)({
|
|
7
7
|
type: 'Duration',
|
|
@@ -3,4 +3,4 @@ export type Cue = {
|
|
|
3
3
|
clusterPosition: number;
|
|
4
4
|
trackNumber: number;
|
|
5
5
|
};
|
|
6
|
-
export declare const createMatroskaCues: (cues: Cue[]) => import("
|
|
6
|
+
export declare const createMatroskaCues: (cues: Cue[]) => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createMatroskaCues = void 0;
|
|
4
|
-
const make_header_1 = require("
|
|
4
|
+
const make_header_1 = require("../../boxes/webm/make-header");
|
|
5
5
|
const createMatroskaCues = (cues) => {
|
|
6
6
|
return (0, make_header_1.makeMatroskaBytes)({
|
|
7
7
|
type: 'Cues',
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const makeMatroskaHeader: () => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.makeMatroskaHeader = void 0;
|
|
4
|
-
const make_header_1 = require("
|
|
4
|
+
const make_header_1 = require("../../boxes/webm/make-header");
|
|
5
5
|
const makeMatroskaHeader = () => {
|
|
6
6
|
return (0, make_header_1.makeMatroskaBytes)({
|
|
7
7
|
type: 'Header',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.makeMatroskaInfo = void 0;
|
|
4
|
-
const make_header_1 = require("
|
|
4
|
+
const make_header_1 = require("../../boxes/webm/make-header");
|
|
5
5
|
const make_duration_with_padding_1 = require("./make-duration-with-padding");
|
|
6
6
|
const makeMatroskaInfo = ({ timescale }) => {
|
|
7
7
|
return (0, make_header_1.makeMatroskaBytes)({
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MatroskaElement } from '../../boxes/webm/segments/all-segments';
|
|
2
|
+
export type Seek = {
|
|
3
|
+
hexString: MatroskaElement;
|
|
4
|
+
byte: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const createMatroskaSeekHead: (seeks: Seek[]) => import("../../boxes/webm/segments/all-segments").BytesAndOffset[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createMatroskaSeekHead = void 0;
|
|
4
|
-
const make_header_1 = require("
|
|
4
|
+
const make_header_1 = require("../../boxes/webm/make-header");
|
|
5
5
|
const createMatroskaSeekHead = (seeks) => {
|
|
6
6
|
return (0, make_header_1.padMatroskaBytes)((0, make_header_1.makeMatroskaBytes)({
|
|
7
7
|
type: 'SeekHead',
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { BytesAndOffset } from '
|
|
1
|
+
import type { BytesAndOffset } from '../../boxes/webm/segments/all-segments';
|
|
2
2
|
export declare const MATROSKA_SEGMENT_MIN_VINT_WIDTH = 8;
|
|
3
3
|
export declare const createMatroskaSegment: (children: BytesAndOffset[]) => BytesAndOffset;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createMatroskaSegment = exports.MATROSKA_SEGMENT_MIN_VINT_WIDTH = void 0;
|
|
4
|
-
const make_header_1 = require("
|
|
4
|
+
const make_header_1 = require("../../boxes/webm/make-header");
|
|
5
5
|
exports.MATROSKA_SEGMENT_MIN_VINT_WIDTH = 8;
|
|
6
6
|
const createMatroskaSegment = (children) => {
|
|
7
7
|
return (0, make_header_1.makeMatroskaBytes)({
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { VideoTrackColorParams } from '../../get-tracks';
|
|
2
|
+
import type { MakeTrackAudio, MakeTrackVideo } from '../make-track-info';
|
|
3
|
+
export declare const makeMatroskaVideoBytes: ({ color, width, height, }: {
|
|
4
|
+
color: VideoTrackColorParams;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
}) => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
|
|
8
|
+
export declare const makeMatroskaAudioTrackEntryBytes: ({ trackNumber, codec, numberOfChannels, sampleRate, codecPrivate, }: MakeTrackAudio) => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
|
|
9
|
+
export declare const makeMatroskaVideoTrackEntryBytes: ({ color, width, height, trackNumber, codec, codecPrivate, }: MakeTrackVideo) => import("../../boxes/webm/segments/all-segments").BytesAndOffset;
|
|
10
|
+
export declare const makeMatroskaTracks: (tracks: (MakeTrackAudio | MakeTrackVideo)[]) => import("../../boxes/webm/segments/all-segments").BytesAndOffset[];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.makeMatroskaTracks = exports.makeMatroskaVideoTrackEntryBytes = exports.makeMatroskaAudioTrackEntryBytes = exports.makeMatroskaVideoBytes = void 0;
|
|
4
|
-
const color_1 = require("
|
|
5
|
-
const make_header_1 = require("
|
|
4
|
+
const color_1 = require("../../boxes/webm/color");
|
|
5
|
+
const make_header_1 = require("../../boxes/webm/make-header");
|
|
6
6
|
const makeMatroskaVideoBytes = ({ color, width, height, }) => {
|
|
7
7
|
return (0, make_header_1.makeMatroskaBytes)({
|
|
8
8
|
type: 'Video',
|
|
@@ -234,9 +234,15 @@ const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, trackNumber, c
|
|
|
234
234
|
};
|
|
235
235
|
exports.makeMatroskaVideoTrackEntryBytes = makeMatroskaVideoTrackEntryBytes;
|
|
236
236
|
const makeMatroskaTracks = (tracks) => {
|
|
237
|
+
const bytesArr = tracks.map((t) => {
|
|
238
|
+
const bytes = t.type === 'video'
|
|
239
|
+
? (0, exports.makeMatroskaVideoTrackEntryBytes)(t)
|
|
240
|
+
: (0, exports.makeMatroskaAudioTrackEntryBytes)(t);
|
|
241
|
+
return bytes;
|
|
242
|
+
});
|
|
237
243
|
return (0, make_header_1.padMatroskaBytes)((0, make_header_1.makeMatroskaBytes)({
|
|
238
244
|
type: 'Tracks',
|
|
239
|
-
value:
|
|
245
|
+
value: bytesArr,
|
|
240
246
|
minVintWidth: null,
|
|
241
247
|
}), 500);
|
|
242
248
|
};
|
|
@@ -1,19 +1,32 @@
|
|
|
1
|
+
import type { LogLevel } from '../log';
|
|
1
2
|
import type { AudioOrVideoSample } from '../webcodec-sample-types';
|
|
2
3
|
import type { WriterInterface } from '../writers/writer';
|
|
3
|
-
import type { MakeTrackAudio, MakeTrackVideo } from './
|
|
4
|
+
import type { MakeTrackAudio, MakeTrackVideo } from './make-track-info';
|
|
4
5
|
export type MediaFn = {
|
|
5
6
|
save: () => Promise<Blob>;
|
|
6
7
|
remove: () => Promise<void>;
|
|
7
|
-
addSample: (
|
|
8
|
+
addSample: (options: {
|
|
9
|
+
chunk: AudioOrVideoSample;
|
|
10
|
+
trackNumber: number;
|
|
11
|
+
isVideo: boolean;
|
|
12
|
+
timescale: number;
|
|
13
|
+
codecPrivate: Uint8Array | null;
|
|
14
|
+
}) => Promise<void>;
|
|
8
15
|
updateDuration: (duration: number) => Promise<void>;
|
|
9
16
|
addTrack: (track: Omit<MakeTrackAudio, 'trackNumber'> | Omit<MakeTrackVideo, 'trackNumber'>) => Promise<{
|
|
10
17
|
trackNumber: number;
|
|
11
18
|
}>;
|
|
12
19
|
addWaitForFinishPromise: (promise: () => Promise<void>) => void;
|
|
13
20
|
waitForFinish: () => Promise<void>;
|
|
21
|
+
updateTrackSampleRate: (options: {
|
|
22
|
+
trackNumber: number;
|
|
23
|
+
sampleRate: number;
|
|
24
|
+
}) => void;
|
|
14
25
|
};
|
|
15
|
-
export
|
|
26
|
+
export type MediaFnGeneratorInput = {
|
|
16
27
|
writer: WriterInterface;
|
|
17
28
|
onBytesProgress: (totalBytes: number) => void;
|
|
18
29
|
onMillisecondsProgress: (totalMilliseconds: number) => void;
|
|
19
|
-
|
|
30
|
+
logLevel: LogLevel;
|
|
31
|
+
filename: string;
|
|
32
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const CREATE_WEBM_TIME_SCALE = 1000000;
|
package/dist/create/timescale.js
CHANGED
|
@@ -3,7 +3,7 @@ import type { ParseResult } from './parse-result';
|
|
|
3
3
|
import type { ParserState } from './parser-state';
|
|
4
4
|
export declare const emitAvailableInfo: ({ hasInfo, parseResult, moreFields, state, returnValue, contentLength, name, }: {
|
|
5
5
|
hasInfo: Record<keyof Options<ParseMediaFields>, boolean>;
|
|
6
|
-
parseResult: ParseResult;
|
|
6
|
+
parseResult: ParseResult | null;
|
|
7
7
|
moreFields: ParseMediaCallbacks<AllParseMediaFields>;
|
|
8
8
|
state: ParserState;
|
|
9
9
|
returnValue: ParseMediaResult<AllParseMediaFields>;
|
|
@@ -13,7 +13,7 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
|
|
|
13
13
|
const keys = Object.keys(hasInfo);
|
|
14
14
|
for (const key of keys) {
|
|
15
15
|
if (key === 'boxes') {
|
|
16
|
-
if (hasInfo.boxes && returnValue.boxes === undefined) {
|
|
16
|
+
if (parseResult && hasInfo.boxes && returnValue.boxes === undefined) {
|
|
17
17
|
(_a = moreFields.onBoxes) === null || _a === void 0 ? void 0 : _a.call(moreFields, parseResult.segments);
|
|
18
18
|
returnValue.boxes = parseResult.segments;
|
|
19
19
|
}
|
|
@@ -21,7 +21,8 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
|
|
|
21
21
|
}
|
|
22
22
|
if (key === 'durationInSeconds') {
|
|
23
23
|
if (hasInfo.durationInSeconds &&
|
|
24
|
-
returnValue.durationInSeconds === undefined
|
|
24
|
+
returnValue.durationInSeconds === undefined &&
|
|
25
|
+
parseResult) {
|
|
25
26
|
const durationInSeconds = (0, get_duration_1.getDuration)(parseResult.segments, state);
|
|
26
27
|
(_b = moreFields.onDurationInSeconds) === null || _b === void 0 ? void 0 : _b.call(moreFields, durationInSeconds);
|
|
27
28
|
returnValue.durationInSeconds = durationInSeconds;
|
|
@@ -29,7 +30,9 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
|
|
|
29
30
|
continue;
|
|
30
31
|
}
|
|
31
32
|
if (key === 'dimensions') {
|
|
32
|
-
if (hasInfo.dimensions &&
|
|
33
|
+
if (hasInfo.dimensions &&
|
|
34
|
+
returnValue.dimensions === undefined &&
|
|
35
|
+
parseResult) {
|
|
33
36
|
const dimensionsQueried = (0, get_dimensions_1.getDimensions)(parseResult.segments, state);
|
|
34
37
|
const dimensions = {
|
|
35
38
|
height: dimensionsQueried.height,
|
|
@@ -42,7 +45,8 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
|
|
|
42
45
|
}
|
|
43
46
|
if (key === 'unrotatedDimensions') {
|
|
44
47
|
if (returnValue.unrotatedDimensions === undefined &&
|
|
45
|
-
hasInfo.unrotatedDimensions
|
|
48
|
+
hasInfo.unrotatedDimensions &&
|
|
49
|
+
parseResult) {
|
|
46
50
|
const dimensionsQueried = (0, get_dimensions_1.getDimensions)(parseResult.segments, state);
|
|
47
51
|
const unrotatedDimensions = {
|
|
48
52
|
height: dimensionsQueried.unrotatedHeight,
|
|
@@ -54,7 +58,9 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
|
|
|
54
58
|
continue;
|
|
55
59
|
}
|
|
56
60
|
if (key === 'rotation') {
|
|
57
|
-
if (returnValue.rotation === undefined &&
|
|
61
|
+
if (returnValue.rotation === undefined &&
|
|
62
|
+
hasInfo.rotation &&
|
|
63
|
+
parseResult) {
|
|
58
64
|
const dimensionsQueried = (0, get_dimensions_1.getDimensions)(parseResult.segments, state);
|
|
59
65
|
const { rotation } = dimensionsQueried;
|
|
60
66
|
(_e = moreFields.onRotation) === null || _e === void 0 ? void 0 : _e.call(moreFields, rotation);
|
|
@@ -63,7 +69,7 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
|
|
|
63
69
|
continue;
|
|
64
70
|
}
|
|
65
71
|
if (key === 'fps') {
|
|
66
|
-
if (returnValue.fps === undefined && hasInfo.fps) {
|
|
72
|
+
if (returnValue.fps === undefined && hasInfo.fps && parseResult) {
|
|
67
73
|
const fps = (0, get_fps_1.getFps)(parseResult.segments);
|
|
68
74
|
(_f = moreFields.onFps) === null || _f === void 0 ? void 0 : _f.call(moreFields, fps);
|
|
69
75
|
returnValue.fps = fps;
|
|
@@ -71,7 +77,9 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
|
|
|
71
77
|
continue;
|
|
72
78
|
}
|
|
73
79
|
if (key === 'videoCodec') {
|
|
74
|
-
if (returnValue.videoCodec === undefined &&
|
|
80
|
+
if (returnValue.videoCodec === undefined &&
|
|
81
|
+
hasInfo.videoCodec &&
|
|
82
|
+
parseResult) {
|
|
75
83
|
const videoCodec = (0, get_video_codec_1.getVideoCodec)(parseResult.segments);
|
|
76
84
|
(_g = moreFields.onVideoCodec) === null || _g === void 0 ? void 0 : _g.call(moreFields, videoCodec);
|
|
77
85
|
returnValue.videoCodec = videoCodec;
|
|
@@ -79,7 +87,9 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
|
|
|
79
87
|
continue;
|
|
80
88
|
}
|
|
81
89
|
if (key === 'audioCodec') {
|
|
82
|
-
if (returnValue.audioCodec === undefined &&
|
|
90
|
+
if (returnValue.audioCodec === undefined &&
|
|
91
|
+
hasInfo.audioCodec &&
|
|
92
|
+
parseResult) {
|
|
83
93
|
const audioCodec = (0, get_audio_codec_1.getAudioCodec)(parseResult.segments, state);
|
|
84
94
|
(_h = moreFields.onAudioCodec) === null || _h === void 0 ? void 0 : _h.call(moreFields, audioCodec);
|
|
85
95
|
returnValue.audioCodec = audioCodec;
|
|
@@ -89,7 +99,8 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
|
|
|
89
99
|
if (key === 'tracks') {
|
|
90
100
|
if (hasInfo.tracks &&
|
|
91
101
|
returnValue.videoTracks === undefined &&
|
|
92
|
-
returnValue.audioTracks === undefined
|
|
102
|
+
returnValue.audioTracks === undefined &&
|
|
103
|
+
parseResult) {
|
|
93
104
|
const { videoTracks, audioTracks } = (0, get_tracks_1.getTracks)(parseResult.segments, state);
|
|
94
105
|
(_j = moreFields.onTracks) === null || _j === void 0 ? void 0 : _j.call(moreFields, { videoTracks, audioTracks });
|
|
95
106
|
returnValue.videoTracks = videoTracks;
|
|
@@ -120,7 +131,9 @@ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValu
|
|
|
120
131
|
continue;
|
|
121
132
|
}
|
|
122
133
|
if (key === 'container') {
|
|
123
|
-
if (returnValue.container === undefined &&
|
|
134
|
+
if (returnValue.container === undefined &&
|
|
135
|
+
hasInfo.container &&
|
|
136
|
+
parseResult) {
|
|
124
137
|
const container = (0, get_container_1.getContainer)(parseResult.segments);
|
|
125
138
|
(_o = moreFields.onContainer) === null || _o === void 0 ? void 0 : _o.call(moreFields, container);
|
|
126
139
|
returnValue.container = container;
|
package/dist/esm/buffer.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/writers/buffer-implementation/writer.ts
|
|
2
|
-
var createContent = () => {
|
|
2
|
+
var createContent = ({ filename, mimeType }) => {
|
|
3
3
|
const buf = new ArrayBuffer(0, {
|
|
4
|
-
maxByteLength:
|
|
4
|
+
maxByteLength: 2000000000
|
|
5
5
|
});
|
|
6
6
|
if (!buf.resize) {
|
|
7
7
|
throw new Error("Could not create buffer writer");
|
|
@@ -29,7 +29,7 @@ var createContent = () => {
|
|
|
29
29
|
return Promise.reject(new Error("Already called .remove() on the result"));
|
|
30
30
|
}
|
|
31
31
|
const arr = new Uint8Array(buf);
|
|
32
|
-
return Promise.resolve(new File([arr.slice()],
|
|
32
|
+
return Promise.resolve(new File([arr.slice()], filename, { type: mimeType }));
|
|
33
33
|
},
|
|
34
34
|
remove() {
|
|
35
35
|
removed = true;
|