@remotion/media-parser 4.0.297 → 4.0.300

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 (180) hide show
  1. package/dist/add-avc-profile-to-track.d.ts +2 -2
  2. package/dist/add-avc-profile-to-track.js +7 -1
  3. package/dist/codec-data.d.ts +29 -0
  4. package/dist/codec-data.js +2 -0
  5. package/dist/containers/aac/parse-aac.js +2 -3
  6. package/dist/containers/avc/color.d.ts +6 -6
  7. package/dist/containers/avc/color.js +53 -27
  8. package/dist/containers/avc/create-avc-decoder-configuration-record.d.ts +2 -0
  9. package/dist/containers/avc/create-avc-decoder-configuration-record.js +35 -0
  10. package/dist/containers/avc/interpret-sps.d.ts +2 -2
  11. package/dist/containers/avc/interpret-sps.js +2 -2
  12. package/dist/containers/flac/parse-streaminfo.js +2 -3
  13. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +1 -1
  14. package/dist/containers/iso-base-media/color-to-webcodecs-colors.d.ts +2 -0
  15. package/dist/containers/iso-base-media/color-to-webcodecs-colors.js +12 -0
  16. package/dist/containers/iso-base-media/find-keyframe-before-time.d.ts +2 -2
  17. package/dist/containers/iso-base-media/find-track-to-seek.d.ts +5 -5
  18. package/dist/containers/iso-base-media/find-track-to-seek.js +18 -2
  19. package/dist/containers/iso-base-media/get-actual-number-of-channels.d.ts +3 -2
  20. package/dist/containers/iso-base-media/get-actual-number-of-channels.js +14 -3
  21. package/dist/containers/iso-base-media/get-children.d.ts +2 -2
  22. package/dist/containers/iso-base-media/get-keyframes.js +11 -2
  23. package/dist/containers/iso-base-media/get-mfra-seeking-box.d.ts +4 -4
  24. package/dist/containers/iso-base-media/get-moov-atom.js +1 -1
  25. package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.d.ts +9 -5
  26. package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.js +17 -4
  27. package/dist/containers/iso-base-media/get-seeking-byte.d.ts +2 -2
  28. package/dist/containers/iso-base-media/get-seeking-byte.js +5 -8
  29. package/dist/containers/iso-base-media/make-track.d.ts +2 -2
  30. package/dist/containers/iso-base-media/make-track.js +18 -17
  31. package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.d.ts +2 -2
  32. package/dist/containers/iso-base-media/mfra/get-mfra-atom.d.ts +4 -4
  33. package/dist/containers/iso-base-media/mfra/get-mfro-atom.d.ts +4 -4
  34. package/dist/containers/iso-base-media/moov/moov.d.ts +2 -2
  35. package/dist/containers/iso-base-media/process-box.d.ts +5 -5
  36. package/dist/containers/iso-base-media/stsd/mebx.d.ts +2 -2
  37. package/dist/containers/iso-base-media/stsd/samples.d.ts +3 -3
  38. package/dist/containers/iso-base-media/stsd/stsd.d.ts +2 -2
  39. package/dist/containers/iso-base-media/trak/trak.d.ts +2 -2
  40. package/dist/containers/iso-base-media/traversal.d.ts +1 -0
  41. package/dist/containers/iso-base-media/traversal.js +13 -1
  42. package/dist/containers/m3u/after-manifest-fetch.d.ts +6 -6
  43. package/dist/containers/m3u/after-manifest-fetch.js +1 -1
  44. package/dist/containers/m3u/fetch-m3u8-stream.d.ts +2 -2
  45. package/dist/containers/m3u/first-sample-in-m3u-chunk.d.ts +3 -3
  46. package/dist/containers/m3u/first-sample-in-m3u-chunk.js +2 -8
  47. package/dist/containers/m3u/get-seeking-byte.d.ts +3 -3
  48. package/dist/containers/m3u/get-streams.d.ts +6 -6
  49. package/dist/containers/m3u/get-streams.js +9 -9
  50. package/dist/containers/m3u/parse-stream-inf.js +3 -3
  51. package/dist/containers/m3u/process-m3u-chunk.js +3 -3
  52. package/dist/containers/m3u/run-over-m3u.d.ts +2 -2
  53. package/dist/containers/m3u/sample-sorter.d.ts +7 -7
  54. package/dist/containers/m3u/types.d.ts +3 -3
  55. package/dist/containers/mp3/parse-mpeg-header.js +2 -3
  56. package/dist/containers/mp3/seek/audio-sample-from-cbr.d.ts +2 -2
  57. package/dist/containers/riff/get-tracks-from-avi.d.ts +4 -9
  58. package/dist/containers/riff/get-tracks-from-avi.js +19 -20
  59. package/dist/containers/riff/parse-video-section.js +1 -1
  60. package/dist/containers/riff/seek/fetch-idx1.d.ts +4 -4
  61. package/dist/containers/transport-stream/get-tracks.d.ts +2 -2
  62. package/dist/containers/transport-stream/get-tracks.js +1 -5
  63. package/dist/containers/transport-stream/handle-aac-packet.d.ts +4 -4
  64. package/dist/containers/transport-stream/handle-aac-packet.js +5 -4
  65. package/dist/containers/transport-stream/handle-avc-packet.d.ts +4 -4
  66. package/dist/containers/transport-stream/handle-avc-packet.js +10 -4
  67. package/dist/containers/transport-stream/process-audio.d.ts +5 -5
  68. package/dist/containers/transport-stream/process-stream-buffers.d.ts +8 -8
  69. package/dist/containers/transport-stream/process-video.d.ts +5 -5
  70. package/dist/containers/wav/parse-fmt.js +2 -3
  71. package/dist/containers/webm/color.d.ts +2 -2
  72. package/dist/containers/webm/color.js +6 -25
  73. package/dist/containers/webm/get-ready-tracks.d.ts +3 -3
  74. package/dist/containers/webm/get-sample-from-block.d.ts +7 -7
  75. package/dist/containers/webm/make-track.d.ts +3 -3
  76. package/dist/containers/webm/make-track.js +53 -21
  77. package/dist/containers/webm/parse-webm-header.js +5 -0
  78. package/dist/containers/webm/seek/fetch-web-cues.d.ts +4 -4
  79. package/dist/containers/webm/seek/get-seeking-byte.d.ts +2 -2
  80. package/dist/containers/webm/segments.d.ts +2 -2
  81. package/dist/containers/webm/segments.js +1 -1
  82. package/dist/containers/webm/state-for-processing.d.ts +5 -5
  83. package/dist/containers/webm/traversal.js +2 -1
  84. package/dist/controller/emitter.d.ts +2 -3
  85. package/dist/controller/seek-signal.d.ts +3 -9
  86. package/dist/controller/seek-signal.js +2 -2
  87. package/dist/convert-audio-or-video-sample.d.ts +4 -4
  88. package/dist/download-and-parse-media.js +1 -1
  89. package/dist/emit-available-info.js +9 -9
  90. package/dist/errors.d.ts +4 -18
  91. package/dist/errors.js +1 -15
  92. package/dist/esm/index.mjs +654 -544
  93. package/dist/esm/node.mjs +63 -51
  94. package/dist/esm/server-worker.mjs +13 -34
  95. package/dist/esm/universal.mjs +63 -51
  96. package/dist/esm/worker-server-entry.mjs +500 -388
  97. package/dist/esm/worker-web-entry.mjs +437 -337
  98. package/dist/esm/worker.mjs +14 -35
  99. package/dist/fields.d.ts +2 -2
  100. package/dist/file-types/bmp.d.ts +2 -2
  101. package/dist/file-types/detect-file-type.d.ts +2 -1
  102. package/dist/file-types/detect-file-type.js +1 -6
  103. package/dist/file-types/gif.d.ts +2 -0
  104. package/dist/file-types/gif.js +18 -0
  105. package/dist/file-types/index.js +4 -2
  106. package/dist/file-types/png.d.ts +2 -2
  107. package/dist/file-types/webp.d.ts +2 -2
  108. package/dist/get-audio-codec.d.ts +3 -4
  109. package/dist/get-audio-codec.js +44 -23
  110. package/dist/get-dimensions.d.ts +2 -2
  111. package/dist/get-dimensions.js +6 -3
  112. package/dist/get-duration.js +6 -7
  113. package/dist/get-fields-from-callbacks.js +1 -1
  114. package/dist/get-is-hdr.js +6 -5
  115. package/dist/get-sample-aspect-ratio.d.ts +5 -5
  116. package/dist/get-seeking-byte.d.ts +2 -2
  117. package/dist/get-tracks.d.ts +34 -44
  118. package/dist/get-tracks.js +6 -46
  119. package/dist/get-video-codec.d.ts +4 -3
  120. package/dist/get-video-codec.js +6 -6
  121. package/dist/has-all-info.js +1 -1
  122. package/dist/index.d.ts +114 -55
  123. package/dist/index.js +6 -4
  124. package/dist/init-video.js +4 -11
  125. package/dist/internal-parse-media.js +1 -1
  126. package/dist/log.d.ts +6 -6
  127. package/dist/metadata/get-metadata.js +6 -4
  128. package/dist/options.d.ts +19 -23
  129. package/dist/parse-loop.js +2 -2
  130. package/dist/parse-media-on-worker-entry.js +13 -5
  131. package/dist/parse-media.js +1 -1
  132. package/dist/perform-seek.d.ts +4 -4
  133. package/dist/readers/from-fetch.d.ts +2 -2
  134. package/dist/readers/from-node.d.ts +2 -2
  135. package/dist/readers/from-node.js +64 -55
  136. package/dist/readers/from-web-file.d.ts +2 -2
  137. package/dist/readers/reader.d.ts +5 -5
  138. package/dist/readers/universal.d.ts +2 -2
  139. package/dist/readers/web.d.ts +2 -2
  140. package/dist/register-track.d.ts +12 -12
  141. package/dist/remotion-license-acknowledge.d.ts +2 -2
  142. package/dist/seek-backwards.d.ts +4 -4
  143. package/dist/seek-forwards.d.ts +4 -4
  144. package/dist/server-worker.module.d.ts +2 -0
  145. package/dist/server-worker.module.js +12 -0
  146. package/dist/state/can-skip-tracks.js +1 -1
  147. package/dist/state/emitted-fields.js +1 -1
  148. package/dist/state/has-tracks-section.d.ts +5 -5
  149. package/dist/state/iso-base-media/cached-sample-positions.d.ts +3 -3
  150. package/dist/state/iso-base-media/cached-sample-positions.js +16 -7
  151. package/dist/state/iso-base-media/iso-state.d.ts +4 -4
  152. package/dist/state/iso-base-media/lazy-mfra-load.d.ts +4 -4
  153. package/dist/state/m3u-state.d.ts +11 -11
  154. package/dist/state/matroska/lazy-cues-fetch.d.ts +4 -4
  155. package/dist/state/matroska/webm.d.ts +4 -4
  156. package/dist/state/matroska/webm.js +1 -1
  157. package/dist/state/may-skip-video-data.d.ts +1 -0
  158. package/dist/state/may-skip-video-data.js +23 -2
  159. package/dist/state/need-samples-for-fields.js +1 -1
  160. package/dist/state/parser-state.d.ts +67 -38
  161. package/dist/state/riff/lazy-idx1-fetch.d.ts +4 -4
  162. package/dist/state/riff/sample-counter.d.ts +3 -3
  163. package/dist/state/riff.d.ts +6 -6
  164. package/dist/state/sample-callbacks.d.ts +12 -12
  165. package/dist/state/sample-callbacks.js +2 -2
  166. package/dist/state/samples-observed/slow-duration-fps.d.ts +3 -3
  167. package/dist/state/transport-stream/last-emitted-sample.d.ts +3 -3
  168. package/dist/state/transport-stream/transport-stream.d.ts +2 -2
  169. package/dist/version.d.ts +1 -1
  170. package/dist/version.js +1 -1
  171. package/dist/webcodec-sample-types.d.ts +21 -10
  172. package/dist/work-on-seek-request.d.ts +4 -4
  173. package/dist/work-on-seek-request.js +40 -43
  174. package/dist/worker/serialize-error.d.ts +2 -2
  175. package/dist/worker/serialize-error.js +7 -25
  176. package/dist/worker/worker-types.d.ts +22 -24
  177. package/dist/worker-server.d.ts +2 -2
  178. package/dist/worker-server.js +5 -5
  179. package/dist/writers/writer.d.ts +2 -2
  180. package/package.json +3 -3
