@remotion/media-parser 4.0.279 → 4.0.282

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 (191) hide show
  1. package/dist/check-if-done.js +1 -1
  2. package/dist/containers/aac/parse-aac.js +21 -12
  3. package/dist/containers/flac/get-channel-count.d.ts +1 -1
  4. package/dist/containers/flac/get-duration-from-flac.js +1 -1
  5. package/dist/containers/flac/get-sample-rate.js +1 -1
  6. package/dist/containers/flac/parse-flac-frame.js +18 -13
  7. package/dist/containers/flac/parse-flac.js +3 -3
  8. package/dist/containers/flac/parse-header.js +1 -1
  9. package/dist/containers/flac/parse-metadata.js +1 -1
  10. package/dist/containers/flac/parse-streaminfo.js +7 -2
  11. package/dist/containers/flac/parse-unknown-block.js +1 -1
  12. package/dist/containers/iso-base-media/base-media-box.d.ts +2 -1
  13. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +11 -0
  14. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.js +13 -0
  15. package/dist/containers/iso-base-media/collect-sample-positions-from-trak.d.ts +2 -0
  16. package/dist/containers/iso-base-media/collect-sample-positions-from-trak.js +46 -0
  17. package/dist/containers/iso-base-media/find-keyframe-before-time.d.ts +10 -0
  18. package/dist/containers/iso-base-media/find-keyframe-before-time.js +28 -0
  19. package/dist/containers/iso-base-media/get-children.d.ts +7 -3
  20. package/dist/containers/iso-base-media/get-children.js +7 -3
  21. package/dist/containers/iso-base-media/get-keyframes.js +9 -4
  22. package/dist/containers/iso-base-media/get-mfra-atom.d.ts +9 -0
  23. package/dist/containers/iso-base-media/get-mfra-atom.js +12 -0
  24. package/dist/containers/iso-base-media/get-mfra-seeking-box.d.ts +13 -0
  25. package/dist/containers/iso-base-media/get-mfra-seeking-box.js +32 -0
  26. package/dist/containers/iso-base-media/get-moov-atom.js +58 -42
  27. package/dist/containers/iso-base-media/get-sample-position-bounds.d.ts +5 -0
  28. package/dist/containers/iso-base-media/get-sample-position-bounds.js +19 -0
  29. package/dist/containers/iso-base-media/get-sample-positions-from-track.d.ts +7 -2
  30. package/dist/containers/iso-base-media/get-sample-positions-from-track.js +18 -48
  31. package/dist/containers/iso-base-media/get-seeking-from-mp4.d.ts +11 -5
  32. package/dist/containers/iso-base-media/get-seeking-from-mp4.js +100 -36
  33. package/dist/containers/iso-base-media/get-seeking-info-from-mp4.d.ts +11 -0
  34. package/dist/containers/iso-base-media/get-seeking-info-from-mp4.js +25 -0
  35. package/dist/containers/iso-base-media/mdat/mdat.js +42 -26
  36. package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.d.ts +11 -0
  37. package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.js +27 -0
  38. package/dist/containers/iso-base-media/mfra/get-mfra-atom.d.ts +81 -0
  39. package/dist/containers/iso-base-media/mfra/get-mfra-atom.js +23 -0
  40. package/dist/containers/iso-base-media/mfra/get-mfro-atom.d.ts +9 -0
  41. package/dist/containers/iso-base-media/mfra/get-mfro-atom.js +38 -0
  42. package/dist/containers/iso-base-media/mfra/mfra.d.ts +2 -0
  43. package/dist/containers/iso-base-media/mfra/mfra.js +11 -0
  44. package/dist/containers/iso-base-media/mfra/tfra.d.ts +19 -0
  45. package/dist/containers/iso-base-media/mfra/tfra.js +100 -0
  46. package/dist/containers/iso-base-media/moov/moov.d.ts +7 -3
  47. package/dist/containers/iso-base-media/moov/moov.js +4 -2
  48. package/dist/containers/iso-base-media/parse-boxes.js +20 -4
  49. package/dist/containers/iso-base-media/process-box.d.ts +26 -2
  50. package/dist/containers/iso-base-media/process-box.js +54 -15
  51. package/dist/containers/iso-base-media/stsd/mebx.d.ts +5 -3
  52. package/dist/containers/iso-base-media/stsd/mebx.js +6 -4
  53. package/dist/containers/iso-base-media/stsd/samples.d.ts +8 -5
  54. package/dist/containers/iso-base-media/stsd/samples.js +16 -9
  55. package/dist/containers/iso-base-media/stsd/stsd.d.ts +5 -3
  56. package/dist/containers/iso-base-media/stsd/stsd.js +3 -3
  57. package/dist/containers/iso-base-media/trak/trak.d.ts +5 -3
  58. package/dist/containers/iso-base-media/trak/trak.js +4 -2
  59. package/dist/containers/iso-base-media/traversal.d.ts +9 -2
  60. package/dist/containers/iso-base-media/traversal.js +15 -7
  61. package/dist/containers/m3u/get-duration-from-m3u.js +1 -1
  62. package/dist/containers/m3u/get-streams.js +1 -1
  63. package/dist/containers/m3u/iterate-over-segment-files.d.ts +1 -1
  64. package/dist/containers/m3u/iterate-over-segment-files.js +1 -1
  65. package/dist/containers/m3u/parse-m3u.js +1 -1
  66. package/dist/containers/m3u/run-over-m3u.js +11 -2
  67. package/dist/containers/mp3/id3.js +1 -1
  68. package/dist/containers/mp3/parse-mpeg-header.js +8 -2
  69. package/dist/containers/riff/expect-riff-box.js +7 -2
  70. package/dist/containers/riff/get-tracks-from-avi.js +1 -1
  71. package/dist/containers/riff/parse-movi.js +35 -26
  72. package/dist/containers/riff/parse-riff-body.js +13 -5
  73. package/dist/containers/riff/parse-riff-header.js +1 -1
  74. package/dist/containers/riff/parse-video-section.d.ts +1 -1
  75. package/dist/containers/riff/parse-video-section.js +3 -3
  76. package/dist/containers/transport-stream/get-tracks.js +1 -1
  77. package/dist/containers/transport-stream/handle-aac-packet.js +12 -3
  78. package/dist/containers/transport-stream/handle-avc-packet.js +16 -3
  79. package/dist/containers/transport-stream/parse-packet.js +1 -1
  80. package/dist/containers/transport-stream/parse-transport-stream.js +1 -1
  81. package/dist/containers/wav/get-duration-from-wav.js +1 -1
  82. package/dist/containers/wav/get-seeking-byte.d.ts +7 -0
  83. package/dist/containers/wav/get-seeking-byte.js +15 -0
  84. package/dist/containers/wav/get-seeking-info.d.ts +7 -0
  85. package/dist/containers/wav/get-seeking-info.js +20 -0
  86. package/dist/containers/wav/parse-data.js +2 -2
  87. package/dist/containers/wav/parse-fmt.js +7 -2
  88. package/dist/containers/wav/parse-header.js +1 -1
  89. package/dist/containers/wav/parse-id3.js +1 -1
  90. package/dist/containers/wav/parse-list.js +1 -1
  91. package/dist/containers/wav/parse-media-section.d.ts +5 -0
  92. package/dist/containers/wav/parse-media-section.js +44 -0
  93. package/dist/containers/wav/parse-video-section.js +7 -5
  94. package/dist/containers/wav/parse-wav.js +4 -4
  95. package/dist/containers/webm/get-ready-tracks.js +2 -2
  96. package/dist/containers/webm/parse-ebml.js +17 -5
  97. package/dist/containers/webm/parse-webm-header.js +1 -1
  98. package/dist/controller/emitter.d.ts +33 -0
  99. package/dist/controller/emitter.js +65 -0
  100. package/dist/controller/media-parser-controller.d.ts +23 -0
  101. package/dist/controller/media-parser-controller.js +41 -0
  102. package/dist/controller/pause-signal.d.ts +11 -0
  103. package/dist/controller/pause-signal.js +38 -0
  104. package/dist/controller/performed-seeks-stats.d.ts +11 -0
  105. package/dist/controller/performed-seeks-stats.js +21 -0
  106. package/dist/controller/seek-signal.d.ts +19 -0
  107. package/dist/controller/seek-signal.js +24 -0
  108. package/dist/convert-audio-or-video-sample.d.ts +4 -1
  109. package/dist/convert-audio-or-video-sample.js +19 -6
  110. package/dist/disallow-forward-seek-if-samples-are-needed.d.ts +6 -0
  111. package/dist/disallow-forward-seek-if-samples-are-needed.js +14 -0
  112. package/dist/emit-audio-sample.d.ts +8 -5
  113. package/dist/emit-audio-sample.js +6 -6
  114. package/dist/emit-available-info.js +6 -6
  115. package/dist/emitter.d.ts +9 -0
  116. package/dist/emitter.js +35 -3
  117. package/dist/esm/index.mjs +5691 -4592
  118. package/dist/esm/server-worker.mjs +453 -0
  119. package/dist/esm/worker-server-entry.mjs +7207 -6105
  120. package/dist/esm/worker-web-entry.mjs +7205 -6103
  121. package/dist/esm/worker.mjs +14 -11
  122. package/dist/forward-controller.d.ts +1 -1
  123. package/dist/get-dimensions.js +2 -2
  124. package/dist/get-duration.js +21 -31
  125. package/dist/get-fps.js +7 -3
  126. package/dist/get-keyframes.js +2 -2
  127. package/dist/get-seeking-info.d.ts +19 -3
  128. package/dist/get-seeking-info.js +33 -7
  129. package/dist/get-tracks.js +12 -4
  130. package/dist/has-all-info.js +1 -1
  131. package/dist/index.d.ts +153 -135
  132. package/dist/index.js +3 -1
  133. package/dist/init-video.js +21 -12
  134. package/dist/internal-parse-media.js +6 -2
  135. package/dist/iterator/buffer-manager.js +1 -2
  136. package/dist/media-parser-controller.d.ts +2 -1
  137. package/dist/media-parser-controller.js +3 -2
  138. package/dist/metadata/get-metadata.js +1 -1
  139. package/dist/metadata/metadata-from-iso.js +5 -1
  140. package/dist/options.d.ts +1 -1
  141. package/dist/parse-loop.js +17 -4
  142. package/dist/parse-media-on-worker-entry.js +7 -0
  143. package/dist/perform-seek.d.ts +23 -3
  144. package/dist/perform-seek.js +44 -8
  145. package/dist/readers/reader.d.ts +1 -1
  146. package/dist/register-track.d.ts +17 -4
  147. package/dist/register-track.js +31 -17
  148. package/dist/run-parse-iteration.js +1 -1
  149. package/dist/seek-backwards.d.ts +15 -2
  150. package/dist/seek-backwards.js +7 -8
  151. package/dist/seek-forwards.d.ts +19 -2
  152. package/dist/seek-forwards.js +19 -12
  153. package/dist/seek-signal.d.ts +3 -6
  154. package/dist/seek-signal.js +4 -6
  155. package/dist/seeking-info.d.ts +11 -1
  156. package/dist/server-worker.d.ts +3 -0
  157. package/dist/server-worker.js +7 -0
  158. package/dist/server-worker.module.d.ts +2 -0
  159. package/dist/server-worker.module.js +12 -0
  160. package/dist/state/current-reader.d.ts +6 -0
  161. package/dist/state/current-reader.js +13 -0
  162. package/dist/state/iso-base-media/cached-sample-positions.js +7 -9
  163. package/dist/state/iso-base-media/iso-state.d.ts +15 -1
  164. package/dist/state/iso-base-media/iso-state.js +9 -1
  165. package/dist/state/iso-base-media/lazy-mfra-load.d.ts +14 -0
  166. package/dist/state/iso-base-media/lazy-mfra-load.js +29 -0
  167. package/dist/state/need-samples-for-fields.d.ts +1 -0
  168. package/dist/state/need-samples-for-fields.js +3 -3
  169. package/dist/state/parser-state.d.ts +145 -130
  170. package/dist/state/parser-state.js +15 -4
  171. package/dist/state/sample-callbacks.d.ts +3 -2
  172. package/dist/state/sample-callbacks.js +2 -4
  173. package/dist/state/seek-infinite-loop.d.ts +5 -0
  174. package/dist/state/seek-infinite-loop.js +22 -0
  175. package/dist/state/slow-duration-fps.js +15 -17
  176. package/dist/state/video-section.d.ts +23 -6
  177. package/dist/state/video-section.js +50 -22
  178. package/dist/state/work-on-seek-request-options.d.ts +3 -0
  179. package/dist/state/work-on-seek-request-options.js +26 -0
  180. package/dist/throttled-progress.d.ts +1 -1
  181. package/dist/version.d.ts +1 -1
  182. package/dist/version.js +1 -1
  183. package/dist/work-on-seek-request.d.ts +42 -1
  184. package/dist/work-on-seek-request.js +104 -15
  185. package/dist/worker/forward-controller.d.ts +1 -1
  186. package/dist/worker/forward-controller.js +4 -0
  187. package/dist/worker/worker-types.d.ts +6 -1
  188. package/dist/worker-server.js +1 -1
  189. package/dist/worker.module.d.ts +4 -0
  190. package/dist/worker.module.js +12 -0
  191. package/package.json +12 -3
