@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.
Files changed (33) hide show
  1. package/dist/containers/aac/get-seeking-byte.js +5 -1
  2. package/dist/containers/flac/get-seeking-byte.d.ts +2 -1
  3. package/dist/containers/flac/get-seeking-byte.js +1 -1
  4. package/dist/containers/iso-base-media/find-keyframe-before-time.d.ts +1 -1
  5. package/dist/containers/iso-base-media/find-keyframe-before-time.js +1 -1
  6. package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.js +3 -1
  7. package/dist/containers/iso-base-media/get-seeking-byte.js +3 -1
  8. package/dist/containers/m3u/get-seeking-byte.js +2 -0
  9. package/dist/containers/mp3/get-seeking-byte.js +4 -1
  10. package/dist/containers/riff/get-seeking-byte.js +3 -0
  11. package/dist/containers/wav/get-seeking-byte.js +1 -0
  12. package/dist/containers/wav/parse-list.js +4 -3
  13. package/dist/containers/webm/seek/get-seeking-byte.js +21 -6
  14. package/dist/controller/media-parser-controller.d.ts +3 -0
  15. package/dist/controller/media-parser-controller.js +15 -0
  16. package/dist/esm/index.mjs +226 -131
  17. package/dist/esm/server-worker.mjs +17 -0
  18. package/dist/esm/worker-server-entry.mjs +240 -130
  19. package/dist/esm/worker-web-entry.mjs +240 -130
  20. package/dist/esm/worker.mjs +28 -0
  21. package/dist/get-seeking-byte.js +13 -2
  22. package/dist/index.cjs +54 -0
  23. package/dist/index.d.ts +1 -0
  24. package/dist/internal-parse-media.js +25 -0
  25. package/dist/parse-media-on-worker-entry.js +17 -0
  26. package/dist/version.d.ts +1 -1
  27. package/dist/version.js +1 -1
  28. package/dist/webcodec-sample-types.d.ts +2 -2
  29. package/dist/work-on-seek-request.d.ts +22 -0
  30. package/dist/work-on-seek-request.js +3 -2
  31. package/dist/worker/forward-controller-to-worker.js +18 -0
  32. package/dist/worker/worker-types.d.ts +13 -2
  33. 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.311";
1
+ export declare const VERSION = "4.0.312";
package/dist/version.js CHANGED
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  // Automatically generated on publish
5
- exports.VERSION = '4.0.311';
5
+ exports.VERSION = '4.0.312';
@@ -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> | OnTrackDoneCallback | Promise<OnTrackDoneCallback>;
4
- export type MediaParserOnVideoSample = (sample: MediaParserVideoSample) => void | Promise<void> | OnTrackDoneCallback | Promise<OnTrackDoneCallback>;
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.311",
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/example-videos": "4.0.311",
14
- "@remotion/eslint-config-internal": "4.0.311"
13
+ "@remotion/eslint-config-internal": "4.0.312",
14
+ "@remotion/example-videos": "4.0.312"
15
15
  },
16
16
  "publishConfig": {
17
17
  "access": "public"