@remotion/media-parser 4.0.290 → 4.0.292

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 (160) hide show
  1. package/dist/containers/iso-base-media/base-media-box.d.ts +0 -1
  2. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +4 -1
  3. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.js +9 -5
  4. package/dist/containers/iso-base-media/find-keyframe-before-time.js +16 -11
  5. package/dist/containers/iso-base-media/find-track-to-seek.d.ts +14 -0
  6. package/dist/containers/iso-base-media/find-track-to-seek.js +39 -0
  7. package/dist/containers/iso-base-media/get-children.js +2 -2
  8. package/dist/containers/iso-base-media/get-keyframes.js +6 -1
  9. package/dist/containers/iso-base-media/get-mfra-seeking-box.d.ts +3 -1
  10. package/dist/containers/iso-base-media/get-mfra-seeking-box.js +5 -1
  11. package/dist/containers/iso-base-media/get-moov-atom.js +6 -3
  12. package/dist/containers/iso-base-media/get-sample-position-bounds.js +3 -1
  13. package/dist/containers/iso-base-media/get-sample-positions-from-track.js +1 -1
  14. package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.d.ts +14 -0
  15. package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.js +89 -0
  16. package/dist/containers/iso-base-media/get-seeking-byte.d.ts +3 -3
  17. package/dist/containers/iso-base-media/get-seeking-byte.js +32 -96
  18. package/dist/containers/iso-base-media/mdat/calculate-jump-marks.d.ts +6 -0
  19. package/dist/containers/iso-base-media/mdat/calculate-jump-marks.js +131 -0
  20. package/dist/containers/iso-base-media/mdat/mdat.d.ts +2 -2
  21. package/dist/containers/iso-base-media/mdat/mdat.js +18 -2
  22. package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.d.ts +3 -3
  23. package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.js +2 -2
  24. package/dist/containers/iso-base-media/mfra/get-mfra-atom.d.ts +5 -1
  25. package/dist/containers/iso-base-media/mfra/get-mfra-atom.js +3 -1
  26. package/dist/containers/iso-base-media/mfra/get-mfro-atom.d.ts +5 -1
  27. package/dist/containers/iso-base-media/mfra/get-mfro-atom.js +3 -1
  28. package/dist/containers/iso-base-media/parse-boxes.js +5 -2
  29. package/dist/containers/iso-base-media/process-box.d.ts +16 -5
  30. package/dist/containers/iso-base-media/process-box.js +206 -118
  31. package/dist/containers/iso-base-media/sample-positions.d.ts +25 -0
  32. package/dist/containers/iso-base-media/sample-positions.js +37 -0
  33. package/dist/containers/iso-base-media/stsd/samples.js +1 -0
  34. package/dist/containers/iso-base-media/stsd/stsc.d.ts +1 -6
  35. package/dist/containers/iso-base-media/stsd/stsc.js +2 -5
  36. package/dist/containers/iso-base-media/stsd/stss.d.ts +1 -1
  37. package/dist/containers/iso-base-media/stsd/stss.js +2 -2
  38. package/dist/containers/iso-base-media/turn-sample-positions-into-array.d.ts +19 -0
  39. package/dist/containers/iso-base-media/turn-sample-positions-into-array.js +73 -0
  40. package/dist/containers/m3u/after-manifest-fetch.d.ts +5 -1
  41. package/dist/containers/m3u/after-manifest-fetch.js +3 -1
  42. package/dist/containers/m3u/first-sample-in-m3u-chunk.d.ts +13 -0
  43. package/dist/containers/m3u/first-sample-in-m3u-chunk.js +31 -0
  44. package/dist/containers/m3u/get-seeking-byte.d.ts +13 -0
  45. package/dist/containers/m3u/get-seeking-byte.js +32 -0
  46. package/dist/containers/m3u/get-streams.d.ts +1 -0
  47. package/dist/containers/m3u/get-streams.js +1 -0
  48. package/dist/containers/m3u/iterate-over-segment-files.d.ts +5 -3
  49. package/dist/containers/m3u/iterate-over-segment-files.js +11 -1
  50. package/dist/containers/m3u/parse-m3u-media-directive.js +1 -0
  51. package/dist/containers/m3u/parse-m3u.js +8 -0
  52. package/dist/containers/m3u/process-m3u-chunk.d.ts +12 -0
  53. package/dist/containers/m3u/process-m3u-chunk.js +274 -0
  54. package/dist/containers/m3u/run-over-m3u.js +7 -80
  55. package/dist/containers/m3u/sample-sorter.d.ts +1 -0
  56. package/dist/containers/m3u/sample-sorter.js +4 -1
  57. package/dist/containers/m3u/seek/get-chunk-to-seek-to.d.ts +5 -0
  58. package/dist/containers/m3u/seek/get-chunk-to-seek-to.js +14 -0
  59. package/dist/containers/m3u/seeking-hints.d.ts +2 -0
  60. package/dist/containers/m3u/seeking-hints.js +9 -0
  61. package/dist/containers/m3u/select-stream.d.ts +2 -1
  62. package/dist/containers/m3u/select-stream.js +7 -2
  63. package/dist/containers/m3u/types.d.ts +1 -0
  64. package/dist/containers/riff/seek/fetch-idx1.d.ts +3 -1
  65. package/dist/containers/riff/seek/fetch-idx1.js +3 -1
  66. package/dist/containers/transport-stream/handle-aac-packet.d.ts +2 -2
  67. package/dist/containers/transport-stream/handle-avc-packet.d.ts +2 -2
  68. package/dist/containers/transport-stream/process-audio.d.ts +2 -2
  69. package/dist/containers/transport-stream/process-stream-buffers.d.ts +3 -3
  70. package/dist/containers/transport-stream/process-video.d.ts +2 -2
  71. package/dist/containers/webm/get-sample-from-block.d.ts +12 -2
  72. package/dist/containers/webm/get-sample-from-block.js +40 -9
  73. package/dist/containers/webm/parse-ebml.js +28 -10
  74. package/dist/containers/webm/seek/fetch-web-cues.d.ts +3 -1
  75. package/dist/containers/webm/seek/fetch-web-cues.js +3 -1
  76. package/dist/containers/webm/state-for-processing.d.ts +2 -2
  77. package/dist/controller/media-parser-controller.d.ts +1 -1
  78. package/dist/controller/media-parser-controller.js +6 -2
  79. package/dist/controller/seek-signal.d.ts +1 -5
  80. package/dist/download-and-parse-media.js +1 -1
  81. package/dist/esm/index.mjs +1400 -611
  82. package/dist/esm/node.mjs +23 -3
  83. package/dist/esm/server-worker.mjs +8 -1
  84. package/dist/esm/universal.mjs +168 -15
  85. package/dist/esm/web.mjs +145 -13
  86. package/dist/esm/worker-server-entry.mjs +1467 -635
  87. package/dist/esm/worker-web-entry.mjs +1439 -634
  88. package/dist/esm/worker.mjs +8 -1
  89. package/dist/get-audio-codec.js +3 -0
  90. package/dist/get-duration.js +2 -1
  91. package/dist/get-fps.js +2 -1
  92. package/dist/get-sample-positions-from-mp4.js +10 -5
  93. package/dist/get-sample-positions.js +4 -4
  94. package/dist/get-seeking-byte.d.ts +5 -3
  95. package/dist/get-seeking-byte.js +19 -10
  96. package/dist/get-seeking-hints.d.ts +3 -3
  97. package/dist/get-seeking-hints.js +18 -13
  98. package/dist/get-tracks.d.ts +9 -1
  99. package/dist/get-tracks.js +13 -6
  100. package/dist/index.d.ts +21 -5
  101. package/dist/init-video.js +3 -2
  102. package/dist/internal-parse-media.js +13 -4
  103. package/dist/iterator/buffer-iterator.js +5 -3
  104. package/dist/metadata/metadata-from-iso.js +2 -1
  105. package/dist/options.d.ts +6 -1
  106. package/dist/parse-loop.js +22 -6
  107. package/dist/parse-media-on-worker-entry.js +1 -0
  108. package/dist/parse-media.js +1 -1
  109. package/dist/parse-result.d.ts +2 -2
  110. package/dist/perform-seek.d.ts +3 -1
  111. package/dist/perform-seek.js +3 -1
  112. package/dist/readers/fetch/get-body-and-reader.js +17 -2
  113. package/dist/readers/from-fetch.d.ts +17 -1
  114. package/dist/readers/from-fetch.js +68 -13
  115. package/dist/readers/from-node.js +24 -2
  116. package/dist/readers/from-web-file.js +3 -0
  117. package/dist/readers/reader.d.ts +19 -2
  118. package/dist/readers/universal.js +9 -0
  119. package/dist/readers/web.js +6 -0
  120. package/dist/register-track.d.ts +3 -3
  121. package/dist/seek-backwards.d.ts +3 -1
  122. package/dist/seek-backwards.js +4 -1
  123. package/dist/seek-forwards.d.ts +3 -1
  124. package/dist/seek-forwards.js +3 -1
  125. package/dist/seeking-hints.d.ts +4 -1
  126. package/dist/set-seeking-hints.js +4 -0
  127. package/dist/skip.d.ts +5 -0
  128. package/dist/skip.js +6 -1
  129. package/dist/state/can-skip-tracks.d.ts +1 -0
  130. package/dist/state/can-skip-tracks.js +10 -6
  131. package/dist/state/iso-base-media/cached-sample-positions.d.ts +15 -1
  132. package/dist/state/iso-base-media/cached-sample-positions.js +9 -4
  133. package/dist/state/iso-base-media/iso-state.d.ts +5 -1
  134. package/dist/state/iso-base-media/iso-state.js +2 -1
  135. package/dist/state/iso-base-media/lazy-mfra-load.d.ts +3 -1
  136. package/dist/state/iso-base-media/lazy-mfra-load.js +2 -1
  137. package/dist/state/keyframes.js +1 -0
  138. package/dist/state/m3u-state.d.ts +15 -4
  139. package/dist/state/m3u-state.js +20 -0
  140. package/dist/state/matroska/lazy-cues-fetch.d.ts +3 -1
  141. package/dist/state/matroska/lazy-cues-fetch.js +2 -1
  142. package/dist/state/matroska/webm.d.ts +3 -1
  143. package/dist/state/matroska/webm.js +2 -1
  144. package/dist/state/parser-state.d.ts +29 -13
  145. package/dist/state/parser-state.js +19 -5
  146. package/dist/state/riff/lazy-idx1-fetch.d.ts +3 -1
  147. package/dist/state/riff/lazy-idx1-fetch.js +2 -1
  148. package/dist/state/riff.d.ts +3 -1
  149. package/dist/state/riff.js +2 -1
  150. package/dist/state/sample-callbacks.d.ts +3 -2
  151. package/dist/state/sample-callbacks.js +3 -3
  152. package/dist/version.d.ts +1 -1
  153. package/dist/version.js +1 -1
  154. package/dist/work-on-seek-request.d.ts +6 -3
  155. package/dist/work-on-seek-request.js +13 -13
  156. package/dist/worker/forward-controller-to-worker.js +1 -1
  157. package/dist/worker/serialize-error.js +26 -3
  158. package/dist/worker/worker-types.d.ts +7 -1
  159. package/dist/worker-server.js +2 -2
  160. package/package.json +3 -3
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getChunkToSeekTo = void 0;
4
+ const getChunkToSeekTo = ({ chunks, seekToSecondsToProcess, }) => {
5
+ let duration = 0;
6
+ for (let i = 0; i < chunks.length; i++) {
7
+ if (duration >= seekToSecondsToProcess) {
8
+ return Math.max(0, i - 1);
9
+ }
10
+ duration += chunks[i].duration;
11
+ }
12
+ return Math.max(0, chunks.length - 1);
13
+ };
14
+ exports.getChunkToSeekTo = getChunkToSeekTo;
@@ -0,0 +1,2 @@
1
+ import type { M3u8SeekingHints } from '../../seeking-hints';
2
+ export declare const getSeekingHintsForM3u: () => M3u8SeekingHints;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSeekingHintsForM3u = void 0;
4
+ const getSeekingHintsForM3u = () => {
5
+ return {
6
+ type: 'm3u8-seeking-hints',
7
+ };
8
+ };
9
+ exports.getSeekingHintsForM3u = getSeekingHintsForM3u;
@@ -7,9 +7,10 @@ export type SelectM3uAssociatedPlaylistsFnOptions = {
7
7
  associatedPlaylists: M3uAssociatedPlaylist[];
8
8
  };
