@remotion/media-parser 4.0.302 → 4.0.304

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 (94) hide show
  1. package/dist/check-if-done.js +4 -0
  2. package/dist/containers/aac/parse-aac.js +1 -0
  3. package/dist/containers/avc/key.d.ts +1 -1
  4. package/dist/containers/avc/key.js +5 -1
  5. package/dist/containers/avc/max-buffer-size.d.ts +3 -0
  6. package/dist/containers/avc/max-buffer-size.js +40 -0
  7. package/dist/containers/avc/parse-avc.d.ts +6 -7
  8. package/dist/containers/avc/parse-avc.js +83 -7
  9. package/dist/containers/flac/parse-streaminfo.js +1 -0
  10. package/dist/containers/iso-base-media/base-media-box.d.ts +2 -1
  11. package/dist/containers/iso-base-media/elst.d.ts +19 -0
  12. package/dist/containers/iso-base-media/elst.js +33 -0
  13. package/dist/containers/iso-base-media/find-keyframe-before-time.d.ts +2 -1
  14. package/dist/containers/iso-base-media/find-keyframe-before-time.js +3 -3
  15. package/dist/containers/iso-base-media/get-moov-atom.js +1 -0
  16. package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.js +1 -0
  17. package/dist/containers/iso-base-media/get-seeking-byte.js +1 -0
  18. package/dist/containers/iso-base-media/make-track.d.ts +1 -1
  19. package/dist/containers/iso-base-media/make-track.js +4 -1
  20. package/dist/containers/iso-base-media/mdat/get-editlist.d.ts +5 -0
  21. package/dist/containers/iso-base-media/mdat/get-editlist.js +21 -0
  22. package/dist/containers/iso-base-media/mdat/mdat.js +8 -5
  23. package/dist/containers/iso-base-media/parse-boxes.js +1 -0
  24. package/dist/containers/iso-base-media/process-box.d.ts +2 -0
  25. package/dist/containers/iso-base-media/process-box.js +31 -4
  26. package/dist/containers/iso-base-media/traversal.d.ts +2 -0
  27. package/dist/containers/iso-base-media/traversal.js +10 -1
  28. package/dist/containers/mp3/parse-mpeg-header.js +1 -0
  29. package/dist/containers/riff/convert-queued-sample-to-mediaparser-sample.d.ts +14 -0
  30. package/dist/containers/riff/convert-queued-sample-to-mediaparser-sample.js +55 -0
  31. package/dist/containers/riff/get-seeking-byte.d.ts +3 -1
  32. package/dist/containers/riff/get-seeking-byte.js +5 -1
  33. package/dist/containers/riff/get-strh-for-index.d.ts +2 -0
  34. package/dist/containers/riff/get-strh-for-index.js +17 -0
  35. package/dist/containers/riff/get-tracks-from-avi.js +2 -0
  36. package/dist/containers/riff/parse-movi.js +51 -44
  37. package/dist/containers/riff/parse-riff-body.js +8 -0
  38. package/dist/containers/transport-stream/handle-aac-packet.js +1 -0
  39. package/dist/containers/transport-stream/handle-avc-packet.d.ts +3 -1
  40. package/dist/containers/transport-stream/handle-avc-packet.js +4 -3
  41. package/dist/containers/transport-stream/parse-transport-stream.js +1 -0
  42. package/dist/containers/transport-stream/process-audio.d.ts +3 -1
  43. package/dist/containers/transport-stream/process-audio.js +2 -1
  44. package/dist/containers/transport-stream/process-sample-if-possible.js +2 -0
  45. package/dist/containers/transport-stream/process-stream-buffers.d.ts +5 -2
  46. package/dist/containers/transport-stream/process-stream-buffers.js +4 -2
  47. package/dist/containers/transport-stream/process-video.d.ts +3 -1
  48. package/dist/containers/transport-stream/process-video.js +2 -1
  49. package/dist/containers/wav/parse-fmt.js +1 -0
  50. package/dist/containers/webm/get-sample-from-block.d.ts +3 -1
  51. package/dist/containers/webm/get-sample-from-block.js +4 -3
  52. package/dist/containers/webm/make-track.js +2 -0
  53. package/dist/containers/webm/parse-ebml.d.ts +1 -1
  54. package/dist/containers/webm/parse-ebml.js +3 -1
  55. package/dist/containers/webm/state-for-processing.d.ts +3 -1
  56. package/dist/containers/webm/state-for-processing.js +2 -1
  57. package/dist/convert-audio-or-video-sample.js +1 -0
  58. package/dist/esm/index.mjs +597 -127
  59. package/dist/esm/universal.mjs +9 -8
  60. package/dist/esm/web.mjs +9 -8
  61. package/dist/esm/worker-server-entry.mjs +596 -126
  62. package/dist/esm/worker-web-entry.mjs +596 -126
  63. package/dist/get-seeking-byte.d.ts +3 -1
  64. package/dist/get-seeking-byte.js +2 -1
  65. package/dist/get-tracks.d.ts +3 -0
  66. package/dist/get-tracks.js +10 -1
  67. package/dist/index.d.ts +34 -3
  68. package/dist/readers/from-fetch.js +2 -1
  69. package/dist/run-parse-iteration.js +0 -3
  70. package/dist/state/avc/avc-state.d.ts +12 -0
  71. package/dist/state/avc/avc-state.js +44 -0
  72. package/dist/state/iso-base-media/iso-state.d.ts +4 -0
  73. package/dist/state/iso-base-media/iso-state.js +2 -0
  74. package/dist/state/iso-base-media/timescale-state.d.ts +5 -0
  75. package/dist/state/iso-base-media/timescale-state.js +13 -0
  76. package/dist/state/parser-state.d.ts +34 -3
  77. package/dist/state/parser-state.js +3 -0
  78. package/dist/state/riff/queued-b-frames.d.ts +9 -0
  79. package/dist/state/riff/queued-b-frames.js +47 -0
  80. package/dist/state/riff/queued-frames.d.ts +9 -0
  81. package/dist/state/riff/queued-frames.js +39 -0
  82. package/dist/state/riff/riff-keyframes.js +1 -0
  83. package/dist/state/riff/sample-counter.d.ts +13 -2
  84. package/dist/state/riff/sample-counter.js +34 -7
  85. package/dist/state/riff.d.ts +19 -2
  86. package/dist/state/riff.js +3 -0
  87. package/dist/state/transport-stream/last-emitted-sample.d.ts +1 -1
  88. package/dist/state/transport-stream/transport-stream.d.ts +1 -1
  89. package/dist/version.d.ts +1 -1
  90. package/dist/version.js +1 -1
  91. package/dist/webcodec-sample-types.d.ts +11 -0
  92. package/dist/work-on-seek-request.d.ts +2 -0
  93. package/dist/work-on-seek-request.js +5 -2
  94. package/package.json +3 -3