@@ -5,33 +5,61 @@
5
5
  * that can be read partially
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.videoSectionState = void 0;
9
- const videoSectionState = () => {
10
- let videoSection = null;
11
- const setVideoSection = (section) => {
12
- videoSection = section;
13
- };
14
- const getVideoSection = () => {
15
- if (!videoSection) {
16
- throw new Error('No video section defined');
8
+ exports.mediaSectionState = exports.getCurrentMediaSection = exports.isByteInMediaSection = void 0;
9
+ const isByteInMediaSection = ({ position, mediaSections, }) => {
10
+ if (mediaSections.length === 0) {
11
+ return 'no-section-defined';
12
+ }
13
+ for (const section of mediaSections) {
14
+ if (position >= section.start && position < section.start + section.size) {
15
+ return 'in-section';
17
16
  }
18
- return videoSection;
19
- };
20
- const isInVideoSectionState = (iterator) => {
21
- if (!videoSection) {
22
- return 'no-section-defined';
17
+ }
18
+ return 'outside-section';
19
+ };
20
+ exports.isByteInMediaSection = isByteInMediaSection;
21
+ const getCurrentMediaSection = ({ offset, mediaSections, }) => {
22
+ for (const section of mediaSections) {
23
+ if (offset >= section.start && offset < section.start + section.size) {
24
+ return section;
25
+ }
26
+ }
27
+ return null;
28
+ };
29
+ exports.getCurrentMediaSection = getCurrentMediaSection;
30
+ const mediaSectionState = () => {
31
+ const mediaSections = [];
32
+ const addMediaSection = (section) => {
33
+ // Check if section overlaps with any existing sections
34
+ const overlaps = mediaSections.some((existingSection) => section.start < existingSection.start + existingSection.size &&
35
+ section.start + section.size > existingSection.start);
36
+ if (!overlaps) {
37
+ mediaSections.push(section);
23
38
  }
39
+ };
40
+ const getMediaSections = () => {
41
+ return mediaSections;
42
+ };
43
+ const isCurrentByteInMediaSection = (iterator) => {
24
44
  const offset = iterator.counter.getOffset();
25
- if (offset >= videoSection.start &&
26
- offset < videoSection.start + videoSection.size) {
27
- return 'in-section';
45
+ return (0, exports.isByteInMediaSection)({
46
+ position: offset,
47
+ mediaSections,
48
+ });
49
+ };
50
+ const getMediaSectionAssertOnlyOne = () => {
51
+ if (mediaSections.length !== 1) {
52
+ throw new Error('Expected only one video section');
28
53
  }
29
- return 'outside-section';
54
+ return mediaSections[0];
30
55
  };
31
56
  return {
32
- setVideoSection,
33
- getVideoSection,
34
- isInVideoSectionState,
57
+ addMediaSection,
58
+ getMediaSections,
59
+ isCurrentByteInMediaSection,
60
+ isByteInMediaSection: exports.isByteInMediaSection,
61
+ getCurrentMediaSection: exports.getCurrentMediaSection,
62
+ getMediaSectionAssertOnlyOne,
35
63
  };
36
64
  };
37
- exports.videoSectionState = videoSectionState;
65
+ exports.mediaSectionState = mediaSectionState;
@@ -0,0 +1,3 @@
1
+ import type { WorkOnSeekRequestOptions } from '../work-on-seek-request';
2
+ import type { ParserState } from './parser-state';
3
+ export declare const getWorkOnSeekRequestOptions: (state: ParserState) => WorkOnSeekRequestOptions;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWorkOnSeekRequestOptions = void 0;
4
+ const getWorkOnSeekRequestOptions = (state) => {
5
+ return {
6
+ logLevel: state.logLevel,
7
+ controller: state.controller,
8
+ isoState: state.iso,
9
+ iterator: state.iterator,
10
+ structureState: state.structure,
11
+ callbacks: state.callbacks,
12
+ src: state.src,
13
+ contentLength: state.contentLength,
14
+ readerInterface: state.readerInterface,
15
+ videoSection: state.videoSection,
16
+ mp4HeaderSegment: state.mp4HeaderSegment,
17
+ mode: state.mode,
18
+ seekInfiniteLoop: state.seekInfiniteLoop,
19
+ currentReader: state.currentReader,
20
+ discardReadBytes: state.discardReadBytes,
21
+ fields: state.fields,
22
+ onAudioTrack: state.onAudioTrack,
23
+ onVideoTrack: state.onVideoTrack,
24
+ };
25
+ };
26
+ exports.getWorkOnSeekRequestOptions = getWorkOnSeekRequestOptions;
@@ -1,4 +1,4 @@
1
- import type { MediaParserController } from './media-parser-controller';
1
+ import type { MediaParserController } from './controller/media-parser-controller';
2
2
  import type { ParseMediaOnProgress, ParseMediaProgress } from './options';
3
3
  export type ThrottledState = {
4
4
  get: () => ParseMediaProgress;
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "4.0.279";
1
+ export declare const VERSION = "4.0.282";
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.279';
5
+ exports.VERSION = '4.0.282';
@@ -1,2 +1,43 @@
1
+ import type { MediaParserController } from './controller/media-parser-controller';
2
+ import type { AllOptions, ParseMediaFields } from './fields';
3
+ import type { BufferIterator } from './iterator/buffer-iterator';
4
+ import type { LogLevel } from './log';
5
+ import type { ParseMediaMode, ParseMediaSrc } from './options';
6
+ import type { IsoBaseMediaStructure } from './parse-result';
7
+ import type { ReaderInterface } from './readers/reader';
8
+ import type { CurrentReader } from './state/current-reader';
9
+ import type { IsoBaseMediaState } from './state/iso-base-media/iso-state';
1
10
  import type { ParserState } from './state/parser-state';
2
- export declare const workOnSeekRequest: (state: ParserState) => Promise<void>;
11
+ import type { SeekInfiniteLoop } from './state/seek-infinite-loop';
12
+ import type { StructureState } from './state/structure';
13
+ import { type MediaSectionState } from './state/video-section';
14
+ export type WorkOnSeekRequestOptions = {
15
+ logLevel: LogLevel;
16
+ controller: MediaParserController;
17
+ isoState: IsoBaseMediaState;
18
+ iterator: BufferIterator;
19
+ structureState: StructureState;
20
+ src: ParseMediaSrc;
21
+ contentLength: number;
22
+ readerInterface: ReaderInterface;
23
+ mediaSection: MediaSectionState;
24
+ mp4HeaderSegment: IsoBaseMediaStructure | null;
25
+ mode: ParseMediaMode;
26
+ seekInfiniteLoop: SeekInfiniteLoop;
27
+ currentReader: CurrentReader;
28
+ discardReadBytes: (force: boolean) => Promise<void>;
29
+ fields: Partial<AllOptions<ParseMediaFields>>;
30
+ };
31
+ export declare const getWorkOnSeekRequestOptions: (state: ParserState) => WorkOnSeekRequestOptions;
32
+ export declare const workOnSeekRequest: (options: WorkOnSeekRequestOptions) => Promise<void>;
33
+ export type SeekResolution = {
34
+ type: 'valid-but-must-wait';
35
+ } | {
36
+ type: 'invalid';
37
+ } | {
38
+ type: 'intermediary-seek';
39
+ byte: number;
40
+ } | {
41
+ type: 'do-seek';
42
+ byte: number;
43
+ };
@@ -1,43 +1,132 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.workOnSeekRequest = void 0;
3
+ exports.workOnSeekRequest = exports.getWorkOnSeekRequestOptions = void 0;
4
4
  const get_seeking_info_1 = require("./get-seeking-info");
5
5
  const log_1 = require("./log");
6
6
  const perform_seek_1 = require("./perform-seek");
7
- const turnSeekIntoByte = (seek, state) => {
7
+ const turnSeekIntoByte = async ({ seek, mediaSectionState, logLevel, iterator, structureState, mp4HeaderSegment, isoState, }) => {
8
+ const mediaSections = mediaSectionState.getMediaSections();
9
+ if (mediaSections.length === 0) {
10
+ log_1.Log.trace(logLevel, 'No video sections defined, cannot seek yet');
11
+ return {
12
+ type: 'valid-but-must-wait',
13
+ };
14
+ }
8
15
  if (seek.type === 'keyframe-before-time-in-seconds') {
9
- const seekingInfo = (0, get_seeking_info_1.getSeekingInfo)(state);
16
+ const seekingInfo = (0, get_seeking_info_1.getSeekingInfo)({
17
+ structureState,
18
+ mp4HeaderSegment,
19
+ mediaSectionState,
20
+ isoState,
21
+ });
10
22
  if (!seekingInfo) {
23
+ log_1.Log.trace(logLevel, 'No seeking info, cannot seek yet');
11
24
  return {
12
25
  type: 'valid-but-must-wait',
13
26
  };
14
27
  }
15
- const seekingByte = (0, get_seeking_info_1.getSeekingByte)(seekingInfo, seek.time);
28
+ const seekingByte = await (0, get_seeking_info_1.getSeekingByte)({
29
+ info: seekingInfo,
30
+ time: seek.time,
31
+ logLevel,
32
+ currentPosition: iterator.counter.getOffset(),
33
+ isoState,
34
+ });
35
+ return seekingByte;
36
+ }
37
+ if (seek.type === 'byte') {
16
38
  return {
17
39
  type: 'do-seek',
18
- byte: seekingByte,
40
+ byte: seek.byte,
19
41
  };
20
42
  }
21
- throw new Error(`Cannot process seek request ${JSON.stringify(seek)}`);
43
+ throw new Error(`Cannot process seek request for ${seek}: ${JSON.stringify(seek)}`);
44
+ };
45
+ const getWorkOnSeekRequestOptions = (state) => {
46
+ return {
47
+ logLevel: state.logLevel,
48
+ controller: state.controller,
49
+ isoState: state.iso,
50
+ iterator: state.iterator,
51
+ structureState: state.structure,
52
+ src: state.src,
53
+ contentLength: state.contentLength,
54
+ readerInterface: state.readerInterface,
55
+ mediaSection: state.mediaSection,
56
+ mp4HeaderSegment: state.mp4HeaderSegment,
57
+ mode: state.mode,
58
+ seekInfiniteLoop: state.seekInfiniteLoop,
59
+ currentReader: state.currentReader,
60
+ discardReadBytes: state.discardReadBytes,
61
+ fields: state.fields,
62
+ };
22
63
  };
23
- const workOnSeekRequest = async (state) => {
24
- const seek = state.controller._internals.seekSignal.getSeek();
64
+ exports.getWorkOnSeekRequestOptions = getWorkOnSeekRequestOptions;
65
+ const workOnSeekRequest = async (options) => {
66
+ const { logLevel, controller, mediaSection, mp4HeaderSegment, isoState, iterator, structureState, src, contentLength, readerInterface, mode, seekInfiniteLoop, currentReader, discardReadBytes, fields, } = options;
67
+ const seek = controller._internals.seekSignal.getSeek();
25
68
  if (!seek) {
26
69
  return;
27
70
  }
28
- log_1.Log.trace(state.logLevel, `Has seek request: ${JSON.stringify(seek)}`);
29
- const resolution = turnSeekIntoByte(seek, state);
30
- log_1.Log.trace(state.logLevel, `Seek action: ${JSON.stringify(resolution)}`);
71
+ log_1.Log.trace(logLevel, `Has seek request: ${JSON.stringify(seek)}`);
72
+ const resolution = await turnSeekIntoByte({
73
+ seek,
74
+ mediaSectionState: mediaSection,
75
+ logLevel,
76
+ iterator,
77
+ structureState,
78
+ mp4HeaderSegment,
79
+ isoState,
80
+ });
81
+ log_1.Log.trace(logLevel, `Seek action: ${JSON.stringify(resolution)}`);
82
+ if (resolution.type === 'intermediary-seek') {
83
+ await (0, perform_seek_1.performSeek)({
84
+ seekTo: resolution.byte,
85
+ userInitiated: false,
86
+ controller,
87
+ mediaSection,
88
+ iterator,
89
+ logLevel,
90
+ mode,
91
+ contentLength,
92
+ seekInfiniteLoop,
93
+ currentReader,
94
+ readerInterface,
95
+ src,
96
+ discardReadBytes,
97
+ fields,
98
+ });
99
+ return;
100
+ }
31
101
  if (resolution.type === 'do-seek') {
32
- await (0, perform_seek_1.performSeek)({ state, seekTo: resolution.byte });
33
- const { hasChanged } = state.controller._internals.seekSignal.clearSeekIfStillSame(seek);
102
+ await (0, perform_seek_1.performSeek)({
103
+ seekTo: resolution.byte,
104
+ userInitiated: true,
105
+ controller,
106
+ mediaSection,
107
+ iterator,
108
+ logLevel,
109
+ mode,
110
+ contentLength,
111
+ seekInfiniteLoop,
112
+ currentReader,
113
+ readerInterface,
114
+ src,
115
+ discardReadBytes,
116
+ fields,
117
+ });
118
+ const { hasChanged } = controller._internals.seekSignal.clearSeekIfStillSame(seek);
34
119
  if (hasChanged) {
35
- log_1.Log.trace(state.logLevel, `Seek request has changed while seeking, seeking again`);
36
- await (0, exports.workOnSeekRequest)(state);
120
+ log_1.Log.trace(logLevel, `Seek request has changed while seeking, seeking again`);
121
+ await (0, exports.workOnSeekRequest)(options);
37
122
  }
123
+ return;
38
124
  }
39
125
  if (resolution.type === 'invalid') {
40
126
  throw new Error(`The seek request ${JSON.stringify(seek)} cannot be processed`);
41
127
  }
128
+ if (resolution.type === 'valid-but-must-wait') {
129
+ log_1.Log.trace(logLevel, 'Seek request is valid but cannot be processed yet');
130
+ }
42
131
  };
43
132
  exports.workOnSeekRequest = workOnSeekRequest;
@@ -1,3 +1,3 @@
1
- import type { MediaParserController } from '../media-parser-controller';
1
+ import type { MediaParserController } from '../controller/media-parser-controller';
2
2
  import type { WorkerRequestPayload } from './worker-types';
3
3
  export declare const forwardMediaParserControllerToWorker: (controller: MediaParserController) => ((message: WorkerRequestPayload) => void);
@@ -8,6 +8,10 @@ const forwardMediaParserControllerToWorker = (controller) => {
8
8
  controller.pause();
9
9
  return;
10
10
  }
11
+ if (message.type === 'request-seek') {
12
+ controller._experimentalSeek(message.payload);
13
+ return;
14
+ }
11
15
  if (message.type === 'request-resume') {
12
16
  controller.resume();
13
17
  return;
@@ -1,5 +1,6 @@
1
1
  import type { M3uAssociatedPlaylist, M3uStream } from '../containers/m3u/get-streams';
2
2
  import type { SelectM3uAssociatedPlaylistsFnOptions, SelectM3uStreamFnOptions } from '../containers/m3u/select-stream';
3
+ import type { Seek } from '../controller/seek-signal';
3
4
  import type { Dimensions, ImageType } from '../errors';
4
5
  import type { Options, ParseMediaFields } from '../fields';
5
6
  import type { MediaParserLocation } from '../get-location';
@@ -51,6 +52,10 @@ export type ParseMediaOnWorkerPayload = {
51
52
  type RequestPause = {
52
53
  type: 'request-pause';
53
54
  };
55
+ type RequestSeek = {
56
+ type: 'request-seek';
57
+ payload: Seek;
58
+ };
54
59
  type RequestResume = {
55
60
  type: 'request-resume';
56
61
  };
@@ -239,6 +244,6 @@ export type SignalErrorInCallback = {
239
244
  type: 'signal-error-in-callback';
240
245
  nonce: string;
241
246
  };
242
- export type WorkerRequestPayload = ParseMediaOnWorkerPayload | RequestResume | RequestPause | RequestAbort | AcknowledgeCallback | SignalErrorInCallback;
247
+ export type WorkerRequestPayload = ParseMediaOnWorkerPayload | RequestResume | RequestPause | RequestAbort | RequestSeek | AcknowledgeCallback | SignalErrorInCallback;
243
248
  export type WorkerResponsePayload = ResponseDone | ResponseError | ResponseOnCallbackRequest;
244
249
  export {};
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.messageHandler = void 0;
4
4
  const select_stream_1 = require("./containers/m3u/select-stream");
5
+ const media_parser_controller_1 = require("./controller/media-parser-controller");
5
6
  const internal_parse_media_1 = require("./internal-parse-media");
6
- const media_parser_controller_1 = require("./media-parser-controller");
7
7
  const forward_controller_1 = require("./worker/forward-controller");
8
8
  const serialize_error_1 = require("./worker/serialize-error");
9
9
  const post = (message) => {
@@ -0,0 +1,4 @@
1
+ import type { ParseMediaOnWorker } from './options';
2
+ export type { ParseMediaOnWorker, ParseMediaOnWorkerOptions } from './options';
3
+ export declare const parseMediaOnWebWorker: ParseMediaOnWorker;
4
+ export declare const parseMediaOnServerWorker: ParseMediaOnWorker;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseMediaOnServerWorker = exports.parseMediaOnWebWorker = void 0;
4
+ const parse_media_on_worker_entry_1 = require("./parse-media-on-worker-entry");
5
+ const parseMediaOnWebWorker = (params) => {
6
+ return (0, parse_media_on_worker_entry_1.parseMediaOnWorkerImplementation)(params, new URL('./worker-web-entry', import.meta.url), 'parseMediaOnWebWorker');
7
+ };
8
+ exports.parseMediaOnWebWorker = parseMediaOnWebWorker;
9
+ const parseMediaOnServerWorker = (params) => {
10
+ return (0, parse_media_on_worker_entry_1.parseMediaOnWorkerImplementation)(params, new URL('./worker-server-entry', import.meta.url), 'parseMediaOnServerWorker');
11
+ };
12
+ exports.parseMediaOnServerWorker = parseMediaOnServerWorker;
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.279",
6
+ "version": "4.0.282",
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.5",
13
- "@remotion/example-videos": "4.0.279",
14
- "@remotion/eslint-config-internal": "4.0.279"
13
+ "@remotion/example-videos": "4.0.282",
14
+ "@remotion/eslint-config-internal": "4.0.282"
15
15
  },
16
16
  "publishConfig": {
17
17
  "access": "public"
@@ -68,6 +68,12 @@
68
68
  "require": "./dist/worker.js",
69
69
  "module": "./dist/esm/worker.mjs",
70
70
  "import": "./dist/esm/worker.mjs"
71
+ },
72
+ "./server-worker": {
73
+ "types": "./dist/server-worker.d.ts",
74
+ "require": "./dist/server-worker.js",
75
+ "module": "./dist/esm/server-worker.mjs",
76
+ "import": "./dist/esm/server-worker.mjs"
71
77
  }
72
78
  },
73
79
  "typesVersions": {
@@ -92,6 +98,9 @@
92
98
  ],
93
99
  "worker": [
94
100
  "./dist/worker.d.ts"
101
+ ],
102
+ "server-worker": [
103
+ "./dist/server-worker.d.ts"
95
104
  ]
96
105
  }
97
106
  },