9
9
  export type SelectM3uAssociatedPlaylistsFn = (options: SelectM3uAssociatedPlaylistsFnOptions) => M3uAssociatedPlaylist[] | Promise<M3uAssociatedPlaylist[]>;
10
- export declare const selectAssociatedPlaylists: ({ playlists, fn, }: {
10
+ export declare const selectAssociatedPlaylists: ({ playlists, fn, skipAudioTracks, }: {
11
11
  playlists: M3uAssociatedPlaylist[];
12
12
  fn: SelectM3uAssociatedPlaylistsFn;
13
+ skipAudioTracks: boolean;
13
14
  }) => Promise<M3uAssociatedPlaylist[]>;
14
15
  export declare const defaultSelectM3uAssociatedPlaylists: SelectM3uAssociatedPlaylistsFn;
15
16
  export declare const selectStream: ({ streams, fn, }: {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.defaultSelectM3uStreamFn = exports.selectStream = exports.defaultSelectM3uAssociatedPlaylists = exports.selectAssociatedPlaylists = void 0;
4
- const selectAssociatedPlaylists = async ({ playlists, fn, }) => {
4
+ const selectAssociatedPlaylists = async ({ playlists, fn, skipAudioTracks, }) => {
5
5
  if (playlists.length < 1) {
6
6
  return Promise.resolve([]);
7
7
  }
@@ -9,12 +9,17 @@ const selectAssociatedPlaylists = async ({ playlists, fn, }) => {
9
9
  if (!Array.isArray(streams)) {
10
10
  throw new Error('Expected an array of associated playlists');
11
11
  }
12
+ const selectedStreams = [];
12
13
  for (const stream of streams) {
14
+ if (stream.isAudio && skipAudioTracks) {
15
+ continue;
16
+ }
13
17
  if (!playlists.find((playlist) => playlist.src === stream.src)) {
14
18
  throw new Error(`The associated playlist ${JSON.stringify(streams)} cannot be selected because it was not in the list of selectable playlists`);
15
19
  }
20
+ selectedStreams.push(stream);
16
21
  }
17
- return streams;
22
+ return selectedStreams;
18
23
  };
19
24
  exports.selectAssociatedPlaylists = selectAssociatedPlaylists;
20
25
  const defaultSelectM3uAssociatedPlaylists = ({ associatedPlaylists }) => {
@@ -67,6 +67,7 @@ export type M3uMediaInfo = {
67
67
  default: boolean;
68
68
  channels: number | null;
69
69
  uri: string;
70
+ mediaType: string | null;
70
71
  };
71
72
  export type M3uTextValue = {
72
73
  type: 'm3u-text-value';
@@ -1,13 +1,15 @@
1
1
  import type { MediaParserController } from '../../../controller/media-parser-controller';
2
+ import type { PrefetchCache } from '../../../fetch';
2
3
  import { type LogLevel } from '../../../log';
3
4
  import type { ParseMediaSrc } from '../../../options';
4
5
  import type { ReaderInterface } from '../../../readers/reader';
5
- export declare const fetchIdx1: ({ src, readerInterface, controller, position, logLevel, }: {
6
+ export declare const fetchIdx1: ({ src, readerInterface, controller, position, logLevel, prefetchCache, }: {
6
7
  src: ParseMediaSrc;
7
8
  readerInterface: ReaderInterface;
8
9
  controller: MediaParserController;
9
10
  position: number;
10
11
  logLevel: LogLevel;
12
+ prefetchCache: PrefetchCache;
11
13
  }) => Promise<{
12
14
  entries: import("../riff-box").Idx1Entry[];
13
15
  videoTrackIndex: number | null;
@@ -4,12 +4,14 @@ exports.fetchIdx1 = void 0;
4
4
  const buffer_iterator_1 = require("../../../iterator/buffer-iterator");
5
5
  const log_1 = require("../../../log");
6
6
  const expect_riff_box_1 = require("../expect-riff-box");
7
- const fetchIdx1 = async ({ src, readerInterface, controller, position, logLevel, }) => {
7
+ const fetchIdx1 = async ({ src, readerInterface, controller, position, logLevel, prefetchCache, }) => {
8
8
  log_1.Log.verbose(logLevel, 'Making request to fetch idx1 from ', src, 'position', position);
9
9
  const result = await readerInterface.read({
10
10
  controller,
11
11
  range: position,
12
12
  src,
13
+ logLevel,
14
+ prefetchCache,
13
15
  });
14
16
  const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(new Uint8Array(), Infinity);
15
17
  while (true) {
@@ -1,5 +1,5 @@
1
1
  import type { LogLevel } from '../../log';
2
- import type { SampleCallbacks } from '../../state/sample-callbacks';
2
+ import type { CallbacksState } from '../../state/sample-callbacks';
3
3
  import type { TransportStreamState } from '../../state/transport-stream/transport-stream';
4
4
  import type { OnAudioTrack } from '../../webcodec-sample-types';
5
5
  import type { TransportStreamPacketBuffer } from './process-stream-buffers';
@@ -7,7 +7,7 @@ export declare const handleAacPacket: ({ streamBuffer, programId, offset, sample
7
7
  streamBuffer: TransportStreamPacketBuffer;
8
8
  programId: number;
9
9
  offset: number;
10
- sampleCallbacks: SampleCallbacks;
10
+ sampleCallbacks: CallbacksState;
11
11
  logLevel: LogLevel;
12
12
  onAudioTrack: OnAudioTrack | null;
13
13
  transportStream: TransportStreamState;
@@ -1,5 +1,5 @@
1
1
  import type { LogLevel } from '../../log';
2
- import type { SampleCallbacks } from '../../state/sample-callbacks';
2
+ import type { CallbacksState } from '../../state/sample-callbacks';
3
3
  import type { TransportStreamState } from '../../state/transport-stream/transport-stream';
4
4
  import type { OnVideoTrack } from '../../webcodec-sample-types';
5
5
  import type { TransportStreamPacketBuffer } from './process-stream-buffers';
@@ -8,7 +8,7 @@ export declare const handleAvcPacket: ({ streamBuffer, programId, offset, sample
8
8
  streamBuffer: TransportStreamPacketBuffer;
9
9
  programId: number;
10
10
  offset: number;
11
- sampleCallbacks: SampleCallbacks;
11
+ sampleCallbacks: CallbacksState;
12
12
  logLevel: LogLevel;
13
13
  onVideoTrack: OnVideoTrack | null;
14
14
  transportStream: TransportStreamState;
@@ -1,6 +1,6 @@
1
1
  import type { LogLevel } from '../../log';
2
2
  import type { TransportStreamStructure } from '../../parse-result';
3
- import type { SampleCallbacks } from '../../state/sample-callbacks';
3
+ import type { CallbacksState } from '../../state/sample-callbacks';
4
4
  import type { TransportStreamState } from '../../state/transport-stream/transport-stream';
5
5
  import type { OnAudioTrack, OnVideoTrack } from '../../webcodec-sample-types';
6
6
  import type { TransportStreamEntry } from './parse-pmt';
@@ -11,7 +11,7 @@ export declare const canProcessAudio: ({ streamBuffer, }: {
11
11
  export declare const processAudio: ({ transportStreamEntry, structure, offset, sampleCallbacks, logLevel, onAudioTrack, onVideoTrack, transportStream, makeSamplesStartAtZero, }: {
12
12
  transportStreamEntry: TransportStreamEntry;
13
13
  structure: TransportStreamStructure;
14
- sampleCallbacks: SampleCallbacks;
14
+ sampleCallbacks: CallbacksState;
15
15
  logLevel: LogLevel;
16
16
  onAudioTrack: OnAudioTrack | null;
17
17
  onVideoTrack: OnVideoTrack | null;
@@ -1,6 +1,6 @@
1
1
  import type { LogLevel } from '../../log';
2
2
  import type { TransportStreamStructure } from '../../parse-result';
3
- import type { SampleCallbacks } from '../../state/sample-callbacks';
3
+ import type { CallbacksState } from '../../state/sample-callbacks';
4
4
  import type { TransportStreamState } from '../../state/transport-stream/transport-stream';
5
5
  import type { OnAudioTrack, OnVideoTrack } from '../../webcodec-sample-types';
6
6
  import type { PacketPes } from './parse-pes';
@@ -21,7 +21,7 @@ export declare const processStreamBuffer: ({ streamBuffer, programId, structure,
21
21
  streamBuffer: TransportStreamPacketBuffer;
22
22
  programId: number;
23
23
  structure: TransportStreamStructure;
24
- sampleCallbacks: SampleCallbacks;
24
+ sampleCallbacks: CallbacksState;
25
25
  logLevel: LogLevel;
26
26
  onAudioTrack: OnAudioTrack | null;
27
27
  onVideoTrack: OnVideoTrack | null;
@@ -30,7 +30,7 @@ export declare const processStreamBuffer: ({ streamBuffer, programId, structure,
30
30
  }) => Promise<void>;
31
31
  export declare const processFinalStreamBuffers: ({ structure, sampleCallbacks, logLevel, onAudioTrack, onVideoTrack, transportStream, makeSamplesStartAtZero, }: {
32
32
  structure: TransportStreamStructure;
33
- sampleCallbacks: SampleCallbacks;
33
+ sampleCallbacks: CallbacksState;
34
34
  logLevel: LogLevel;
35
35
  onAudioTrack: OnAudioTrack | null;
36
36
  onVideoTrack: OnVideoTrack | null;
@@ -1,6 +1,6 @@
1
1
  import type { LogLevel } from '../../log';
2
2
  import type { TransportStreamStructure } from '../../parse-result';
3
- import type { SampleCallbacks } from '../../state/sample-callbacks';
3
+ import type { CallbacksState } from '../../state/sample-callbacks';
4
4
  import type { TransportStreamState } from '../../state/transport-stream/transport-stream';
5
5
  import type { OnAudioTrack, OnVideoTrack } from '../../webcodec-sample-types';
6
6
  import type { TransportStreamPacketBuffer } from './process-stream-buffers';
@@ -11,7 +11,7 @@ export declare const processVideo: ({ programId, structure, streamBuffer, sample
11
11
  programId: number;
12
12
  structure: TransportStreamStructure;
13
13
  streamBuffer: TransportStreamPacketBuffer;
14
- sampleCallbacks: SampleCallbacks;
14
+ sampleCallbacks: CallbacksState;
15
15
  logLevel: LogLevel;
16
16
  onAudioTrack: OnAudioTrack | null;
17
17
  onVideoTrack: OnVideoTrack | null;
@@ -1,6 +1,8 @@
1
+ import type { LogLevel } from '../../log';
1
2
  import type { WebmState } from '../../state/matroska/webm';
3
+ import type { CallbacksState } from '../../state/sample-callbacks';
2
4
  import type { StructureState } from '../../state/structure';
3
- import type { AudioOrVideoSample } from '../../webcodec-sample-types';
5
+ import type { AudioOrVideoSample, OnVideoTrack } from '../../webcodec-sample-types';
4
6
  import type { BlockSegment, SimpleBlockSegment } from './segments/all-segments';
5
7
  type SampleResult = {
6
8
  type: 'video-sample';
@@ -14,5 +16,13 @@ type SampleResult = {
14
16
  } | {
15
17
  type: 'no-sample';
16
18
  };
17
- export declare const getSampleFromBlock: (ebml: BlockSegment | SimpleBlockSegment, webmState: WebmState, offset: number, structureState: StructureState) => SampleResult;
19
+ export declare const getSampleFromBlock: ({ ebml, webmState, offset, structureState, callbacks, logLevel, onVideoTrack, }: {
20
+ ebml: BlockSegment | SimpleBlockSegment;
21
+ webmState: WebmState;
22
+ offset: number;
23
+ structureState: StructureState;
24
+ callbacks: CallbacksState;
25
+ logLevel: LogLevel;
26
+ onVideoTrack: OnVideoTrack | null;
27
+ }) => Promise<SampleResult>;
18
28
  export {};
@@ -2,22 +2,50 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getSampleFromBlock = void 0;
4
4
  const buffer_iterator_1 = require("../../iterator/buffer-iterator");
5
+ const register_track_1 = require("../../register-track");
5
6
  const parse_avc_1 = require("../avc/parse-avc");
6
7
  const get_ready_tracks_1 = require("./get-ready-tracks");
7
8
  const all_segments_1 = require("./segments/all-segments");
8
9
  const block_simple_block_flags_1 = require("./segments/block-simple-block-flags");
9
- const addAvcToTrackIfNecessary = ({ partialVideoSample, codec, structureState, webmState, trackNumber, }) => {
10
- if (codec === 'V_MPEG4/ISO/AVC' &&
11
- (0, get_ready_tracks_1.getTracksFromMatroska)({ structureState, webmState }).missingInfo.length > 0) {
12
- const parsed = (0, parse_avc_1.parseAvc)(partialVideoSample.data);
13
- for (const parse of parsed) {
14
- if (parse.type === 'avc-profile') {
15
- webmState.setAvcProfileForTrackNumber(trackNumber, parse);
10
+ const addAvcToTrackAndActivateTrackIfNecessary = async ({ partialVideoSample, codec, structureState, webmState, trackNumber, logLevel, callbacks, onVideoTrack, }) => {
11
+ if (codec !== 'V_MPEG4/ISO/AVC') {
12
+ return;
13
+ }
14
+ const missingTracks = (0, get_ready_tracks_1.getTracksFromMatroska)({
15
+ structureState,
16
+ webmState,
17
+ }).missingInfo;
18
+ if (missingTracks.length === 0) {
19
+ return;
20
+ }
21
+ const parsed = (0, parse_avc_1.parseAvc)(partialVideoSample.data);
22
+ for (const parse of parsed) {
23
+ if (parse.type === 'avc-profile') {
24
+ webmState.setAvcProfileForTrackNumber(trackNumber, parse);
25
+ const track = missingTracks.find((t) => t.trackId === trackNumber);
26
+ if (!track) {
27
+ throw new Error('Could not find track ' + trackNumber);
28
+ }
29
+ const resolvedTracks = (0, get_ready_tracks_1.getTracksFromMatroska)({
30
+ structureState,
31
+ webmState,
32
+ }).resolved;
33
+ const resolvedTrack = resolvedTracks.find((t) => t.trackId === trackNumber);
34
+ if (!resolvedTrack) {
35
+ throw new Error('Could not find track ' + trackNumber);
16
36
  }
37
+ await (0, register_track_1.registerVideoTrack)({
38
+ track: resolvedTrack,
39
+ container: 'webm',
40
+ logLevel,
41
+ onVideoTrack,
42
+ registerVideoSampleCallback: callbacks.registerVideoSampleCallback,
43
+ tracks: callbacks.tracks,
44
+ });
17
45
  }
18
46
  }
19
47
  };
20
- const getSampleFromBlock = (ebml, webmState, offset, structureState) => {
48
+ const getSampleFromBlock = async ({ ebml, webmState, offset, structureState, callbacks, logLevel, onVideoTrack, }) => {
21
49
  const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(ebml.value, ebml.value.length);
22
50
  const trackNumber = iterator.getVint();
23
51
  if (trackNumber === null) {
@@ -62,12 +90,15 @@ const getSampleFromBlock = (ebml, webmState, offset, structureState) => {
62
90
  partialVideoSample,
63
91
  };
64
92
  }
65
- addAvcToTrackIfNecessary({
93
+ await addAvcToTrackAndActivateTrackIfNecessary({
66
94
  codec,
67
95
  partialVideoSample,
68
96
  structureState,
69
97
  webmState,
70
98
  trackNumber,
99
+ callbacks,
100
+ logLevel,
101
+ onVideoTrack,
71
102
  });
72
103
  const sample = {
73
104
  ...partialVideoSample,
@@ -131,21 +131,31 @@ const postprocessEbml = async ({ offset, ebml, statesForProcessing: { webmState,
131
131
  });
132
132
  }
133
133
  if (track && track.type === 'video') {
134
- await (0, register_track_1.registerVideoTrack)({
135
- track,
136
- container: 'webm',
137
- logLevel,
138
- onVideoTrack,
139
- registerVideoSampleCallback: callbacks.registerVideoSampleCallback,
140
- tracks: callbacks.tracks,
141
- });
134
+ if (track.codec !== make_track_1.NO_CODEC_PRIVATE_SHOULD_BE_DERIVED_FROM_SPS) {
135
+ await (0, register_track_1.registerVideoTrack)({
136
+ track,
137
+ container: 'webm',
138
+ logLevel,
139
+ onVideoTrack,
140
+ registerVideoSampleCallback: callbacks.registerVideoSampleCallback,
141
+ tracks: callbacks.tracks,
142
+ });
143
+ }
142
144
  }
143
145
  }
144
146
  if (ebml.type === 'Timestamp') {
145
147
  webmState.setTimestampOffset(offset, ebml.value.value);
146
148
  }
147
149
  if (ebml.type === 'Block' || ebml.type === 'SimpleBlock') {
148
- const sample = (0, get_sample_from_block_1.getSampleFromBlock)(ebml, webmState, offset, structureState);
150
+ const sample = await (0, get_sample_from_block_1.getSampleFromBlock)({
151
+ ebml,
152
+ webmState,
153
+ offset,
154
+ structureState,
155
+ callbacks,
156
+ logLevel,
157
+ onVideoTrack,
158
+ });
149
159
  if (sample.type === 'video-sample') {
150
160
  await callbacks.onVideoSample(sample.videoSample.trackId, sample.videoSample);
151
161
  return {
@@ -182,7 +192,15 @@ const postprocessEbml = async ({ offset, ebml, statesForProcessing: { webmState,
182
192
  const hasReferenceBlock = ebml.value.find((c) => c.type === 'ReferenceBlock');
183
193
  const sample = block.value.length === 0
184
194
  ? null
185
- : (0, get_sample_from_block_1.getSampleFromBlock)(block, webmState, offset, structureState);
195
+ : await (0, get_sample_from_block_1.getSampleFromBlock)({
196
+ ebml: block,
197
+ webmState,
198
+ offset,
199
+ structureState,
200
+ callbacks,
201
+ logLevel,
202
+ onVideoTrack,
203
+ });
186
204
  if (sample && sample.type === 'partial-video-sample') {
187
205
  const completeFrame = {
188
206
  ...sample.partialVideoSample,
@@ -1,12 +1,14 @@
1
1
  import type { MediaParserController } from '../../../controller/media-parser-controller';
2
+ import type { PrefetchCache } from '../../../fetch';
2
3
  import type { LogLevel } from '../../../log';
3
4
  import type { ParseMediaSrc } from '../../../options';
4
5
  import type { ReaderInterface } from '../../../readers/reader';
5
6
  import type { MatroskaCue } from './format-cues';
6
- export declare const fetchWebmCues: ({ src, readerInterface, controller, position, logLevel, }: {
7
+ export declare const fetchWebmCues: ({ src, readerInterface, controller, position, logLevel, prefetchCache, }: {
7
8
  src: ParseMediaSrc;
8
9
  readerInterface: ReaderInterface;
9
10
  controller: MediaParserController;
10
11
  position: number;
11
12
  logLevel: LogLevel;
13
+ prefetchCache: PrefetchCache;
12
14
  }) => Promise<MatroskaCue[] | null>;
@@ -4,11 +4,13 @@ exports.fetchWebmCues = void 0;
4
4
  const buffer_iterator_1 = require("../../../iterator/buffer-iterator");
5
5
  const segments_1 = require("../segments");
6
6
  const format_cues_1 = require("./format-cues");
7
- const fetchWebmCues = async ({ src, readerInterface, controller, position, logLevel, }) => {
7
+ const fetchWebmCues = async ({ src, readerInterface, controller, position, logLevel, prefetchCache, }) => {
8
8
  const result = await readerInterface.read({
9
9
  controller,
10
10
  range: position,
11
11
  src,
12
+ logLevel,
13
+ prefetchCache,
12
14
  });
13
15
  const { value } = await result.reader.reader.read();
14
16
  if (!value) {
@@ -1,12 +1,12 @@
1
1
  import type { LogLevel } from '../../log';
2
2
  import type { WebmState } from '../../state/matroska/webm';
3
3
  import type { ParserState } from '../../state/parser-state';
4
- import type { SampleCallbacks } from '../../state/sample-callbacks';
4
+ import type { CallbacksState } from '../../state/sample-callbacks';
5
5
  import type { StructureState } from '../../state/structure';
6
6
  import type { OnAudioTrack, OnVideoTrack } from '../../webcodec-sample-types';
7
7
  export type WebmRequiredStatesForProcessing = {
8
8
  webmState: WebmState;
9
- callbacks: SampleCallbacks;
9
+ callbacks: CallbacksState;
10
10
  logLevel: LogLevel;
11
11
  onAudioTrack: OnAudioTrack | null;
12
12
  onVideoTrack: OnVideoTrack | null;
@@ -7,7 +7,7 @@ export type MediaParserController = {
7
7
  abort: (reason?: any) => void;
8
8
  pause: PauseSignal['pause'];
9
9
  resume: PauseSignal['resume'];
10
- _experimentalSeek: SeekSignal['seek'];
10
+ seek: SeekSignal['seek'];
11
11
  addEventListener: MediaParserEmitter['addEventListener'];
12
12
  removeEventListener: MediaParserEmitter['removeEventListener'];
13
13
  getSeekingHints: () => Promise<SeekingHints | null>;
@@ -14,7 +14,11 @@ const mediaParserController = () => {
14
14
  const performedSeeksSignal = (0, performed_seeks_stats_1.performedSeeksStats)();
15
15
  const checkForAbortAndPause = async () => {
16
16
  if (abortController.signal.aborted) {
17
- throw new errors_1.MediaParserAbortError('Aborted');
17
+ const err = new errors_1.MediaParserAbortError('Aborted');
18
+ if (abortController.signal.reason) {
19
+ err.cause = abortController.signal.reason;
20
+ }
21
+ throw err;
18
22
  }
19
23
  await pauseSignal.waitUntilResume();
20
24
  };
@@ -37,7 +41,7 @@ const mediaParserController = () => {
37
41
  abortController.abort(reason);
38
42
  emitter.dispatchAbort(reason);
39
43
  },
40
- _experimentalSeek: seekSignal.seek,
44
+ seek: seekSignal.seek,
41
45
  pause: pauseSignal.pause,
42
46
  resume: pauseSignal.resume,
43
47
  addEventListener: emitter.addEventListener,
@@ -10,10 +10,6 @@ type SeekToTime = {
10
10
  type: 'keyframe-before-time';
11
11
  timeInSeconds: number;
12
12
  };
13
- type SeekToByte = {
14
- type: 'byte';
15
- byte: number;
16
- };
17
- export type Seek = SeekToTime | SeekToByte;
13
+ export type Seek = SeekToTime;
18
14
  export declare const makeSeekSignal: (emitter: MediaParserEmitter) => SeekSignal;
19
15
  export {};
@@ -23,7 +23,7 @@ const downloadAndParseMedia = async (options) => {
23
23
  onDimensions: (_f = options.onDimensions) !== null && _f !== void 0 ? _f : null,
24
24
  selectM3uStream: (_g = options.selectM3uStream) !== null && _g !== void 0 ? _g : select_stream_1.defaultSelectM3uStreamFn,
25
25
  selectM3uAssociatedPlaylists: (_h = options.selectM3uAssociatedPlaylists) !== null && _h !== void 0 ? _h : select_stream_1.defaultSelectM3uAssociatedPlaylists,
26
- mp4HeaderSegment: (_j = options.mp4HeaderSegment) !== null && _j !== void 0 ? _j : null,
26
+ m3uPlaylistContext: (_j = options.m3uPlaylistContext) !== null && _j !== void 0 ? _j : null,
27
27
  onDiscardedData: async (data) => {
28
28
  await content.write(data);
29
29
  },