@@ -60,55 +60,23 @@ const getHasTracks = (state, mayUsePrecomputed) => {
60
60
  };
61
61
  exports.getHasTracks = getHasTracks;
62
62
  const getCategorizedTracksFromMatroska = (state) => {
63
- const videoTracks = [];
64
- const audioTracks = [];
65
- const otherTracks = [];
66
63
  const { resolved } = (0, get_ready_tracks_1.getTracksFromMatroska)({
67
64
  structureState: state.structure,
68
65
  webmState: state.webm,
69
66
  });
70
- for (const track of resolved) {
71
- if (track.type === 'video') {
72
- videoTracks.push(track);
73
- }
74
- else if (track.type === 'audio') {
75
- audioTracks.push(track);
76
- }
77
- else if (track.type === 'other') {
78
- otherTracks.push(track);
79
- }
80
- }
81
- return {
82
- videoTracks,
83
- audioTracks,
84
- otherTracks,
85
- };
67
+ return resolved;
86
68
  };
87
69
  const getTracksFromMoovBox = (moovBox) => {
88
- const videoTracks = [];
89
- const audioTracks = [];
90
- const otherTracks = [];
70
+ const mediaParserTracks = [];
91
71
  const tracks = (0, traversal_1.getTraks)(moovBox);
92
72
  for (const trakBox of tracks) {
93
73
  const track = (0, make_track_1.makeBaseMediaTrack)(trakBox);
94
74
  if (!track) {
95
75
  continue;
96
76
  }
97
- if (track.type === 'video') {
98
- videoTracks.push(track);
99
- }
100
- else if (track.type === 'audio') {
101
- audioTracks.push(track);
102
- }
103
- else if (track.type === 'other') {
104
- otherTracks.push(track);
105
- }
77
+ mediaParserTracks.push(track);
106
78
  }
107
- return {
108
- videoTracks,
109
- audioTracks,
110
- otherTracks,
111
- };
79
+ return mediaParserTracks;
112
80
  };
