@remotion/media-parser 4.0.311 → 4.0.312
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/aac/get-seeking-byte.js +5 -1
- package/dist/containers/flac/get-seeking-byte.d.ts +2 -1
- package/dist/containers/flac/get-seeking-byte.js +1 -1
- package/dist/containers/iso-base-media/find-keyframe-before-time.d.ts +1 -1
- package/dist/containers/iso-base-media/find-keyframe-before-time.js +1 -1
- package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.js +3 -1
- package/dist/containers/iso-base-media/get-seeking-byte.js +3 -1
- package/dist/containers/m3u/get-seeking-byte.js +2 -0
- package/dist/containers/mp3/get-seeking-byte.js +4 -1
- package/dist/containers/riff/get-seeking-byte.js +3 -0
- package/dist/containers/wav/get-seeking-byte.js +1 -0
- package/dist/containers/wav/parse-list.js +4 -3
- package/dist/containers/webm/seek/get-seeking-byte.js +21 -6
- package/dist/controller/media-parser-controller.d.ts +3 -0
- package/dist/controller/media-parser-controller.js +15 -0
- package/dist/esm/index.mjs +226 -131
- package/dist/esm/server-worker.mjs +17 -0
- package/dist/esm/worker-server-entry.mjs +240 -130
- package/dist/esm/worker-web-entry.mjs +240 -130
- package/dist/esm/worker.mjs +28 -0
- package/dist/get-seeking-byte.js +13 -2
- package/dist/index.cjs +54 -0
- package/dist/index.d.ts +1 -0
- package/dist/internal-parse-media.js +25 -0
- package/dist/parse-media-on-worker-entry.js +17 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/webcodec-sample-types.d.ts +2 -2
- package/dist/work-on-seek-request.d.ts +22 -0
- package/dist/work-on-seek-request.js +3 -2
- package/dist/worker/forward-controller-to-worker.js +18 -0
- package/dist/worker/worker-types.d.ts +13 -2
- package/package.json +3 -3
|
@@ -11,6 +11,7 @@ const remotion_license_acknowledge_1 = require("./remotion-license-acknowledge")
|
|
|
11
11
|
const set_seeking_hints_1 = require("./set-seeking-hints");
|
|
12
12
|
const parser_state_1 = require("./state/parser-state");
|
|
13
13
|
const throttled_progress_1 = require("./throttled-progress");
|
|
14
|
+
const work_on_seek_request_1 = require("./work-on-seek-request");
|
|
14
15
|
const internalParseMedia = async function ({ src, fields: _fieldsInReturnValue, reader: readerInterface, onAudioTrack, onVideoTrack, controller = (0, media_parser_controller_1.mediaParserController)(), logLevel, onParseProgress: onParseProgressDoNotCallDirectly, progressIntervalInMs, mode, onDiscardedData, onError, acknowledgeRemotionLicense, apiName, selectM3uStream: selectM3uStreamFn, selectM3uAssociatedPlaylists: selectM3uAssociatedPlaylistsFn, m3uPlaylistContext, makeSamplesStartAtZero, seekingHints, ...more }) {
|
|
15
16
|
var _a;
|
|
16
17
|
if (!src) {
|
|
@@ -82,6 +83,30 @@ const internalParseMedia = async function ({ src, fields: _fieldsInReturnValue,
|
|
|
82
83
|
contentLength: state.contentLength,
|
|
83
84
|
aacState: state.aac,
|
|
84
85
|
})));
|
|
86
|
+
controller._internals.attachSimulateSeekResolution((seek) => {
|
|
87
|
+
const { aacState, avcState, flacState, isoState, iterator, keyframes, m3uState, mediaSection, mp3State, riffState, samplesObserved, structureState, tracksState, transportStream, webmState, } = (0, work_on_seek_request_1.getWorkOnSeekRequestOptions)(state);
|
|
88
|
+
return (0, work_on_seek_request_1.turnSeekIntoByte)({
|
|
89
|
+
aacState,
|
|
90
|
+
seek,
|
|
91
|
+
avcState,
|
|
92
|
+
contentLength,
|
|
93
|
+
flacState,
|
|
94
|
+
isoState,
|
|
95
|
+
iterator,
|
|
96
|
+
keyframes,
|
|
97
|
+
logLevel,
|
|
98
|
+
m3uPlaylistContext,
|
|
99
|
+
m3uState,
|
|
100
|
+
mediaSectionState: mediaSection,
|
|
101
|
+
mp3State,
|
|
102
|
+
riffState,
|
|
103
|
+
samplesObserved,
|
|
104
|
+
structureState,
|
|
105
|
+
tracksState,
|
|
106
|
+
transportStream,
|
|
107
|
+
webmState,
|
|
108
|
+
});
|
|
109
|
+
});
|
|
85
110
|
if (!hasAudioTrackHandlers &&
|
|
86
111
|
!hasVideoTrackHandlers &&
|
|
87
112
|
Object.values(state.fields).every((v) => !v) &&
|
|
@@ -84,6 +84,14 @@ const parseMediaOnWorkerImplementation = async ({ controller, reader, ...params
|
|
|
84
84
|
seekingHintPromises.push(prom);
|
|
85
85
|
return prom.promise;
|
|
86
86
|
});
|
|
87
|
+
const simulateSeekPromises = {};
|
|
88
|
+
controller === null || controller === void 0 ? void 0 : controller._internals.attachSimulateSeekResolution((seek) => {
|
|
89
|
+
const prom = (0, with_resolvers_1.withResolvers)();
|
|
90
|
+
const nonce = String(Math.random());
|
|
91
|
+
post(worker, { type: 'request-simulate-seek', payload: seek, nonce });
|
|
92
|
+
simulateSeekPromises[nonce] = prom;
|
|
93
|
+
return prom.promise;
|
|
94
|
+
});
|
|
87
95
|
const callbacks = {};
|
|
88
96
|
function onMessage(message) {
|
|
89
97
|
const data = message.data;
|
|
@@ -313,6 +321,15 @@ const parseMediaOnWorkerImplementation = async ({ controller, reader, ...params
|
|
|
313
321
|
firstPromise.resolve(data.payload);
|
|
314
322
|
return;
|
|
315
323
|
}
|
|
324
|
+
if (data.type === 'response-simulate-seek') {
|
|
325
|
+
const prom = simulateSeekPromises[data.nonce];
|
|
326
|
+
if (!prom) {
|
|
327
|
+
throw new Error('No simulate seek promise found');
|
|
328
|
+
}
|
|
329
|
+
prom.resolve(data.payload);
|
|
330
|
+
delete simulateSeekPromises[data.nonce];
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
316
333
|
throw new Error(`Unknown response type: ${JSON.stringify(data)}`);
|
|
317
334
|
}
|
|
318
335
|
worker.addEventListener('message', onMessage);
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "4.0.
|
|
1
|
+
export declare const VERSION = "4.0.312";
|
package/dist/version.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { MediaParserAudioTrack, MediaParserVideoTrack } from './get-tracks';
|
|
2
2
|
import type { MediaParserContainer } from './options';
|
|
3
|
-
export type MediaParserOnAudioSample = (sample: MediaParserAudioSample) => void | Promise<void> |
|
|
4
|
-
export type MediaParserOnVideoSample = (sample: MediaParserVideoSample) => void | Promise<void> |
|
|
3
|
+
export type MediaParserOnAudioSample = (sample: MediaParserAudioSample) => void | Promise<OnTrackDoneCallback | void> | Promise<void> | OnTrackDoneCallback;
|
|
4
|
+
export type MediaParserOnVideoSample = (sample: MediaParserVideoSample) => void | Promise<OnTrackDoneCallback | void> | Promise<void> | OnTrackDoneCallback;
|
|
5
5
|
export type OnTrackDoneCallback = () => void | Promise<void>;
|
|
6
6
|
export type MediaParserOnAudioTrackParams = {
|
|
7
7
|
track: MediaParserAudioTrack;
|
|
@@ -22,6 +22,27 @@ import type { SeekInfiniteLoop } from './state/seek-infinite-loop';
|
|
|
22
22
|
import type { StructureState } from './state/structure';
|
|
23
23
|
import type { TransportStreamState } from './state/transport-stream/transport-stream';
|
|
24
24
|
import { type MediaSectionState } from './state/video-section';
|
|
25
|
+
export declare const turnSeekIntoByte: ({ seek, mediaSectionState, logLevel, iterator, structureState, m3uPlaylistContext, isoState, transportStream, tracksState, webmState, keyframes, flacState, samplesObserved, riffState, mp3State, contentLength, aacState, m3uState, avcState, }: {
|
|
26
|
+
seek: number;
|
|
27
|
+
mediaSectionState: MediaSectionState;
|
|
28
|
+
logLevel: MediaParserLogLevel;
|
|
29
|
+
iterator: BufferIterator;
|
|
30
|
+
structureState: StructureState;
|
|
31
|
+
m3uPlaylistContext: M3uPlaylistContext | null;
|
|
32
|
+
isoState: IsoBaseMediaState;
|
|
33
|
+
transportStream: TransportStreamState;
|
|
34
|
+
tracksState: TracksState;
|
|
35
|
+
webmState: WebmState;
|
|
36
|
+
keyframes: KeyframesState;
|
|
37
|
+
flacState: FlacState;
|
|
38
|
+
samplesObserved: SamplesObservedState;
|
|
39
|
+
riffState: RiffState;
|
|
40
|
+
mp3State: Mp3State;
|
|
41
|
+
aacState: AacState;
|
|
42
|
+
contentLength: number;
|
|
43
|
+
m3uState: M3uState;
|
|
44
|
+
avcState: AvcState;
|
|
45
|
+
}) => Promise<SeekResolution>;
|
|
25
46
|
export type WorkOnSeekRequestOptions = {
|
|
26
47
|
logLevel: MediaParserLogLevel;
|
|
27
48
|
controller: MediaParserController;
|
|
@@ -63,4 +84,5 @@ export type SeekResolution = {
|
|
|
63
84
|
} | {
|
|
64
85
|
type: 'do-seek';
|
|
65
86
|
byte: number;
|
|
87
|
+
timeInSeconds: number;
|
|
66
88
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.workOnSeekRequest = exports.getWorkOnSeekRequestOptions = void 0;
|
|
3
|
+
exports.workOnSeekRequest = exports.getWorkOnSeekRequestOptions = exports.turnSeekIntoByte = void 0;
|
|
4
4
|
const get_seeking_byte_1 = require("./get-seeking-byte");
|
|
5
5
|
const get_seeking_hints_1 = require("./get-seeking-hints");
|
|
6
6
|
const log_1 = require("./log");
|
|
@@ -55,6 +55,7 @@ const turnSeekIntoByte = async ({ seek, mediaSectionState, logLevel, iterator, s
|
|
|
55
55
|
});
|
|
56
56
|
return seekingByte;
|
|
57
57
|
};
|
|
58
|
+
exports.turnSeekIntoByte = turnSeekIntoByte;
|
|
58
59
|
const getWorkOnSeekRequestOptions = (state) => {
|
|
59
60
|
return {
|
|
60
61
|
logLevel: state.logLevel,
|
|
@@ -94,7 +95,7 @@ const workOnSeekRequest = async (options) => {
|
|
|
94
95
|
return;
|
|
95
96
|
}
|
|
96
97
|
log_1.Log.trace(logLevel, `Has seek request for ${src}: ${JSON.stringify(seek)}`);
|
|
97
|
-
const resolution = await turnSeekIntoByte({
|
|
98
|
+
const resolution = await (0, exports.turnSeekIntoByte)({
|
|
98
99
|
seek,
|
|
99
100
|
mediaSectionState: mediaSection,
|
|
100
101
|
logLevel,
|
|
@@ -29,6 +29,24 @@ const forwardMediaParserControllerToWorker = (controller) => {
|
|
|
29
29
|
});
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
|
+
if (message.type === 'request-simulate-seek') {
|
|
33
|
+
controller
|
|
34
|
+
.simulateSeek(message.payload)
|
|
35
|
+
.then((resolution) => {
|
|
36
|
+
postMessage({
|
|
37
|
+
type: 'response-simulate-seek',
|
|
38
|
+
nonce: message.nonce,
|
|
39
|
+
payload: resolution,
|
|
40
|
+
});
|
|
41
|
+
})
|
|
42
|
+
.catch((err) => {
|
|
43
|
+
postMessage({
|
|
44
|
+
type: 'response-error',
|
|
45
|
+
payload: err,
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
32
50
|
if (message.type === 'request-resume') {
|
|
33
51
|
controller.resume();
|
|
34
52
|
return;
|
|
@@ -12,6 +12,7 @@ import type { SeekingHints } from '../seeking-hints';
|
|
|
12
12
|
import type { MediaParserEmbeddedImage } from '../state/images';
|
|
13
13
|
import type { InternalStats } from '../state/parser-state';
|
|
14
14
|
import type { MediaParserAudioSample, MediaParserOnAudioTrackParams, MediaParserOnVideoTrackParams, MediaParserVideoSample } from '../webcodec-sample-types';
|
|
15
|
+
import type { SeekResolution } from '../work-on-seek-request';
|
|
15
16
|
export type ParseMediaOnWorkerPayload = {
|
|
16
17
|
type: 'request-worker';
|
|
17
18
|
src: ParseMediaSrc;
|
|
@@ -63,6 +64,11 @@ type RequestResume = {
|
|
|
63
64
|
type RequestGetSeekingHints = {
|
|
64
65
|
type: 'request-get-seeking-hints';
|
|
65
66
|
};
|
|
67
|
+
type RequestSimulateSeek = {
|
|
68
|
+
type: 'request-simulate-seek';
|
|
69
|
+
payload: number;
|
|
70
|
+
nonce: string;
|
|
71
|
+
};
|
|
66
72
|
type RequestAbort = {
|
|
67
73
|
type: 'request-abort';
|
|
68
74
|
};
|
|
@@ -75,6 +81,11 @@ type ResponseGetSeekingHints = {
|
|
|
75
81
|
type: 'response-get-seeking-hints';
|
|
76
82
|
payload: SeekingHints;
|
|
77
83
|
};
|
|
84
|
+
type ResponseSimulateSeek = {
|
|
85
|
+
type: 'response-simulate-seek';
|
|
86
|
+
nonce: string;
|
|
87
|
+
payload: SeekResolution;
|
|
88
|
+
};
|
|
78
89
|
type BaseError = {
|
|
79
90
|
errorStack: string;
|
|
80
91
|
errorMessage: string;
|
|
@@ -261,6 +272,6 @@ export type SignalErrorInCallback = {
|
|
|
261
272
|
type: 'signal-error-in-callback';
|
|
262
273
|
nonce: string;
|
|
263
274
|
};
|
|
264
|
-
export type WorkerRequestPayload = ParseMediaOnWorkerPayload | RequestResume | RequestPause | RequestAbort | RequestSeek | RequestGetSeekingHints | AcknowledgeCallback | SignalErrorInCallback;
|
|
265
|
-
export type WorkerResponsePayload = ResponseDone | ResponseError | ResponseOnCallbackRequest | ResponseGetSeekingHints;
|
|
275
|
+
export type WorkerRequestPayload = ParseMediaOnWorkerPayload | RequestResume | RequestPause | RequestAbort | RequestSeek | RequestGetSeekingHints | RequestSimulateSeek | AcknowledgeCallback | SignalErrorInCallback;
|
|
276
|
+
export type WorkerResponsePayload = ResponseDone | ResponseError | ResponseOnCallbackRequest | ResponseGetSeekingHints | ResponseSimulateSeek;
|
|
266
277
|
export {};
|
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.312",
|
|
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/
|
|
14
|
-
"@remotion/
|
|
13
|
+
"@remotion/eslint-config-internal": "4.0.312",
|
|
14
|
+
"@remotion/example-videos": "4.0.312"
|
|
15
15
|
},
|
|
16
16
|
"publishConfig": {
|
|
17
17
|
"access": "public"
|