@remotion/media-parser 4.0.319 → 4.0.321
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/mvhd.d.ts +30 -0
- package/dist/containers/iso-base-media/mvhd.js +65 -0
- package/dist/containers/wav/parse-wav.js +5 -5
- package/dist/esm/index.mjs +6 -6
- package/dist/esm/server-worker.mjs +24 -3
- package/dist/esm/worker-server-entry.mjs +31 -7
- package/dist/esm/worker-web-entry.mjs +31 -7
- package/dist/esm/worker.mjs +24 -3
- package/dist/parse-media-on-worker-entry.js +24 -3
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker/worker-types.d.ts +6 -0
- package/dist/worker-server.js +26 -2
- package/package.json +3 -3
|
@@ -0,0 +1,30 @@
|
|
|
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;
|
|
@@ -0,0 +1,65 @@
|
|
|
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;
|
|
@@ -16,9 +16,9 @@ const parseWav = (state) => {
|
|
|
16
16
|
if (insideMediaSection === 'in-section') {
|
|
17
17
|
return (0, parse_media_section_1.parseMediaSection)({ state });
|
|
18
18
|
}
|
|
19
|
-
const type = iterator.getByteString(4, false);
|
|
19
|
+
const type = iterator.getByteString(4, false).toLowerCase();
|
|
20
20
|
log_1.Log.trace(state.logLevel, `Processing box type ${type}`);
|
|
21
|
-
if (type === '
|
|
21
|
+
if (type === 'riff') {
|
|
22
22
|
return (0, parse_header_1.parseHeader)({ state });
|
|
23
23
|
}
|
|
24
24
|
if (type === 'fmt') {
|
|
@@ -27,13 +27,13 @@ const parseWav = (state) => {
|
|
|
27
27
|
if (type === 'data') {
|
|
28
28
|
return (0, parse_data_1.parseData)({ state });
|
|
29
29
|
}
|
|
30
|
-
if (type === '
|
|
30
|
+
if (type === 'list') {
|
|
31
31
|
return (0, parse_list_1.parseList)({ state });
|
|
32
32
|
}
|
|
33
|
-
if (type === 'id3'
|
|
33
|
+
if (type === 'id3') {
|
|
34
34
|
return (0, parse_id3_1.parseId3)({ state });
|
|
35
35
|
}
|
|
36
|
-
if (type === '
|
|
36
|
+
if (type === 'junk' || type === 'fllr') {
|
|
37
37
|
return (0, parse_junk_1.parseJunk)({ state });
|
|
38
38
|
}
|
|
39
39
|
if (type === 'fact') {
|
package/dist/esm/index.mjs
CHANGED
|
@@ -15439,9 +15439,9 @@ var parseWav = (state) => {
|
|
|
15439
15439
|
if (insideMediaSection === "in-section") {
|
|
15440
15440
|
return parseMediaSection2({ state });
|
|
15441
15441
|
}
|
|
15442
|
-
const type = iterator.getByteString(4, false);
|
|
15442
|
+
const type = iterator.getByteString(4, false).toLowerCase();
|
|
15443
15443
|
Log.trace(state.logLevel, `Processing box type ${type}`);
|
|
15444
|
-
if (type === "
|
|
15444
|
+
if (type === "riff") {
|
|
15445
15445
|
return parseHeader({ state });
|
|
15446
15446
|
}
|
|
15447
15447
|
if (type === "fmt") {
|
|
@@ -15450,13 +15450,13 @@ var parseWav = (state) => {
|
|
|
15450
15450
|
if (type === "data") {
|
|
15451
15451
|
return parseData({ state });
|
|
15452
15452
|
}
|
|
15453
|
-
if (type === "
|
|
15453
|
+
if (type === "list") {
|
|
15454
15454
|
return parseList({ state });
|
|
15455
15455
|
}
|
|
15456
|
-
if (type === "id3"
|
|
15456
|
+
if (type === "id3") {
|
|
15457
15457
|
return parseId32({ state });
|
|
15458
15458
|
}
|
|
15459
|
-
if (type === "
|
|
15459
|
+
if (type === "junk" || type === "fllr") {
|
|
15460
15460
|
return parseJunk({ state });
|
|
15461
15461
|
}
|
|
15462
15462
|
if (type === "fact") {
|
|
@@ -18105,7 +18105,7 @@ var downloadAndParseMedia = async (options) => {
|
|
|
18105
18105
|
return returnValue;
|
|
18106
18106
|
};
|
|
18107
18107
|
// src/version.ts
|
|
18108
|
-
var VERSION = "4.0.
|
|
18108
|
+
var VERSION = "4.0.321";
|
|
18109
18109
|
|
|
18110
18110
|
// src/index.ts
|
|
18111
18111
|
var MediaParserInternals = {
|
|
@@ -252,6 +252,7 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
|
|
|
252
252
|
return prom.promise;
|
|
253
253
|
});
|
|
254
254
|
const callbacks = {};
|
|
255
|
+
const trackDoneCallbacks = {};
|
|
255
256
|
function onMessage(message) {
|
|
256
257
|
const data = message.data;
|
|
257
258
|
if (data.type === "response-done") {
|
|
@@ -435,15 +436,35 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
|
|
|
435
436
|
if (!callback) {
|
|
436
437
|
throw new Error(`No callback registered for track ${data.payload.trackId}`);
|
|
437
438
|
}
|
|
438
|
-
await callback(data.payload.value);
|
|
439
|
-
|
|
439
|
+
const trackDoneCallback = await callback(data.payload.value);
|
|
440
|
+
if (trackDoneCallback) {
|
|
441
|
+
trackDoneCallbacks[data.payload.trackId] = trackDoneCallback;
|
|
442
|
+
}
|
|
443
|
+
return {
|
|
444
|
+
payloadType: "on-sample-response",
|
|
445
|
+
registeredTrackDoneCallback: Boolean(trackDoneCallback)
|
|
446
|
+
};
|
|
440
447
|
}
|
|
441
448
|
if (data.payload.callbackType === "on-video-sample") {
|
|
442
449
|
const callback = callbacks[data.payload.trackId];
|
|
443
450
|
if (!callback) {
|
|
444
451
|
throw new Error(`No callback registered for track ${data.payload.trackId}`);
|
|
445
452
|
}
|
|
446
|
-
await callback(data.payload.value);
|
|
453
|
+
const trackDoneCallback = await callback(data.payload.value);
|
|
454
|
+
if (trackDoneCallback) {
|
|
455
|
+
trackDoneCallbacks[data.payload.trackId] = trackDoneCallback;
|
|
456
|
+
}
|
|
457
|
+
return {
|
|
458
|
+
payloadType: "on-sample-response",
|
|
459
|
+
registeredTrackDoneCallback: Boolean(trackDoneCallback)
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
if (data.payload.callbackType === "track-done") {
|
|
463
|
+
const trackDoneCallback = trackDoneCallbacks[data.payload.trackId];
|
|
464
|
+
if (!trackDoneCallback) {
|
|
465
|
+
throw new Error(`No track done callback registered for track ${data.payload.trackId}`);
|
|
466
|
+
}
|
|
467
|
+
trackDoneCallback();
|
|
447
468
|
return { payloadType: "void" };
|
|
448
469
|
}
|
|
449
470
|
throw new Error(`Unknown callback type: ${data.payload}`);
|
|
@@ -15170,9 +15170,9 @@ var parseWav = (state) => {
|
|
|
15170
15170
|
if (insideMediaSection === "in-section") {
|
|
15171
15171
|
return parseMediaSection2({ state });
|
|
15172
15172
|
}
|
|
15173
|
-
const type = iterator.getByteString(4, false);
|
|
15173
|
+
const type = iterator.getByteString(4, false).toLowerCase();
|
|
15174
15174
|
Log.trace(state.logLevel, `Processing box type ${type}`);
|
|
15175
|
-
if (type === "
|
|
15175
|
+
if (type === "riff") {
|
|
15176
15176
|
return parseHeader({ state });
|
|
15177
15177
|
}
|
|
15178
15178
|
if (type === "fmt") {
|
|
@@ -15181,13 +15181,13 @@ var parseWav = (state) => {
|
|
|
15181
15181
|
if (type === "data") {
|
|
15182
15182
|
return parseData({ state });
|
|
15183
15183
|
}
|
|
15184
|
-
if (type === "
|
|
15184
|
+
if (type === "list") {
|
|
15185
15185
|
return parseList({ state });
|
|
15186
15186
|
}
|
|
15187
|
-
if (type === "id3"
|
|
15187
|
+
if (type === "id3") {
|
|
15188
15188
|
return parseId32({ state });
|
|
15189
15189
|
}
|
|
15190
|
-
if (type === "
|
|
15190
|
+
if (type === "junk" || type === "fllr") {
|
|
15191
15191
|
return parseJunk({ state });
|
|
15192
15192
|
}
|
|
15193
15193
|
if (type === "fact") {
|
|
@@ -18585,11 +18585,23 @@ var startParsing = async (message, reader) => {
|
|
|
18585
18585
|
return null;
|
|
18586
18586
|
}
|
|
18587
18587
|
return async (sample) => {
|
|
18588
|
-
await executeCallback({
|
|
18588
|
+
const audioSampleRes = await executeCallback({
|
|
18589
18589
|
callbackType: "on-audio-sample",
|
|
18590
18590
|
value: sample,
|
|
18591
18591
|
trackId: params.track.trackId
|
|
18592
18592
|
});
|
|
18593
|
+
if (audioSampleRes.payloadType !== "on-sample-response") {
|
|
18594
|
+
throw new Error("Invalid response from callback");
|
|
18595
|
+
}
|
|
18596
|
+
if (!audioSampleRes.registeredTrackDoneCallback) {
|
|
18597
|
+
return;
|
|
18598
|
+
}
|
|
18599
|
+
return async () => {
|
|
18600
|
+
await executeCallback({
|
|
18601
|
+
callbackType: "track-done",
|
|
18602
|
+
trackId: params.track.trackId
|
|
18603
|
+
});
|
|
18604
|
+
};
|
|
18593
18605
|
};
|
|
18594
18606
|
} : null,
|
|
18595
18607
|
onVideoTrack: postOnVideoTrack ? async (params) => {
|
|
@@ -18604,11 +18616,23 @@ var startParsing = async (message, reader) => {
|
|
|
18604
18616
|
return null;
|
|
18605
18617
|
}
|
|
18606
18618
|
return async (sample) => {
|
|
18607
|
-
await executeCallback({
|
|
18619
|
+
const videoSampleRes = await executeCallback({
|
|
18608
18620
|
callbackType: "on-video-sample",
|
|
18609
18621
|
value: sample,
|
|
18610
18622
|
trackId: params.track.trackId
|
|
18611
18623
|
});
|
|
18624
|
+
if (videoSampleRes.payloadType !== "on-sample-response") {
|
|
18625
|
+
throw new Error("Invalid response from callback");
|
|
18626
|
+
}
|
|
18627
|
+
if (!videoSampleRes.registeredTrackDoneCallback) {
|
|
18628
|
+
return;
|
|
18629
|
+
}
|
|
18630
|
+
return async () => {
|
|
18631
|
+
await executeCallback({
|
|
18632
|
+
callbackType: "track-done",
|
|
18633
|
+
trackId: params.track.trackId
|
|
18634
|
+
});
|
|
18635
|
+
};
|
|
18612
18636
|
};
|
|
18613
18637
|
} : null,
|
|
18614
18638
|
onDiscardedData: null,
|
|
@@ -15039,9 +15039,9 @@ var parseWav = (state) => {
|
|
|
15039
15039
|
if (insideMediaSection === "in-section") {
|
|
15040
15040
|
return parseMediaSection2({ state });
|
|
15041
15041
|
}
|
|
15042
|
-
const type = iterator.getByteString(4, false);
|
|
15042
|
+
const type = iterator.getByteString(4, false).toLowerCase();
|
|
15043
15043
|
Log.trace(state.logLevel, `Processing box type ${type}`);
|
|
15044
|
-
if (type === "
|
|
15044
|
+
if (type === "riff") {
|
|
15045
15045
|
return parseHeader({ state });
|
|
15046
15046
|
}
|
|
15047
15047
|
if (type === "fmt") {
|
|
@@ -15050,13 +15050,13 @@ var parseWav = (state) => {
|
|
|
15050
15050
|
if (type === "data") {
|
|
15051
15051
|
return parseData({ state });
|
|
15052
15052
|
}
|
|
15053
|
-
if (type === "
|
|
15053
|
+
if (type === "list") {
|
|
15054
15054
|
return parseList({ state });
|
|
15055
15055
|
}
|
|
15056
|
-
if (type === "id3"
|
|
15056
|
+
if (type === "id3") {
|
|
15057
15057
|
return parseId32({ state });
|
|
15058
15058
|
}
|
|
15059
|
-
if (type === "
|
|
15059
|
+
if (type === "junk" || type === "fllr") {
|
|
15060
15060
|
return parseJunk({ state });
|
|
15061
15061
|
}
|
|
15062
15062
|
if (type === "fact") {
|
|
@@ -18454,11 +18454,23 @@ var startParsing = async (message, reader) => {
|
|
|
18454
18454
|
return null;
|
|
18455
18455
|
}
|
|
18456
18456
|
return async (sample) => {
|
|
18457
|
-
await executeCallback({
|
|
18457
|
+
const audioSampleRes = await executeCallback({
|
|
18458
18458
|
callbackType: "on-audio-sample",
|
|
18459
18459
|
value: sample,
|
|
18460
18460
|
trackId: params.track.trackId
|
|
18461
18461
|
});
|
|
18462
|
+
if (audioSampleRes.payloadType !== "on-sample-response") {
|
|
18463
|
+
throw new Error("Invalid response from callback");
|
|
18464
|
+
}
|
|
18465
|
+
if (!audioSampleRes.registeredTrackDoneCallback) {
|
|
18466
|
+
return;
|
|
18467
|
+
}
|
|
18468
|
+
return async () => {
|
|
18469
|
+
await executeCallback({
|
|
18470
|
+
callbackType: "track-done",
|
|
18471
|
+
trackId: params.track.trackId
|
|
18472
|
+
});
|
|
18473
|
+
};
|
|
18462
18474
|
};
|
|
18463
18475
|
} : null,
|
|
18464
18476
|
onVideoTrack: postOnVideoTrack ? async (params) => {
|
|
@@ -18473,11 +18485,23 @@ var startParsing = async (message, reader) => {
|
|
|
18473
18485
|
return null;
|
|
18474
18486
|
}
|
|
18475
18487
|
return async (sample) => {
|
|
18476
|
-
await executeCallback({
|
|
18488
|
+
const videoSampleRes = await executeCallback({
|
|
18477
18489
|
callbackType: "on-video-sample",
|
|
18478
18490
|
value: sample,
|
|
18479
18491
|
trackId: params.track.trackId
|
|
18480
18492
|
});
|
|
18493
|
+
if (videoSampleRes.payloadType !== "on-sample-response") {
|
|
18494
|
+
throw new Error("Invalid response from callback");
|
|
18495
|
+
}
|
|
18496
|
+
if (!videoSampleRes.registeredTrackDoneCallback) {
|
|
18497
|
+
return;
|
|
18498
|
+
}
|
|
18499
|
+
return async () => {
|
|
18500
|
+
await executeCallback({
|
|
18501
|
+
callbackType: "track-done",
|
|
18502
|
+
trackId: params.track.trackId
|
|
18503
|
+
});
|
|
18504
|
+
};
|
|
18481
18505
|
};
|
|
18482
18506
|
} : null,
|
|
18483
18507
|
onDiscardedData: null,
|
package/dist/esm/worker.mjs
CHANGED
|
@@ -252,6 +252,7 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
|
|
|
252
252
|
return prom.promise;
|
|
253
253
|
});
|
|
254
254
|
const callbacks = {};
|
|
255
|
+
const trackDoneCallbacks = {};
|
|
255
256
|
function onMessage(message) {
|
|
256
257
|
const data = message.data;
|
|
257
258
|
if (data.type === "response-done") {
|
|
@@ -435,15 +436,35 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
|
|
|
435
436
|
if (!callback) {
|
|
436
437
|
throw new Error(`No callback registered for track ${data.payload.trackId}`);
|
|
437
438
|
}
|
|
438
|
-
await callback(data.payload.value);
|
|
439
|
-
|
|
439
|
+
const trackDoneCallback = await callback(data.payload.value);
|
|
440
|
+
if (trackDoneCallback) {
|
|
441
|
+
trackDoneCallbacks[data.payload.trackId] = trackDoneCallback;
|
|
442
|
+
}
|
|
443
|
+
return {
|
|
444
|
+
payloadType: "on-sample-response",
|
|
445
|
+
registeredTrackDoneCallback: Boolean(trackDoneCallback)
|
|
446
|
+
};
|
|
440
447
|
}
|
|
441
448
|
if (data.payload.callbackType === "on-video-sample") {
|
|
442
449
|
const callback = callbacks[data.payload.trackId];
|
|
443
450
|
if (!callback) {
|
|
444
451
|
throw new Error(`No callback registered for track ${data.payload.trackId}`);
|
|
445
452
|
}
|
|
446
|
-
await callback(data.payload.value);
|
|
453
|
+
const trackDoneCallback = await callback(data.payload.value);
|
|
454
|
+
if (trackDoneCallback) {
|
|
455
|
+
trackDoneCallbacks[data.payload.trackId] = trackDoneCallback;
|
|
456
|
+
}
|
|
457
|
+
return {
|
|
458
|
+
payloadType: "on-sample-response",
|
|
459
|
+
registeredTrackDoneCallback: Boolean(trackDoneCallback)
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
if (data.payload.callbackType === "track-done") {
|
|
463
|
+
const trackDoneCallback = trackDoneCallbacks[data.payload.trackId];
|
|
464
|
+
if (!trackDoneCallback) {
|
|
465
|
+
throw new Error(`No track done callback registered for track ${data.payload.trackId}`);
|
|
466
|
+
}
|
|
467
|
+
trackDoneCallback();
|
|
447
468
|
return { payloadType: "void" };
|
|
448
469
|
}
|
|
449
470
|
throw new Error(`Unknown callback type: ${data.payload}`);
|
|
@@ -93,6 +93,7 @@ const parseMediaOnWorkerImplementation = async ({ controller, reader, ...params
|
|
|
93
93
|
return prom.promise;
|
|
94
94
|
});
|
|
95
95
|
const callbacks = {};
|
|
96
|
+
const trackDoneCallbacks = {};
|
|
96
97
|
function onMessage(message) {
|
|
97
98
|
const data = message.data;
|
|
98
99
|
if (data.type === 'response-done') {
|
|
@@ -284,15 +285,35 @@ const parseMediaOnWorkerImplementation = async ({ controller, reader, ...params
|
|
|
284
285
|
if (!callback) {
|
|
285
286
|
throw new Error(`No callback registered for track ${data.payload.trackId}`);
|
|
286
287
|
}
|
|
287
|
-
await callback(data.payload.value);
|
|
288
|
-
|
|
288
|
+
const trackDoneCallback = await callback(data.payload.value);
|
|
289
|
+
if (trackDoneCallback) {
|
|
290
|
+
trackDoneCallbacks[data.payload.trackId] = trackDoneCallback;
|
|
291
|
+
}
|
|
292
|
+
return {
|
|
293
|
+
payloadType: 'on-sample-response',
|
|
294
|
+
registeredTrackDoneCallback: Boolean(trackDoneCallback),
|
|
295
|
+
};
|
|
289
296
|
}
|
|
290
297
|
if (data.payload.callbackType === 'on-video-sample') {
|
|
291
298
|
const callback = callbacks[data.payload.trackId];
|
|
292
299
|
if (!callback) {
|
|
293
300
|
throw new Error(`No callback registered for track ${data.payload.trackId}`);
|
|
294
301
|
}
|
|
295
|
-
await callback(data.payload.value);
|
|
302
|
+
const trackDoneCallback = await callback(data.payload.value);
|
|
303
|
+
if (trackDoneCallback) {
|
|
304
|
+
trackDoneCallbacks[data.payload.trackId] = trackDoneCallback;
|
|
305
|
+
}
|
|
306
|
+
return {
|
|
307
|
+
payloadType: 'on-sample-response',
|
|
308
|
+
registeredTrackDoneCallback: Boolean(trackDoneCallback),
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
if (data.payload.callbackType === 'track-done') {
|
|
312
|
+
const trackDoneCallback = trackDoneCallbacks[data.payload.trackId];
|
|
313
|
+
if (!trackDoneCallback) {
|
|
314
|
+
throw new Error(`No track done callback registered for track ${data.payload.trackId}`);
|
|
315
|
+
}
|
|
316
|
+
trackDoneCallback();
|
|
296
317
|
return { payloadType: 'void' };
|
|
297
318
|
}
|
|
298
319
|
throw new Error(`Unknown callback type: ${data.payload}`);
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "4.0.
|
|
1
|
+
export declare const VERSION = "4.0.321";
|
package/dist/version.js
CHANGED
|
@@ -240,6 +240,9 @@ export type ResponseCallbackPayload = {
|
|
|
240
240
|
callbackType: 'on-video-sample';
|
|
241
241
|
value: MediaParserVideoSample;
|
|
242
242
|
trackId: number;
|
|
243
|
+
} | {
|
|
244
|
+
callbackType: 'track-done';
|
|
245
|
+
trackId: number;
|
|
243
246
|
} | {
|
|
244
247
|
callbackType: 'm3u-associated-playlists-selection';
|
|
245
248
|
value: SelectM3uAssociatedPlaylistsFnOptions;
|
|
@@ -263,6 +266,9 @@ export type AcknowledgePayload = {
|
|
|
263
266
|
} | {
|
|
264
267
|
payloadType: 'on-video-track-response';
|
|
265
268
|
registeredCallback: boolean;
|
|
269
|
+
} | {
|
|
270
|
+
payloadType: 'on-sample-response';
|
|
271
|
+
registeredTrackDoneCallback: boolean;
|
|
266
272
|
};
|
|
267
273
|
export type AcknowledgeCallback = {
|
|
268
274
|
type: 'acknowledge-callback';
|
package/dist/worker-server.js
CHANGED
|
@@ -328,11 +328,23 @@ const startParsing = async (message, reader) => {
|
|
|
328
328
|
return null;
|
|
329
329
|
}
|
|
330
330
|
return async (sample) => {
|
|
331
|
-
await executeCallback({
|
|
331
|
+
const audioSampleRes = await executeCallback({
|
|
332
332
|
callbackType: 'on-audio-sample',
|
|
333
333
|
value: sample,
|
|
334
334
|
trackId: params.track.trackId,
|
|
335
335
|
});
|
|
336
|
+
if (audioSampleRes.payloadType !== 'on-sample-response') {
|
|
337
|
+
throw new Error('Invalid response from callback');
|
|
338
|
+
}
|
|
339
|
+
if (!audioSampleRes.registeredTrackDoneCallback) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
return async () => {
|
|
343
|
+
await executeCallback({
|
|
344
|
+
callbackType: 'track-done',
|
|
345
|
+
trackId: params.track.trackId,
|
|
346
|
+
});
|
|
347
|
+
};
|
|
336
348
|
};
|
|
337
349
|
}
|
|
338
350
|
: null,
|
|
@@ -349,11 +361,23 @@ const startParsing = async (message, reader) => {
|
|
|
349
361
|
return null;
|
|
350
362
|
}
|
|
351
363
|
return async (sample) => {
|
|
352
|
-
await executeCallback({
|
|
364
|
+
const videoSampleRes = await executeCallback({
|
|
353
365
|
callbackType: 'on-video-sample',
|
|
354
366
|
value: sample,
|
|
355
367
|
trackId: params.track.trackId,
|
|
356
368
|
});
|
|
369
|
+
if (videoSampleRes.payloadType !== 'on-sample-response') {
|
|
370
|
+
throw new Error('Invalid response from callback');
|
|
371
|
+
}
|
|
372
|
+
if (!videoSampleRes.registeredTrackDoneCallback) {
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
return async () => {
|
|
376
|
+
await executeCallback({
|
|
377
|
+
callbackType: 'track-done',
|
|
378
|
+
trackId: params.track.trackId,
|
|
379
|
+
});
|
|
380
|
+
};
|
|
357
381
|
};
|
|
358
382
|
}
|
|
359
383
|
: null,
|
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.321",
|
|
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.321",
|
|
14
|
+
"@remotion/eslint-config-internal": "4.0.321"
|
|
15
15
|
},
|
|
16
16
|
"publishConfig": {
|
|
17
17
|
"access": "public"
|