@@ -16,6 +16,13 @@ export declare const riffSpecificState: ({ controller, logLevel, readerInterface
16
16
  onProfile: (profile: SpsAndPps) => Promise<void>;
17
17
  registerOnAvcProfileCallback: (callback: AvcProfileInfoCallback) => void;
18
18
  getNextTrackIndex: () => number;
19
+ queuedBFrames: {
20
+ addFrame: (frame: import("./riff/queued-frames").QueuedVideoSample, maxFramesInBuffer: number) => void;
21
+ flush: () => void;
22
+ getReleasedFrame: () => import("./riff/queued-frames").QueuedVideoSample | null;
23
+ hasReleasedFrames: () => boolean;
24
+ clear: () => void;
25
+ };
19
26
  incrementNextTrackIndex: () => void;
20
27
  lazyIdx1: {
21
28
  triggerLoad: (position: number) => Promise<{
@@ -38,14 +45,24 @@ export declare const riffSpecificState: ({ controller, logLevel, readerInterface
38
45
  };
39
46
  sampleCounter: {
40
47
  onAudioSample: (trackId: number, audioSample: import("..").MediaParserAudioSample) => void;
41
- onVideoSample: (trackId: number, videoSample: import("..").MediaParserVideoSample) => void;
42
- getSamplesForTrack: (trackId: number) => number;
48
+ onVideoSample: (videoSample: import("..").MediaParserVideoSample) => void;
49
+ getSampleCountForTrack: ({ trackId }: {
50
+ trackId: number;
51
+ }) => number;
43
52
  setSamplesFromSeek: (samples: Record<number, number>) => void;
44
53
  riffKeys: {
45
54
  addKeyframe: (keyframe: import("./riff/riff-keyframes").RiffKeyframe) => void;
46
55
  getKeyframes: () => import("./riff/riff-keyframes").RiffKeyframe[];
47
56
  setFromSeekingHints: (keyframesFromHints: import("./riff/riff-keyframes").RiffKeyframe[]) => void;
48
57
  };
58
+ setPocAtKeyframeOffset: ({ keyframeOffset, poc, }: {
59
+ keyframeOffset: number;
60
+ poc: number;
61
+ }) => void;
62
+ getPocAtKeyframeOffset: ({ keyframeOffset, }: {
63
+ keyframeOffset: number;
64
+ }) => number[];
65
+ getKeyframeAtOffset: (sample: import("./riff/queued-frames").QueuedVideoSample) => number | null;
49
66
  };
50
67
  };
51
68
  export type RiffState = ReturnType<typeof riffSpecificState>;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.riffSpecificState = void 0;
4
4
  const lazy_idx1_fetch_1 = require("./riff/lazy-idx1-fetch");
5
+ const queued_frames_1 = require("./riff/queued-frames");
5
6
  const sample_counter_1 = require("./riff/sample-counter");
6
7
  const riffSpecificState = ({ controller, logLevel, readerInterface, src, prefetchCache, }) => {
7
8
  let avcProfile = null;
@@ -25,6 +26,7 @@ const riffSpecificState = ({ controller, logLevel, readerInterface, src, prefetc
25
26
  prefetchCache,
26
27
  });
27
28
  const sampleCounter = (0, sample_counter_1.riffSampleCounter)();
29
+ const queuedBFrames = (0, queued_frames_1.queuedBFramesState)();
28
30
  return {
29
31
  getAvcProfile: () => {
30
32
  return avcProfile;
@@ -34,6 +36,7 @@ const riffSpecificState = ({ controller, logLevel, readerInterface, src, prefetc
34
36
  getNextTrackIndex: () => {
35
37
  return nextTrackIndex;
36
38
  },
39
+ queuedBFrames,
37
40
  incrementNextTrackIndex: () => {
38
41
  nextTrackIndex++;
39
42
  },
@@ -1,6 +1,6 @@
1
1
  import type { MediaParserAudioSample, MediaParserVideoSample } from '../../webcodec-sample-types';
2
2
  export declare const lastEmittedSampleState: () => {
3
3
  setLastEmittedSample: (sample: MediaParserAudioSample | MediaParserVideoSample) => void;
4
- getLastEmittedSample: () => MediaParserAudioSample | MediaParserVideoSample | null;
4
+ getLastEmittedSample: () => MediaParserVideoSample | MediaParserAudioSample | null;
5
5
  resetLastEmittedSample: () => void;
6
6
  };
@@ -22,7 +22,7 @@ export declare const transportStreamState: () => {
22
22
  resetBeforeSeek: () => void;
23
23
  lastEmittedSample: {
24
24
  setLastEmittedSample: (sample: import("../..").MediaParserAudioSample | import("../..").MediaParserVideoSample) => void;
25
- getLastEmittedSample: () => import("../..").MediaParserAudioSample | import("../..").MediaParserVideoSample | null;
25
+ getLastEmittedSample: () => import("../..").MediaParserVideoSample | import("../..").MediaParserAudioSample | null;
26
26
  resetLastEmittedSample: () => void;
27
27
  };
28
28
  };
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "4.0.302";
1
+ export declare const VERSION = "4.0.304";
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.302';
5
+ exports.VERSION = '4.0.304';
@@ -23,6 +23,16 @@ export type MediaParserAudioSample = {
23
23
  offset: number;
24
24
  timescale: number;
25
25
  };
26
+ export type MediaParserAvcKeyframeInfo = {
27
+ type: 'keyframe';
28
+ poc: number | null;
29
+ };
30
+ export type MediaParserAvcDeltaFrameInfo = {
31
+ type: 'delta-frame';
32
+ isBidirectionalFrame: boolean;
33
+ poc: number | null;
34
+ };
35
+ export type MediaParserAvcExtraInfo = MediaParserAvcKeyframeInfo | MediaParserAvcDeltaFrameInfo;
26
36
  export type MediaParserVideoSample = {
27
37
  data: Uint8Array;
28
38
  timestamp: number;
@@ -33,4 +43,5 @@ export type MediaParserVideoSample = {
33
43
  dts: number;
34
44
  offset: number;
35
45
  timescale: number;
46
+ avc?: MediaParserAvcExtraInfo;
36
47
  };
@@ -6,6 +6,7 @@ import type { MediaParserLogLevel } from './log';
6
6
  import type { M3uPlaylistContext, ParseMediaMode, ParseMediaSrc } from './options';
7
7
  import type { MediaParserReaderInterface } from './readers/reader';
8
8
  import type { AacState } from './state/aac-state';
9
+ import type { AvcState } from './state/avc/avc-state';
9
10
  import type { CurrentReader } from './state/current-reader';
10
11
  import type { FlacState } from './state/flac-state';
11
12
  import type { TracksState } from './state/has-tracks-section';
@@ -48,6 +49,7 @@ export type WorkOnSeekRequestOptions = {
48
49
  aacState: AacState;
49
50
  m3uState: M3uState;
50
51
  prefetchCache: PrefetchCache;
52
+ avcState: AvcState;
51
53
  };
52
54
  export declare const getWorkOnSeekRequestOptions: (state: ParserState) => WorkOnSeekRequestOptions;
53
55
  export declare const workOnSeekRequest: (options: WorkOnSeekRequestOptions) => Promise<void>;
@@ -5,7 +5,7 @@ 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");
7
7
  const perform_seek_1 = require("./perform-seek");
8
- const turnSeekIntoByte = async ({ seek, mediaSectionState, logLevel, iterator, structureState, m3uPlaylistContext, isoState, transportStream, tracksState, webmState, keyframes, flacState, samplesObserved, riffState, mp3State, contentLength, aacState, m3uState, }) => {
8
+ const turnSeekIntoByte = async ({ seek, mediaSectionState, logLevel, iterator, structureState, m3uPlaylistContext, isoState, transportStream, tracksState, webmState, keyframes, flacState, samplesObserved, riffState, mp3State, contentLength, aacState, m3uState, avcState, }) => {
9
9
  const mediaSections = mediaSectionState.getMediaSections();
10
10
  if (mediaSections.length === 0) {
11
11
  log_1.Log.trace(logLevel, 'No media sections defined, cannot seek yet');
@@ -51,6 +51,7 @@ const turnSeekIntoByte = async ({ seek, mediaSectionState, logLevel, iterator, s
51
51
  structure: structureState,
52
52
  riffState,
53
53
  m3uState,
54
+ avcState,
54
55
  });
55
56
  return seekingByte;
56
57
  };
@@ -82,11 +83,12 @@ const getWorkOnSeekRequestOptions = (state) => {
82
83
  aacState: state.aac,
83
84
  m3uState: state.m3u,
84
85
  prefetchCache: state.prefetchCache,
86
+ avcState: state.avc,
85
87
  };
86
88
  };
87
89
  exports.getWorkOnSeekRequestOptions = getWorkOnSeekRequestOptions;
88
90
  const workOnSeekRequest = async (options) => {
89
- const { logLevel, controller, mediaSection, m3uPlaylistContext, isoState, iterator, structureState, src, contentLength, readerInterface, mode, seekInfiniteLoop, currentReader, discardReadBytes, fields, transportStream, tracksState, webmState, keyframes, flacState, samplesObserved, riffState, mp3State, aacState, prefetchCache, m3uState, } = options;
91
+ const { logLevel, controller, mediaSection, m3uPlaylistContext, isoState, iterator, structureState, src, contentLength, readerInterface, mode, seekInfiniteLoop, currentReader, discardReadBytes, fields, transportStream, tracksState, webmState, keyframes, flacState, samplesObserved, riffState, mp3State, aacState, prefetchCache, m3uState, avcState, } = options;
90
92
  const seek = controller._internals.seekSignal.getSeek();
91
93
  if (seek === null) {
92
94
  return;
@@ -111,6 +113,7 @@ const workOnSeekRequest = async (options) => {
111
113
  contentLength,
112
114
  aacState,
113
115
  m3uState,
116
+ avcState,
114
117
  });
115
118
  log_1.Log.trace(logLevel, `Seek action: ${JSON.stringify(resolution)}`);
116
119
  if (resolution.type === 'intermediary-seek') {
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.302",
6
+ "version": "4.0.304",
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.302",
14
- "@remotion/eslint-config-internal": "4.0.302"
13
+ "@remotion/example-videos": "4.0.304",
14
+ "@remotion/eslint-config-internal": "4.0.304"
15
15
  },
16
16
  "publishConfig": {
17
17
  "access": "public"