113
81
  exports.getTracksFromMoovBox = getTracksFromMoovBox;
114
82
  const getTracksFromIsoBaseMedia = ({ mayUsePrecomputed, structure, isoState, m3uPlaylistContext, }) => {
@@ -120,11 +88,7 @@ const getTracksFromIsoBaseMedia = ({ mayUsePrecomputed, structure, isoState, m3u
120
88
  mayUsePrecomputed,
121
89
  });
122
90
  if (!moovBox) {
123
- return {
124
- videoTracks: [],
125
- audioTracks: [],
126
- otherTracks: [],
127
- };
91
+ return [];
128
92
  }
129
93
  return (0, exports.getTracksFromMoovBox)(moovBox);
130
94
  };
@@ -134,11 +98,7 @@ const defaultGetTracks = (parserState) => {
134
98
  if (tracks.length === 0) {
135
99
  throw new Error('No tracks found');
136
100
  }
137
- return {
138
- audioTracks: tracks.filter((t) => t.type === 'audio'),
139
- otherTracks: [],
140
- videoTracks: tracks.filter((t) => t.type === 'video'),
141
- };
101
+ return tracks;
142
102
  };
143
103
  exports.defaultGetTracks = defaultGetTracks;
144
104
  const defaultHasallTracks = (parserState) => {
@@ -1,8 +1,9 @@
1
+ import type { MediaParserCodecData } from './codec-data';
1
2
  import type { TrakBox } from './containers/iso-base-media/trak/trak';
2
- import { type MediaParserVideoCodec, type VideoTrackColorParams } from './get-tracks';
3
+ import { type MediaParserAdvancedColor, type MediaParserVideoCodec } from './get-tracks';
3
4
  import type { ParserState } from './state/parser-state';
4
5
  export declare const getVideoCodec: (state: ParserState) => MediaParserVideoCodec | null;
5
6
  export declare const hasVideoCodec: (state: ParserState) => boolean;
6
- export declare const getVideoPrivateData: (trakBox: TrakBox) => Uint8Array | null;
7
- export declare const getIsoBmColrConfig: (trakBox: TrakBox) => VideoTrackColorParams | null;
7
+ export declare const getVideoPrivateData: (trakBox: TrakBox) => MediaParserCodecData | null;
8
+ export declare const getIsoBmColrConfig: (trakBox: TrakBox) => MediaParserAdvancedColor | null;
8
9
  export declare const getVideoCodecString: (trakBox: TrakBox) => string | null;
@@ -8,7 +8,7 @@ const get_tracks_1 = require("./get-tracks");
8
8
  const getVideoCodec = (state) => {
9
9
  var _a, _b;
10
10
  const track = (0, get_tracks_1.getTracks)(state, true);
11
- return (_b = (_a = track.videoTracks[0]) === null || _a === void 0 ? void 0 : _a.codecWithoutConfig) !== null && _b !== void 0 ? _b : null;
11
+ return (_b = (_a = track.find((t) => t.type === 'video')) === null || _a === void 0 ? void 0 : _a.codecEnum) !== null && _b !== void 0 ? _b : null;
12
12
  };
13
13
  exports.getVideoCodec = getVideoCodec;
14
14
  const hasVideoCodec = (state) => {
@@ -24,13 +24,13 @@ const getVideoPrivateData = (trakBox) => {
24
24
  return null;
25
25
  }
26
26
  if (avccBox) {
27
- return avccBox.privateData;
27
+ return { type: 'avc-sps-pps', data: avccBox.privateData };
28
28
  }
29
29
  if (hvccBox) {
30
- return hvccBox.privateData;
30
+ return { type: 'hvcc-data', data: hvccBox.privateData };
31
31
  }
32
32
  if (av1cBox) {
33
- return av1cBox.privateData;
33
+ return { type: 'av1c-data', data: av1cBox.privateData };
34
34
  }
35
35
  return null;
36
36
  };
@@ -51,9 +51,9 @@ const getIsoBmColrConfig = (trakBox) => {
51
51
  // https://github.com/bbc/qtff-parameter-editor
52
52
  return {
53
53
  fullRange: colrAtom.fullRangeFlag,
54
- matrixCoefficients: (0, color_1.getMatrixCoefficientsFromIndex)(colrAtom.matrixIndex),
54
+ matrix: (0, color_1.getMatrixCoefficientsFromIndex)(colrAtom.matrixIndex),
55
55
  primaries: (0, color_1.getPrimariesFromIndex)(colrAtom.primaries),
56
- transferCharacteristics: (0, color_1.getTransferCharacteristicsFromIndex)(colrAtom.transfer),
56
+ transfer: (0, color_1.getTransferCharacteristicsFromIndex)(colrAtom.transfer),
57
57
  };
58
58
  };
59
59
  exports.getIsoBmColrConfig = getIsoBmColrConfig;
@@ -20,7 +20,7 @@ const getAvailableInfo = ({ state, }) => {
20
20
  const structure = state.structure.getStructureOrNull();
21
21
  const infos = keys.map(([_key]) => {
22
22
  const key = _key;
23
- if (key === 'structure') {
23
+ if (key === 'slowStructure') {
24
24
  return false;
25
25
  }
26
26
  if (key === 'durationInSeconds') {
package/dist/index.d.ts CHANGED
@@ -1,27 +1,36 @@
1
- import type { LogLevel } from './log';
2
- export type { MatroskaSegment } from './containers/webm/segments';
3
- export type { MatroskaElement } from './containers/webm/segments/all-segments';
4
- export { hasBeenAborted, IsAGifError, IsAnImageError, IsAnUnsupportedFileTypeError, IsAPdfError, MediaParserAbortError, } from './errors';
5
- export type { SamplePosition } from './get-sample-positions';
6
- export type { AudioTrack, MediaParserAudioCodec, MediaParserVideoCodec, OtherTrack, Track, VideoTrack, VideoTrackColorParams, } from './get-tracks';
1
+ import type { MatroskaSegment } from './containers/webm/segments';
2
+ import type { Ebml, EbmlValue, FloatWithSize, MainSegment, MatroskaElement, PossibleEbml, TrackEntry, UintWithSize } from './containers/webm/segments/all-segments';
3
+ import type { SamplePosition } from './get-sample-positions';
4
+ import type { MediaParserLogLevel } from './log';
5
+ import type { ParseMediaCallbacks } from './options';
6
+ export { parseMedia } from './parse-media';
7
+ export { hasBeenAborted, IsAnImageError, IsAnUnsupportedFileTypeError, IsAPdfError, MediaParserAbortError, } from './errors';
8
+ export type { MediaParserAdvancedColor, MediaParserAudioCodec, MediaParserAudioTrack, MediaParserOtherTrack, MediaParserTrack, MediaParserVideoCodec, MediaParserVideoTrack, } from './get-tracks';
9
+ export type { MediaParserMatrixCoefficients, MediaParserPrimaries, MediaParserTransferCharacteristics, } from './containers/avc/color';
7
10
  export type { MediaParserMetadataEntry } from './metadata/get-metadata';
8
11
  export type { MediaParserKeyframe, ParseMediaSrc } from './options';
9
12
  export type { MediaParserEmbeddedImage } from './state/images';
10
13
  export { downloadAndParseMedia } from './download-and-parse-media';
11
14
  export type { Options, ParseMediaFields } from './fields';
12
- export type { MediaParserContainer, MediaParserTracks, ParseMediaCallbacks, ParseMediaOnProgress, ParseMediaOptions, ParseMediaProgress, ParseMediaResult, } from './options';
13
- export { parseMedia } from './parse-media';
14
- export type { AudioOrVideoSample, OnAudioSample, OnAudioTrack, OnVideoSample, OnVideoTrack, } from './webcodec-sample-types';
15
- export type { Dimensions } from './get-dimensions';
15
+ export type { MediaParserContainer, ParseMediaOnProgress, ParseMediaOptions, ParseMediaProgress, ParseMediaResult, } from './options';
16
+ export type { MediaParserAudioSample, MediaParserOnAudioSample, MediaParserOnAudioTrack, MediaParserOnAudioTrackParams, MediaParserOnVideoSample, MediaParserOnVideoTrack, MediaParserOnVideoTrackParams, MediaParserVideoSample, } from './webcodec-sample-types';
17
+ export type { MediaParserCodecData } from './codec-data';
18
+ export type { MediaParserDimensions } from './get-dimensions';
16
19
  export type { MediaParserLocation } from './get-location';
17
- export type { ReaderInterface } from './readers/reader';
18
- export type { CreateContent, Writer, WriterInterface } from './writers/writer';
20
+ /**
21
+ * @deprecated This type is not stable.
22
+ */
23
+ export type { MediaParserReaderInterface } from './readers/reader';
24
+ import type { CreateContent, Writer, WriterInterface } from './writers/writer';
25
+ /**
26
+ * @deprecated Dont use these yet.
27
+ */
19
28
  export declare const MediaParserInternals: {
20
29
  Log: {
21
- trace: (logLevel: LogLevel, message?: any, ...optionalParams: any[]) => void;
22
- verbose: (logLevel: LogLevel, message?: any, ...optionalParams: any[]) => void;
23
- info: (logLevel: LogLevel, message?: any, ...optionalParams: any[]) => void;
24
- warn: (logLevel: LogLevel, message?: any, ...optionalParams: any[]) => void;
30
+ trace: (logLevel: MediaParserLogLevel, message?: any, ...optionalParams: any[]) => void;
31
+ verbose: (logLevel: MediaParserLogLevel, message?: any, ...optionalParams: any[]) => void;
32
+ info: (logLevel: MediaParserLogLevel, message?: any, ...optionalParams: any[]) => void;
33
+ warn: (logLevel: MediaParserLogLevel, message?: any, ...optionalParams: any[]) => void;
25
34
  error: (message?: any, ...optionalParams: any[]) => void;
26
35
  };
27
36
  createAacCodecPrivate: ({ audioObjectType, sampleRate, channelConfiguration, codecPrivate, }: {
@@ -736,27 +745,27 @@ export declare const MediaParserInternals: {
736
745
  offset: number;
737
746
  size: number;
738
747
  iterator: import("./iterator/buffer-iterator").BufferIterator;
739
- logLevel: LogLevel;
748
+ logLevel: MediaParserLogLevel;
740
749
  contentLength: number;
741
750
  }) => Promise<import("./containers/iso-base-media/stsd/stsd").StsdBox>;
742
751
  makeParserState: ({ hasAudioTrackHandlers, hasVideoTrackHandlers, controller, onAudioTrack, onVideoTrack, contentLength, logLevel, mode, src, readerInterface, onDiscardedData, selectM3uStreamFn, selectM3uAssociatedPlaylistsFn, m3uPlaylistContext, contentType, name, callbacks, fieldsInReturnValue, mimeType, initialReaderInstance, makeSamplesStartAtZero, prefetchCache, }: {
743
752
  hasAudioTrackHandlers: boolean;
744
753
  hasVideoTrackHandlers: boolean;
745
754
  controller: import("./controller/media-parser-controller").MediaParserController;
746
- onAudioTrack: import("./webcodec-sample-types").OnAudioTrack | null;
747
- onVideoTrack: import("./webcodec-sample-types").OnVideoTrack | null;
755
+ onAudioTrack: import("./webcodec-sample-types").MediaParserOnAudioTrack | null;
756
+ onVideoTrack: import("./webcodec-sample-types").MediaParserOnVideoTrack | null;
748
757
  contentLength: number;
749
- logLevel: LogLevel;
758
+ logLevel: MediaParserLogLevel;
750
759
  mode: import("./options").ParseMediaMode;
751
760
  src: import("./options").ParseMediaSrc;
752
- readerInterface: import("./readers/reader").ReaderInterface;
761
+ readerInterface: import("./readers/reader").MediaParserReaderInterface;
753
762
  onDiscardedData: import("./options").OnDiscardedData | null;
754
763
  selectM3uStreamFn: import("./containers/m3u/select-stream").SelectM3uStreamFn;
755
764
  selectM3uAssociatedPlaylistsFn: import("./containers/m3u/select-stream").SelectM3uAssociatedPlaylistsFn;
756
765
  m3uPlaylistContext: import("./options").M3uPlaylistContext | null;
757
766
  contentType: string | null;
758
767
  name: string;
759
- callbacks: import("./options").ParseMediaCallbacks;
768
+ callbacks: ParseMediaCallbacks;
760
769
  fieldsInReturnValue: import("./fields").Options<import("./fields").ParseMediaFields>;
761
770
  mimeType: string | null;
762
771
  initialReaderInstance: import("./readers/reader").Reader;
@@ -789,8 +798,8 @@ export declare const MediaParserInternals: {
789
798
  }> | Promise<null>;
790
799
  };
791
800
  sampleCounter: {
792
- onAudioSample: (trackId: number, audioSample: import("./webcodec-sample-types").AudioOrVideoSample) => void;
793
- onVideoSample: (trackId: number, videoSample: import("./webcodec-sample-types").AudioOrVideoSample) => void;
801
+ onAudioSample: (trackId: number, audioSample: import("./webcodec-sample-types").MediaParserAudioSample) => void;
802
+ onVideoSample: (trackId: number, videoSample: import("./webcodec-sample-types").MediaParserVideoSample) => void;
794
803
  getSamplesForTrack: (trackId: number) => number;
795
804
  setSamplesFromSeek: (samples: Record<number, number>) => void;
796
805
  riffKeys: {
@@ -822,8 +831,8 @@ export declare const MediaParserInternals: {
822
831
  };
823
832
  resetBeforeSeek: () => void;
824
833
  lastEmittedSample: {
825
- setLastEmittedSample: (sample: import("./webcodec-sample-types").AudioOrVideoSample) => void;
826
- getLastEmittedSample: () => import("./webcodec-sample-types").AudioOrVideoSample | null;
834
+ setLastEmittedSample: (sample: import("./webcodec-sample-types").MediaParserAudioSample | import("./webcodec-sample-types").MediaParserVideoSample) => void;
835
+ getLastEmittedSample: () => import("./webcodec-sample-types").MediaParserAudioSample | import("./webcodec-sample-types").MediaParserVideoSample | null;
827
836
  resetLastEmittedSample: () => void;
828
837
  };
829
838
  };
@@ -930,10 +939,10 @@ export declare const MediaParserInternals: {
930
939
  m3u: {
931
940
  setSelectedMainPlaylist: (stream: import("./state/m3u-state").M3uStreamOrInitialUrl) => void;
932
941
  getSelectedMainPlaylist: () => import("./state/m3u-state").M3uStreamOrInitialUrl | null;
933
- setHasEmittedVideoTrack: (src: string, callback: import("./webcodec-sample-types").OnVideoSample | null) => void;
934
- hasEmittedVideoTrack: (src: string) => false | import("./webcodec-sample-types").OnVideoSample | null;
935
- setHasEmittedAudioTrack: (src: string, callback: import("./webcodec-sample-types").OnAudioSample | null) => void;
936
- hasEmittedAudioTrack: (src: string) => false | import("./webcodec-sample-types").OnAudioSample | null;
942
+ setHasEmittedVideoTrack: (src: string, callback: import("./webcodec-sample-types").MediaParserOnVideoSample | null) => void;
943
+ hasEmittedVideoTrack: (src: string) => false | import("./webcodec-sample-types").MediaParserOnVideoSample | null;
944
+ setHasEmittedAudioTrack: (src: string, callback: import("./webcodec-sample-types").MediaParserOnAudioSample | null) => void;
945
+ hasEmittedAudioTrack: (src: string) => false | import("./webcodec-sample-types").MediaParserOnAudioSample | null;
937
946
  setHasEmittedDoneWithTracks: (src: string) => void;
938
947
  hasEmittedDoneWithTracks: (src: string) => boolean;
939
948
  setReadyToIterateOverM3u: () => void;
@@ -956,12 +965,12 @@ export declare const MediaParserInternals: {
956
965
  sampleSorter: {
957
966
  clearSamples: () => void;
958
967
  addToStreamWithTrack: (src: string) => void;
959
- addVideoStreamToConsider: (src: string, callback: import("./webcodec-sample-types").OnVideoSample) => void;
960
- addAudioStreamToConsider: (src: string, callback: import("./webcodec-sample-types").OnAudioSample) => void;
968
+ addVideoStreamToConsider: (src: string, callback: import("./webcodec-sample-types").MediaParserOnVideoSample) => void;
969
+ addAudioStreamToConsider: (src: string, callback: import("./webcodec-sample-types").MediaParserOnAudioSample) => void;
961
970
  hasAudioStreamToConsider: (src: string) => boolean;
962
971
  hasVideoStreamToConsider: (src: string) => boolean;
963
- addAudioSample: (src: string, sample: import("./webcodec-sample-types").AudioOrVideoSample) => Promise<void>;
964
- addVideoSample: (src: string, sample: import("./webcodec-sample-types").AudioOrVideoSample) => Promise<void>;
972
+ addAudioSample: (src: string, sample: import("./webcodec-sample-types").MediaParserAudioSample) => Promise<void>;
973
+ addVideoSample: (src: string, sample: import("./webcodec-sample-types").MediaParserVideoSample) => Promise<void>;
965
974
  getNextStreamToRun: (streams: string[]) => string;
966
975
  };
967
976
  setMp4HeaderSegment: (playlistUrl: string, structure: import("./parse-result").IsoBaseMediaStructure) => void;
@@ -983,24 +992,24 @@ export declare const MediaParserInternals: {
983
992
  timeFreeingData: number;
984
993
  };
985
994
  callbacks: {
986
- registerVideoSampleCallback: (id: number, callback: import("./webcodec-sample-types").OnVideoSample | null) => Promise<void>;
987
- onAudioSample: (trackId: number, audioSample: import("./webcodec-sample-types").AudioOrVideoSample) => Promise<void>;
988
- onVideoSample: (trackId: number, videoSample: import("./webcodec-sample-types").AudioOrVideoSample) => Promise<void>;
995
+ registerVideoSampleCallback: (id: number, callback: import("./webcodec-sample-types").MediaParserOnVideoSample | null) => Promise<void>;
996
+ onAudioSample: (trackId: number, audioSample: import("./webcodec-sample-types").MediaParserAudioSample) => Promise<void>;
997
+ onVideoSample: (trackId: number, videoSample: import("./webcodec-sample-types").MediaParserVideoSample) => Promise<void>;
989
998
  canSkipTracksState: {
990
999
  doFieldsNeedTracks: () => boolean;
991
1000
  canSkipTracks: () => boolean;
992
1001
  };
993
- registerAudioSampleCallback: (id: number, callback: import("./webcodec-sample-types").OnAudioSample | null) => Promise<void>;
1002
+ registerAudioSampleCallback: (id: number, callback: import("./webcodec-sample-types").MediaParserOnAudioSample | null) => Promise<void>;
994
1003
  tracks: {
995
1004
  hasAllTracks: () => boolean;
996
1005
  getIsDone: () => boolean;
997
- setIsDone: (logLevel: LogLevel) => void;
998
- addTrack: (track: import("./get-tracks").Track) => void;
999
- getTracks: () => import("./get-tracks").Track[];
1006
+ setIsDone: (logLevel: MediaParserLogLevel) => void;
1007
+ addTrack: (track: import("./get-tracks").MediaParserTrack) => void;
1008
+ getTracks: () => import("./get-tracks").MediaParserTrack[];
1000
1009
  ensureHasTracksAtEnd: (fields: import("./fields").Options<import("./fields").ParseMediaFields>) => void;
1001
1010
  };
1002
- audioSampleCallbacks: Record<number, import("./webcodec-sample-types").OnAudioSample>;
1003
- videoSampleCallbacks: Record<number, import("./webcodec-sample-types").OnVideoSample>;
1011
+ audioSampleCallbacks: Record<number, import("./webcodec-sample-types").MediaParserOnAudioSample>;
1012
+ videoSampleCallbacks: Record<number, import("./webcodec-sample-types").MediaParserOnVideoSample>;
1004
1013
  hasAudioTrackHandlers: boolean;
1005
1014
  hasVideoTrackHandlers: boolean;
1006
1015
  };
@@ -1025,13 +1034,13 @@ export declare const MediaParserInternals: {
1025
1034
  getWavStructure: () => import("./containers/wav/types").WavStructure;
1026
1035
  getMatroskaStructure: () => import("./parse-result").MatroskaStructure;
1027
1036
  };
1028
- onAudioTrack: import("./webcodec-sample-types").OnAudioTrack | null;
1029
- onVideoTrack: import("./webcodec-sample-types").OnVideoTrack | null;
1037
+ onAudioTrack: import("./webcodec-sample-types").MediaParserOnAudioTrack | null;
1038
+ onVideoTrack: import("./webcodec-sample-types").MediaParserOnVideoTrack | null;
1030
1039
  emittedFields: import("./fields").AllOptions<import("./fields").ParseMediaFields>;
1031
1040
  fields: Partial<import("./fields").AllOptions<import("./fields").ParseMediaFields>>;
1032
1041
  samplesObserved: {
1033
- addVideoSample: (videoSample: import("./webcodec-sample-types").AudioOrVideoSample) => void;
1034
- addAudioSample: (audioSample: import("./webcodec-sample-types").AudioOrVideoSample) => void;
1042
+ addVideoSample: (videoSample: import("./webcodec-sample-types").MediaParserVideoSample) => void;
1043
+ addAudioSample: (audioSample: import("./webcodec-sample-types").MediaParserAudioSample) => void;
1035
1044
  getSlowDurationInSeconds: () => number;
1036
1045
  getFps: () => number;
1037
1046
  getSlowNumberOfFrames: () => number;
@@ -1137,14 +1146,43 @@ export declare const MediaParserInternals: {
1137
1146
  controller: import("./controller/media-parser-controller").MediaParserController;
1138
1147
  mode: import("./options").ParseMediaMode;
1139
1148
  src: import("./options").ParseMediaSrc;
1140
- readerInterface: import("./readers/reader").ReaderInterface;
1149
+ readerInterface: import("./readers/reader").MediaParserReaderInterface;
1141
1150
  discardReadBytes: (force: boolean) => Promise<void>;
1142
1151
  selectM3uStreamFn: import("./containers/m3u/select-stream").SelectM3uStreamFn;
1143
1152
  selectM3uAssociatedPlaylistsFn: import("./containers/m3u/select-stream").SelectM3uAssociatedPlaylistsFn;
1144
1153
  m3uPlaylistContext: import("./options").M3uPlaylistContext | null;
1145
1154
  contentType: string | null;
1146
1155
  name: string;
1147
- returnValue: import("./options").ParseMediaResult<import("./options").AllParseMediaFields>;
1156
+ returnValue: {
1157
+ dimensions: import("./get-dimensions").MediaParserDimensions | null;
1158
+ durationInSeconds: number | null;
1159
+ slowDurationInSeconds: number;
1160
+ slowNumberOfFrames: number;
1161
+ slowFps: number;
1162
+ slowStructure: import("./parse-result").MediaParserStructureUnstable;
1163
+ fps: number | null;
1164
+ videoCodec: import("./get-tracks").MediaParserVideoCodec | null;
1165
+ audioCodec: import("./get-tracks").MediaParserAudioCodec | null;
1166
+ tracks: import("./get-tracks").MediaParserTrack[];
1167
+ rotation: number | null;
1168
+ unrotatedDimensions: import("./get-dimensions").MediaParserDimensions | null;
1169
+ internalStats: import("./state/parser-state").InternalStats;
1170
+ size: number | null;
1171
+ name: string;
1172
+ container: import("./options").MediaParserContainer;
1173
+ isHdr: boolean;
1174
+ metadata: import("./metadata/get-metadata").MediaParserMetadataEntry[];
1175
+ location: import("./get-location").MediaParserLocation | null;
1176
+ mimeType: string | null;
1177
+ keyframes: import("./options").MediaParserKeyframe[] | null;
1178
+ slowKeyframes: import("./options").MediaParserKeyframe[];
1179
+ images: import("./state/images").MediaParserEmbeddedImage[];
1180
+ sampleRate: number | null;
1181
+ numberOfAudioChannels: number | null;
1182
+ slowVideoBitrate: number | null;
1183
+ slowAudioBitrate: number | null;
1184
+ m3uStreams: import("./containers/m3u/get-streams").M3uStream[] | null;
1185
+ };
1148
1186
  callbackFunctions: Partial<import("./options").ParseMediaCallbacksMandatory>;
1149
1187
  fieldsInReturnValue: Partial<import("./fields").AllOptions<import("./fields").ParseMediaFields>>;
1150
1188
  mimeType: string | null;
@@ -1162,7 +1200,7 @@ export declare const MediaParserInternals: {
1162
1200
  };
1163
1201
  processSample: ({ iterator, logLevel, contentLength, }: {
1164
1202
  iterator: import("./iterator/buffer-iterator").BufferIterator;
1165
- logLevel: LogLevel;
1203
+ logLevel: MediaParserLogLevel;
1166
1204
  contentLength: number;
1167
1205
  }) => Promise<{
1168
1206
  sample: import("./containers/iso-base-media/stsd/samples").Sample | null;
@@ -1172,7 +1210,7 @@ export declare const MediaParserInternals: {
1172
1210
  size: number;
1173
1211
  offset: number;
1174
1212
  }) => import("./containers/iso-base-media/ftyp").FtypBox;
1175
- parseEbml: (iterator: import("./iterator/buffer-iterator").BufferIterator, statesForProcessing: import("./containers/webm/state-for-processing").WebmRequiredStatesForProcessing | null) => Promise<import("./containers/webm/parse-ebml").Prettify<import("./containers/webm/segments/all-segments").PossibleEbml>>;
1213
+ parseEbml: (iterator: import("./iterator/buffer-iterator").BufferIterator, statesForProcessing: import("./containers/webm/state-for-processing").WebmRequiredStatesForProcessing | null) => Promise<import("./containers/webm/parse-ebml").Prettify<PossibleEbml>>;
1176
1214
  parseMvhd: ({ iterator, offset, size, }: {
1177
1215
  iterator: import("./iterator/buffer-iterator").BufferIterator;
1178
1216
  offset: number;
@@ -1181,11 +1219,32 @@ export declare const MediaParserInternals: {
1181
1219
  internalParseMedia: import("./options").InternalParseMedia;
1182
1220
  fieldsNeedSamplesMap: Record<keyof import("./fields").AllOptions<import("./fields").ParseMediaFields>, boolean>;
1183
1221
  };
1184
- export type { Prettify } from './containers/webm/parse-ebml';
1185
- export type { Ebml, EbmlValue, FloatWithSize, MainSegment, PossibleEbml, TrackEntry, UintWithSize, } from './containers/webm/segments/all-segments';
1186
- export { MediaParserStructureUnstable } from './parse-result';
1187
- export type { LogLevel };
1222
+ export type { MediaParserLogLevel };
1188
1223
  export { M3uAssociatedPlaylist, M3uStream } from './containers/m3u/get-streams';
1189
1224
  export { defaultSelectM3uAssociatedPlaylists, defaultSelectM3uStreamFn, SelectM3uAssociatedPlaylistsFn, SelectM3uStreamFn, SelectM3uStreamFnOptions, } from './containers/m3u/select-stream';
1190
1225
  export { mediaParserController, MediaParserController, } from './controller/media-parser-controller';
1191
1226
  export { VERSION } from './version';
1227
+ export type { MediaParserSampleAspectRatio } from './get-tracks';
1228
+ /**
1229
+ * @deprecated Dont use these yet.
1230
+ */
1231
+ export type MediaParserInternalTypes = {
1232
+ SamplePosition: SamplePosition;
1233
+ MatroskaSegment: MatroskaSegment;
1234
+ MatroskaElement: MatroskaElement;
1235
+ WriterInterface: WriterInterface;
1236
+ CreateContent: CreateContent;
1237
+ Writer: Writer;
1238
+ Ebml: Ebml;
1239
+ FloatWithSize: FloatWithSize;
1240
+ MainSegment: MainSegment;
1241
+ PossibleEbml: PossibleEbml;
1242
+ TrackEntry: TrackEntry;
1243
+ UintWithSize: UintWithSize;
1244
+ ParseMediaCallbacks: ParseMediaCallbacks;
1245
+ };
1246
+ /**
1247
+ * @deprecated Dont use this yet.
1248
+ */
1249
+ type _InternalEbmlValue<T extends Ebml, Child = PossibleEbml> = EbmlValue<T, Child>;
1250
+ export { _InternalEbmlValue };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VERSION = exports.mediaParserController = exports.defaultSelectM3uStreamFn = exports.defaultSelectM3uAssociatedPlaylists = exports.MediaParserInternals = exports.parseMedia = exports.downloadAndParseMedia = exports.MediaParserAbortError = exports.IsAPdfError = exports.IsAnUnsupportedFileTypeError = exports.IsAnImageError = exports.IsAGifError = exports.hasBeenAborted = void 0;
3
+ exports.VERSION = exports.mediaParserController = exports.defaultSelectM3uStreamFn = exports.defaultSelectM3uAssociatedPlaylists = exports.MediaParserInternals = exports.downloadAndParseMedia = exports.MediaParserAbortError = exports.IsAPdfError = exports.IsAnUnsupportedFileTypeError = exports.IsAnImageError = exports.hasBeenAborted = exports.parseMedia = void 0;
4
4
  const aac_codecprivate_1 = require("./aac-codecprivate");
5
5
  const ftyp_1 = require("./containers/iso-base-media/ftyp");
6
6
  const mvhd_1 = require("./containers/iso-base-media/mvhd");
@@ -14,17 +14,19 @@ const buffer_iterator_1 = require("./iterator/buffer-iterator");
14
14
  const log_1 = require("./log");
15
15
  const need_samples_for_fields_1 = require("./state/need-samples-for-fields");
16
16
  const parser_state_1 = require("./state/parser-state");
17
+ var parse_media_1 = require("./parse-media");
18
+ Object.defineProperty(exports, "parseMedia", { enumerable: true, get: function () { return parse_media_1.parseMedia; } });
17
19
  var errors_1 = require("./errors");
18
20
  Object.defineProperty(exports, "hasBeenAborted", { enumerable: true, get: function () { return errors_1.hasBeenAborted; } });
19
- Object.defineProperty(exports, "IsAGifError", { enumerable: true, get: function () { return errors_1.IsAGifError; } });
20
21
  Object.defineProperty(exports, "IsAnImageError", { enumerable: true, get: function () { return errors_1.IsAnImageError; } });
21
22
  Object.defineProperty(exports, "IsAnUnsupportedFileTypeError", { enumerable: true, get: function () { return errors_1.IsAnUnsupportedFileTypeError; } });
22
23
  Object.defineProperty(exports, "IsAPdfError", { enumerable: true, get: function () { return errors_1.IsAPdfError; } });
23
24
  Object.defineProperty(exports, "MediaParserAbortError", { enumerable: true, get: function () { return errors_1.MediaParserAbortError; } });
24
25
  var download_and_parse_media_1 = require("./download-and-parse-media");
25
26
  Object.defineProperty(exports, "downloadAndParseMedia", { enumerable: true, get: function () { return download_and_parse_media_1.downloadAndParseMedia; } });
26
- var parse_media_1 = require("./parse-media");
27
- Object.defineProperty(exports, "parseMedia", { enumerable: true, get: function () { return parse_media_1.parseMedia; } });
27
+ /**
28
+ * @deprecated Dont use these yet.
29
+ */
28
30
  exports.MediaParserInternals = {
29
31
  Log: log_1.Log,
30
32
  createAacCodecPrivate: aac_codecprivate_1.createAacCodecPrivate,
@@ -25,7 +25,7 @@ const initVideo = async ({ state }) => {
25
25
  throw new Error('No moov box found');
26
26
  }
27
27
  const tracks = (0, get_tracks_1.getTracksFromMoovBox)(moovAtom);
28
- for (const track of tracks.videoTracks) {
28
+ for (const track of tracks.filter((t) => t.type === 'video')) {
29
29
  await (0, register_track_1.registerVideoTrack)({
30
30
  track,
31
31
  container: 'mp4',
@@ -35,7 +35,7 @@ const initVideo = async ({ state }) => {
35
35
  tracks: state.callbacks.tracks,
36
36
  });
37
37
  }
38
- for (const track of tracks.audioTracks) {
38
+ for (const track of tracks.filter((t) => t.type === 'audio')) {
39
39
  await (0, register_track_1.registerAudioTrack)({
40
40
  track,
41
41
  container: 'mp4',
@@ -123,14 +123,6 @@ const initVideo = async ({ state }) => {
123
123
  });
124
124
  return;
125
125
  }
126
- if (fileType.type === 'gif') {
127
- return Promise.reject(new errors_1.IsAGifError({
128
- message: 'GIF files are not yet supported',
129
- mimeType,
130
- sizeInBytes: contentLength,
131
- fileName: name,
132
- }));
133
- }
134
126
  if (fileType.type === 'pdf') {
135
127
  return Promise.reject(new errors_1.IsAPdfError({
136
128
  message: 'GIF files are not supported',
@@ -142,7 +134,8 @@ const initVideo = async ({ state }) => {
142
134
  if (fileType.type === 'bmp' ||
143
135
  fileType.type === 'jpeg' ||
144
136
  fileType.type === 'png' ||
145
- fileType.type === 'webp') {
137
+ fileType.type === 'webp' ||
138
+ fileType.type === 'gif') {
146
139
  return Promise.reject(new errors_1.IsAnImageError({
147
140
  message: 'Image files are not supported',
148
141
  imageType: fileType.type,
@@ -104,7 +104,7 @@ const internalParseMedia = async function ({ src, fields: _fieldsInReturnValue,
104
104
  if (state.errored) {
105
105
  throw state.errored;
106
106
  }
107
- if (state.controller._internals.seekSignal.getSeek()) {
107
+ if (state.controller._internals.seekSignal.getSeek() !== null) {
108
108
  throw new Error('Should not finish while a seek is pending');
109
109
  }
110
110
  return state.returnValue;
package/dist/log.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  export declare const logLevels: readonly ["trace", "verbose", "info", "warn", "error"];
2
- export type LogLevel = (typeof logLevels)[number];
3
- export declare const isEqualOrBelowLogLevel: (currentLevel: LogLevel, level: LogLevel) => boolean;
2
+ export type MediaParserLogLevel = (typeof logLevels)[number];
3
+ export declare const isEqualOrBelowLogLevel: (currentLevel: MediaParserLogLevel, level: MediaParserLogLevel) => boolean;
4
4
  export declare const Log: {
5
- trace: (logLevel: LogLevel, message?: any, ...optionalParams: any[]) => void;
6
- verbose: (logLevel: LogLevel, message?: any, ...optionalParams: any[]) => void;
7
- info: (logLevel: LogLevel, message?: any, ...optionalParams: any[]) => void;
8
- warn: (logLevel: LogLevel, message?: any, ...optionalParams: any[]) => void;
5
+ trace: (logLevel: MediaParserLogLevel, message?: any, ...optionalParams: any[]) => void;
6
+ verbose: (logLevel: MediaParserLogLevel, message?: any, ...optionalParams: any[]) => void;
7
+ info: (logLevel: MediaParserLogLevel, message?: any, ...optionalParams: any[]) => void;
8
+ warn: (logLevel: MediaParserLogLevel, message?: any, ...optionalParams: any[]) => void;
9
9
  error: (message?: any, ...optionalParams: any[]) => void;
10
10
  };
@@ -50,12 +50,17 @@ const hasMetadata = (structure) => {
50
50
  if (structure.type === 'wav') {
51
51
  return (0, get_metadata_from_wav_1.getMetadataFromWav)(structure) !== null;
52
52
  }
53
- if (structure.type === 'm3u' || structure.type === 'transport-stream') {
53
+ // M3U, Transport Stream, AAC cannot store any metadata
54
+ if (structure.type === 'm3u' ||
55
+ structure.type === 'transport-stream' ||
56
+ structure.type === 'aac') {
54
57
  return true;
55
58
  }
56
59
  if (structure.type === 'flac') {
57
60
  return (0, get_metadata_from_flac_1.getMetadataFromFlac)(structure) !== null;
58
61
  }
62
+ // The following containers (MP4, Matroska, AVI) all have mechanisms
63
+ // to skip over video sections, and tests for it in read-metadata.test.ts
59
64
  if (structure.type === 'iso-base-media') {
60
65
  return false;
61
66
  }
@@ -65,9 +70,6 @@ const hasMetadata = (structure) => {
65
70
  if (structure.type === 'riff') {
66
71
  return false;
67
72
  }
68
- if (structure.type === 'aac') {
69
- return true;
70
- }
71
73
  throw new Error('Unknown container ' + structure);
72
74
  };
73
75
  exports.hasMetadata = hasMetadata;