@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
@@ -10,28 +10,6 @@ var withResolvers = function() {
10
10
  };
11
11
 
12
12
  // src/errors.ts
13
- class IsAGifError extends Error {
14
- mimeType;
15
- sizeInBytes;
16
- fileName;
17
- constructor({
18
- message,
19
- mimeType,
20
- sizeInBytes,
21
- fileName
22
- }) {
23
- super(message);
24
- this.name = "IsAGifError";
25
- this.fileName = "IsAGifError";
26
- this.mimeType = mimeType;
27
- this.sizeInBytes = sizeInBytes;
28
- this.fileName = fileName;
29
- if (Error.captureStackTrace) {
30
- Error.captureStackTrace(this, IsAGifError);
31
- }
32
- }
33
- }
34
-
35
13
  class IsAnImageError extends Error {
36
14
  imageType;
37
15
  dimensions;
@@ -112,13 +90,6 @@ class MediaParserAbortError extends Error {
112
90
  // src/worker/serialize-error.ts
113
91
  var deserializeError = (error) => {
114
92
  switch (error.errorName) {
115
- case "IsAGifError":
116
- return new IsAGifError({
117
- fileName: error.fileName,
118
- mimeType: error.mimeType,
119
- sizeInBytes: error.sizeInBytes,
120
- message: error.errorMessage
121
- });
122
93
  case "IsAnImageError":
123
94
  return new IsAnImageError({
124
95
  dimensions: error.dimensions,
@@ -186,7 +157,7 @@ var convertToWorkerPayload = (payload) => {
186
157
  onSlowKeyframes,
187
158
  onSlowNumberOfFrames,
188
159
  onSlowVideoBitrate,
189
- onStructure,
160
+ onSlowStructure,
190
161
  onTracks,
191
162
  onVideoTrack,
192
163
  selectM3uStream,
@@ -220,7 +191,7 @@ var convertToWorkerPayload = (payload) => {
220
191
  postSlowKeyframes: Boolean(onSlowKeyframes),
221
192
  postSlowNumberOfFrames: Boolean(onSlowNumberOfFrames),
222
193
  postSlowVideoBitrate: Boolean(onSlowVideoBitrate),
223
- postStructure: Boolean(onStructure),
194
+ postSlowStructure: Boolean(onSlowStructure),
224
195
  postTracks: Boolean(onTracks),
225
196
  postUnrotatedDimensions: Boolean(onUnrotatedDimensions),
226
197
  postVideoCodec: Boolean(onVideoCodec),
@@ -358,8 +329,8 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
358
329
  await params.onSlowVideoBitrate?.(data.payload.value);
359
330
  return { payloadType: "void" };
360
331
  }
361
- if (data.payload.callbackType === "structure") {
362
- await params.onStructure?.(data.payload.value);
332
+ if (data.payload.callbackType === "slow-structure") {
333
+ await params.onSlowStructure?.(data.payload.value);
363
334
  return { payloadType: "void" };
364
335
  }
365
336
  if (data.payload.callbackType === "fps") {
@@ -449,7 +420,15 @@ var parseMediaOnWorkerImplementation = async ({ controller, reader, ...params },
449
420
  registeredCallback: Boolean(possibleCallback)
450
421
  };
451
422
  }
452
- if (data.payload.callbackType === "on-audio-video-sample") {
423
+ if (data.payload.callbackType === "on-audio-sample") {
424
+ const callback = callbacks[data.payload.trackId];
425
+ if (!callback) {
426
+ throw new Error(`No callback registered for track ${data.payload.trackId}`);
427
+ }
428
+ await callback(data.payload.value);
429
+ return { payloadType: "void" };
430
+ }
431
+ if (data.payload.callbackType === "on-video-sample") {
453
432
  const callback = callbacks[data.payload.trackId];
454
433
  if (!callback) {
455
434
  throw new Error(`No callback registered for track ${data.payload.trackId}`);
@@ -508,7 +487,7 @@ var parseMediaOnWebWorker = (params) => {
508
487
  if (typeof Worker === "undefined") {
509
488
  throw new Error('"Worker" is not available. Cannot call parseMediaOnWebWorker()');
510
489
  }
511
- const worker = new Worker(new URL("./worker-web-entry", import.meta.url));
490
+ const worker = new Worker(new URL("./worker-web-entry.mjs", import.meta.url));
512
491
  return parseMediaOnWorkerImplementation(params, worker, "parseMediaOnWebWorker");
513
492
  };
514
493
  export {
package/dist/fields.d.ts CHANGED
@@ -2,7 +2,7 @@ export type ParseMediaFields = {
2
2
  dimensions: boolean;
3
3
  durationInSeconds: boolean;
4
4
  slowDurationInSeconds: boolean;
5
- structure: boolean;
5
+ slowStructure: boolean;
6
6
  fps: boolean;
7
7
  slowFps: boolean;
8
8
  videoCodec: boolean;
@@ -33,7 +33,7 @@ export type AllOptions<Fields extends ParseMediaFields> = {
33
33
  durationInSeconds: Fields['durationInSeconds'];
34
34
  slowDurationInSeconds: Fields['slowDurationInSeconds'];
35
35
  slowFps: Fields['slowFps'];
36
- structure: Fields['structure'];
36
+ slowStructure: Fields['slowStructure'];
37
37
  fps: Fields['fps'];
38
38
  videoCodec: Fields['videoCodec'];
39
39
  audioCodec: Fields['audioCodec'];
@@ -1,6 +1,6 @@
1
- import type { Dimensions } from '../get-dimensions';
1
+ import type { MediaParserDimensions } from '../get-dimensions';
2
2
  export declare const isBmp: (data: Uint8Array) => BmpType | null;
3
3
  export type BmpType = {
4
4
  type: 'bmp';
5
- dimensions: Dimensions | null;
5
+ dimensions: MediaParserDimensions | null;
6
6
  };
@@ -1,3 +1,4 @@
1
+ import type { MediaParserDimensions } from '../get-dimensions';
1
2
  import type { BmpType } from './bmp';
2
3
  import type { JpegType } from './jpeg';
3
4
  import type { PdfType } from './pdf';
@@ -10,7 +11,6 @@ export declare const isWebm: (data: Uint8Array) => boolean;
10
11
  export declare const isIsoBaseMedia: (data: Uint8Array) => boolean;
11
12
  export declare const isTransportStream: (data: Uint8Array) => boolean;
12
13
  export declare const isMp3: (data: Uint8Array) => boolean;
13
- export declare const isGif: (data: Uint8Array) => boolean;
14
14
  export declare const isAac: (data: Uint8Array) => boolean;
15
15
  export declare const isFlac: (data: Uint8Array) => boolean;
16
16
  export declare const isM3u: (data: Uint8Array) => boolean;
@@ -37,6 +37,7 @@ export type WavType = {
37
37
  };
38
38
  export type GifType = {
39
39
  type: 'gif';
40
+ dimensions: MediaParserDimensions;
40
41
  };
41
42
  export type FlacType = {
42
43
  type: 'flac';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isM3u = exports.isFlac = exports.isAac = exports.isGif = exports.isMp3 = exports.isTransportStream = exports.isIsoBaseMedia = exports.isWebm = exports.isRiffWave = exports.isRiffAvi = exports.matchesPattern = void 0;
3
+ exports.isM3u = exports.isFlac = exports.isAac = exports.isMp3 = exports.isTransportStream = exports.isIsoBaseMedia = exports.isWebm = exports.isRiffWave = exports.isRiffAvi = exports.matchesPattern = void 0;
4
4
  const webmPattern = new Uint8Array([0x1a, 0x45, 0xdf, 0xa3]);
5
5
  const matchesPattern = (pattern) => {
6
6
  return (data) => {
@@ -55,11 +55,6 @@ const isMp3 = (data) => {
55
55
  (0, exports.matchesPattern)(id3v2Pattern)(subarray));
56
56
  };
57
57
  exports.isMp3 = isMp3;
58
- const isGif = (data) => {
59
- const gifPattern = new Uint8Array([0x47, 0x49, 0x46, 0x38]);
60
- return (0, exports.matchesPattern)(gifPattern)(data.subarray(0, 4));
61
- };
62
- exports.isGif = isGif;
63
58
  const isAac = (data) => {
64
59
  const aacPattern = new Uint8Array([0xff, 0xf1]);
65
60
  return (0, exports.matchesPattern)(aacPattern)(data.subarray(0, 2));
@@ -0,0 +1,2 @@
1
+ import type { GifType } from './detect-file-type';
2
+ export declare const isGif: (data: Uint8Array) => GifType | null;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isGif = void 0;
4
+ const detect_file_type_1 = require("./detect-file-type");
5
+ const getGifDimensions = (data) => {
6
+ const view = new DataView(data.buffer, data.byteOffset);
7
+ const width = view.getUint16(6, true);
8
+ const height = view.getUint16(8, true);
9
+ return { width, height };
10
+ };
11
+ const isGif = (data) => {
12
+ const gifPattern = new Uint8Array([0x47, 0x49, 0x46, 0x38]);
13
+ if ((0, detect_file_type_1.matchesPattern)(gifPattern)(data.subarray(0, 4))) {
14
+ return { type: 'gif', dimensions: getGifDimensions(data) };
15
+ }
16
+ return null;
17
+ };
18
+ exports.isGif = isGif;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.detectFileType = void 0;
4
4
  const bmp_1 = require("./bmp");
5
5
  const detect_file_type_1 = require("./detect-file-type");
6
+ const gif_1 = require("./gif");
6
7
  const jpeg_1 = require("./jpeg");
7
8
  const pdf_1 = require("./pdf");
8
9
  const png_1 = require("./png");
@@ -39,8 +40,9 @@ const detectFileType = (data) => {
39
40
  if ((0, detect_file_type_1.isMp3)(data)) {
40
41
  return { type: 'mp3' };
41
42
  }
42
- if ((0, detect_file_type_1.isGif)(data)) {
43
- return { type: 'gif' };
43
+ const gif = (0, gif_1.isGif)(data);
44
+ if (gif) {
45
+ return gif;
44
46
  }
45
47
  const png = (0, png_1.isPng)(data);
46
48
  if (png) {
@@ -1,4 +1,4 @@
1
- import type { Dimensions } from '../get-dimensions';
1
+ import type { MediaParserDimensions } from '../get-dimensions';
2
2
  export declare function getPngDimensions(pngData: Uint8Array): {
3
3
  width: number;
4
4
  height: number;
@@ -6,5 +6,5 @@ export declare function getPngDimensions(pngData: Uint8Array): {
6
6
  export declare const isPng: (data: Uint8Array) => PngType | null;
7
7
  export type PngType = {
8
8
  type: 'png';
9
- dimensions: Dimensions | null;
9
+ dimensions: MediaParserDimensions | null;
10
10
  };
@@ -1,6 +1,6 @@
1
- import type { Dimensions } from '../get-dimensions';
1
+ import type { MediaParserDimensions } from '../get-dimensions';
2
2
  export declare const isWebp: (data: Uint8Array) => WebpType | null;
3
3
  export type WebpType = {
4
4
  type: 'webp';
5
- dimensions: Dimensions | null;
5
+ dimensions: MediaParserDimensions | null;
6
6
  };
@@ -1,4 +1,4 @@
1
- import type { MoovBox } from './containers/iso-base-media/moov/moov';
1
+ import type { MediaParserCodecData } from './codec-data';
2
2
  import type { TrakBox } from './containers/iso-base-media/trak/trak';
3
3
  import { type MediaParserAudioCodec } from './get-tracks';
4
4
  import type { ParserState } from './state/parser-state';
@@ -10,17 +10,16 @@ type AudioCodecInfo = {
10
10
  secondarySpecificator: number | null;
11
11
  description: Uint8Array | undefined;
12
12
  };
13
- export declare const getCodecPrivateFromTrak: (trakBox: TrakBox) => Uint8Array<ArrayBufferLike> | null;
13
+ export declare const getCodecPrivateFromTrak: (trakBox: TrakBox) => MediaParserCodecData | null;
14
14
  export declare const getNumberOfChannelsFromTrak: (trak: TrakBox) => number | null;
15
15
  export declare const getSampleRate: (trak: TrakBox) => number | null;
16
16
  export declare const getAudioCodecFromTrak: (trak: TrakBox) => AudioCodecInfo | null;
17
17
  export declare const isLpcmAudioCodec: (trak: TrakBox) => boolean;
18
18
  export declare const isIn24AudioCodec: (trak: TrakBox) => boolean;
19
19
  export declare const isTwosAudioCodec: (trak: TrakBox) => boolean;
20
- export declare const getAudioCodecFromIso: (moov: MoovBox) => AudioCodecInfo | null;
21
20
  export declare const getAudioCodecStringFromTrak: (trak: TrakBox) => {
22
21
  codecString: string;
23
- description: Uint8Array | undefined;
22
+ description: MediaParserCodecData | undefined;
24
23
  };
25
24
  export declare const getAudioCodecFromTrack: (track: TrakBox) => MediaParserAudioCodec;
26
25
  export {};
@@ -1,23 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAudioCodecFromTrack = exports.getAudioCodecStringFromTrak = exports.getAudioCodecFromIso = exports.isTwosAudioCodec = exports.isIn24AudioCodec = exports.isLpcmAudioCodec = exports.getAudioCodecFromTrak = exports.getSampleRate = exports.getNumberOfChannelsFromTrak = exports.getCodecPrivateFromTrak = exports.hasAudioCodec = exports.getAudioCodec = void 0;
3
+ exports.getAudioCodecFromTrack = exports.getAudioCodecStringFromTrak = exports.isTwosAudioCodec = exports.isIn24AudioCodec = exports.isLpcmAudioCodec = exports.getAudioCodecFromTrak = exports.getSampleRate = exports.getNumberOfChannelsFromTrak = exports.getCodecPrivateFromTrak = exports.hasAudioCodec = exports.getAudioCodec = void 0;
4
4
  const traversal_1 = require("./containers/iso-base-media/traversal");
5
- const get_fps_1 = require("./get-fps");
6
5
  const get_tracks_1 = require("./get-tracks");
7
6
  const getAudioCodec = (parserState) => {
8
7
  const tracks = (0, get_tracks_1.getTracks)(parserState, true);
9
- const allTracks = tracks.audioTracks.length +
10
- tracks.otherTracks.length +
11
- tracks.videoTracks.length;
12
- if (allTracks === 0) {
8
+ if (tracks.length === 0) {
13
9
  throw new Error('No tracks yet');
14
10
  }
15
- const audioTrack = tracks.audioTracks[0];
11
+ const audioTrack = tracks.find((t) => t.type === 'audio');
16
12
  if (!audioTrack) {
17
13
  return null;
18
14
  }
19
15
  if (audioTrack.type === 'audio') {
20
- return audioTrack.codecWithoutConfig;
16
+ return audioTrack.codecEnum;
21
17
  }
22
18
  return null;
23
19
  };
@@ -75,7 +71,7 @@ const getCodecPrivateFromTrak = (trakBox) => {
75
71
  if (!mp4a) {
76
72
  return null;
77
73
  }
78
- return mp4a.asBytes;
74
+ return { type: 'aac-config', data: mp4a.asBytes };
79
75
  };
80
76
  exports.getCodecPrivateFromTrak = getCodecPrivateFromTrak;
81
77
  const onSample = (sample, children) => {
@@ -158,15 +154,6 @@ const isTwosAudioCodec = (trak) => {
158
154
  return ((_a = (0, exports.getAudioCodecFromTrak)(trak)) === null || _a === void 0 ? void 0 : _a.format) === 'twos';
159
155
  };
160
156
  exports.isTwosAudioCodec = isTwosAudioCodec;
161
- const getAudioCodecFromIso = (moov) => {
162
- const traks = (0, traversal_1.getTraks)(moov);
163
- const trakBox = traks.find((b) => b.type === 'trak-box' && (0, get_fps_1.trakBoxContainsAudio)(b));
164
- if (!trakBox) {
165
- return null;
166
- }
167
- return (0, exports.getAudioCodecFromTrak)(trakBox);
168
- };
169
- exports.getAudioCodecFromIso = getAudioCodecFromIso;
170
157
  const getAudioCodecStringFromTrak = (trak) => {
171
158
  const codec = (0, exports.getAudioCodecFromTrak)(trak);
172
159
  if (!codec) {
@@ -175,19 +162,25 @@ const getAudioCodecStringFromTrak = (trak) => {
175
162
  if (codec.format === 'lpcm') {
176
163
  return {
177
164
  codecString: 'pcm-s16',
178
- description: codec.description,
165
+ description: codec.description
166
+ ? { type: 'unknown-data', data: codec.description }
167
+ : undefined,
179
168
  };
180
169
  }
181
170
  if (codec.format === 'twos') {
182
171
  return {
183
172
  codecString: 'pcm-s16',
184
- description: codec.description,
173
+ description: codec.description
174
+ ? { type: 'unknown-data', data: codec.description }
175
+ : undefined,
185
176
  };
186
177
  }
187
178
  if (codec.format === 'in24') {
188
179
  return {
189
180
  codecString: 'pcm-s24',
190
- description: codec.description,
181
+ description: codec.description
182
+ ? { type: 'unknown-data', data: codec.description }
183
+ : undefined,
191
184
  };
192
185
  }
193
186
  const codecStringWithoutMp3Exception = [
@@ -198,12 +191,40 @@ const getAudioCodecStringFromTrak = (trak) => {
198
191
  : null,
199
192
  ].filter(Boolean).join('.');
200
193
  // Really, MP3? 😔
201
- const codecString = codecStringWithoutMp3Exception === 'mp4a.6b'
194
+ const codecString = codecStringWithoutMp3Exception.toLowerCase() === 'mp4a.6b' ||
195
+ codecStringWithoutMp3Exception.toLowerCase() === 'mp4a.69'
202
196
  ? 'mp3' // or "mp4a.6B" would also work, with the uppercasing, but mp3 is probably more obvious
203
197
  : codecStringWithoutMp3Exception;
198
+ if (codecString === 'mp3') {
199
+ return {
200
+ codecString,
201
+ description: codec.description
202
+ ? {
203
+ type: 'unknown-data',
204
+ data: codec.description,
205
+ }
206
+ : undefined,
207
+ };
208
+ }
209
+ if (codecString.startsWith('mp4a.')) {
210
+ return {
211
+ codecString,
212
+ description: codec.description
213
+ ? {
214
+ type: 'aac-config',
215
+ data: codec.description,
216
+ }
217
+ : undefined,
218
+ };
219
+ }
204
220
  return {
205
221
  codecString,
206
- description: codec.description,
222
+ description: codec.description
223
+ ? {
224
+ type: 'unknown-data',
225
+ data: codec.description,
226
+ }
227
+ : undefined,
207
228
  };
208
229
  };
209
230
  exports.getAudioCodecStringFromTrak = getAudioCodecStringFromTrak;
@@ -1,9 +1,9 @@
1
1
  import type { ParserState } from './state/parser-state';
2
- export type Dimensions = {
2
+ export type MediaParserDimensions = {
3
3
  width: number;
4
4
  height: number;
5
5
  };
6
- export type ExpandedDimensions = Dimensions & {
6
+ export type ExpandedDimensions = MediaParserDimensions & {
7
7
  rotation: number;
8
8
  unrotatedWidth: number;
9
9
  unrotatedHeight: number;
@@ -8,11 +8,14 @@ const getDimensions = (state) => {
8
8
  if (structure && (0, is_audio_structure_1.isAudioStructure)(structure)) {
9
9
  return null;
10
10
  }
11
- const { videoTracks } = (0, get_tracks_1.getTracks)(state, true);
12
- if (!videoTracks.length) {
11
+ const tracks = (0, get_tracks_1.getTracks)(state, true);
12
+ if (!tracks.length) {
13
+ return null;
14
+ }
15
+ const firstVideoTrack = tracks.find((t) => t.type === 'video');
16
+ if (!firstVideoTrack) {
13
17
  return null;
14
18
  }
15
- const firstVideoTrack = videoTracks[0];
16
19
  return {
17
20
  width: firstVideoTrack.width,
18
21
  height: firstVideoTrack.height,
@@ -72,15 +72,14 @@ const getDurationFromIsoBaseMedia = (parserState) => {
72
72
  return mvhdBox.durationInSeconds;
73
73
  }
74
74
  const tracks = (0, get_tracks_1.getTracks)(parserState, true);
75
- const allTracks = [
76
- ...tracks.videoTracks,
77
- ...tracks.audioTracks,
78
- ...tracks.otherTracks,
79
- ];
80
- const allSamples = allTracks.map((t) => {
75
+ const allSamples = tracks.map((t) => {
81
76
  const { timescale: ts } = t;
77
+ const trakBox = (0, traversal_1.getTrakBoxByTrackId)(moovBox, t.trackId);
78
+ if (!trakBox) {
79
+ return null;
80
+ }
82
81
  const { samplePositions, isComplete } = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
83
- trakBox: t.trakBox,
82
+ trakBox,
84
83
  moofBoxes,
85
84
  moofComplete: (0, are_samples_complete_1.areSamplesComplete)({ moofBoxes, tfraBoxes }),
86
85
  });
@@ -16,7 +16,7 @@ const getFieldsFromCallback = ({ fields, callbacks, }) => {
16
16
  name: Boolean(callbacks.onName),
17
17
  rotation: Boolean(callbacks.onRotation),
18
18
  size: Boolean(callbacks.onSize),
19
- structure: Boolean(callbacks.onStructure),
19
+ slowStructure: Boolean(callbacks.onSlowStructure),
20
20
  tracks: Boolean(callbacks.onTracks),
21
21
  unrotatedDimensions: Boolean(callbacks.onUnrotatedDimensions),
22
22
  videoCodec: Boolean(callbacks.onVideoCodec),
@@ -3,13 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasHdr = exports.getIsHdr = void 0;
4
4
  const get_tracks_1 = require("./get-tracks");
5
5
  const isVideoTrackHdr = (track) => {
6
- return (track.color.matrixCoefficients === 'bt2020' &&
7
- track.color.transferCharacteristics === 'arib-std-b67' &&
8
- track.color.primaries === 'bt2020');
6
+ return (track.advancedColor.matrix === 'bt2020-ncl' &&
7
+ (track.advancedColor.transfer === 'hlg' ||
8
+ track.advancedColor.transfer === 'pq') &&
9
+ track.advancedColor.primaries === 'bt2020');
9
10
  };
10
11
  const getIsHdr = (state) => {
11
- const { videoTracks } = (0, get_tracks_1.getTracks)(state, true);
12
- return videoTracks.some((track) => isVideoTrackHdr(track));
12
+ const tracks = (0, get_tracks_1.getTracks)(state, true);
13
+ return tracks.some((track) => track.type === 'video' && isVideoTrackHdr(track));
13
14
  };
14
15
  exports.getIsHdr = getIsHdr;
15
16
  const hasHdr = (state) => {
@@ -6,7 +6,7 @@ import type { PaspBox } from './containers/iso-base-media/stsd/pasp';
6
6
  import type { VideoSample } from './containers/iso-base-media/stsd/samples';
7
7
  import type { TkhdBox } from './containers/iso-base-media/tkhd';
8
8
  import type { TrakBox } from './containers/iso-base-media/trak/trak';
9
- import type { Dimensions } from './get-dimensions';
9
+ import type { MediaParserDimensions } from './get-dimensions';
10
10
  type AspectRatio = {
11
11
  numerator: number;
12
12
  denominator: number;
@@ -18,7 +18,7 @@ export declare const getPaspBox: (trakBox: TrakBox) => PaspBox | null;
18
18
  export declare const getHvccBox: (trakBox: TrakBox) => HvccBox | null;
19
19
  export declare const getSampleAspectRatio: (trakBox: TrakBox) => AspectRatio;
20
20
  export declare const getColrBox: (videoSample: VideoSample) => ColorParameterBox | null;
21
- export declare const applyTkhdBox: (aspectRatioApplied: Dimensions, tkhdBox: TkhdBox) => {
21
+ export declare const applyTkhdBox: (aspectRatioApplied: MediaParserDimensions, tkhdBox: TkhdBox) => {
22
22
  displayAspectWidth: number;
23
23
  displayAspectHeight: number;
24
24
  width: number;
@@ -26,12 +26,12 @@ export declare const applyTkhdBox: (aspectRatioApplied: Dimensions, tkhdBox: Tkh
26
26
  rotation: number;
27
27
  };
28
28
  export declare const applyAspectRatios: ({ dimensions, sampleAspectRatio, displayAspectRatio, }: {
29
- dimensions: Dimensions;
29
+ dimensions: MediaParserDimensions;
30
30
  sampleAspectRatio: AspectRatio;
31
31
  displayAspectRatio: AspectRatio;
32
- }) => Dimensions;
32
+ }) => MediaParserDimensions;
33
33
  export declare const getDisplayAspectRatio: ({ sampleAspectRatio, nativeDimensions, }: {
34
34
  sampleAspectRatio: AspectRatio;
35
- nativeDimensions: Dimensions;
35
+ nativeDimensions: MediaParserDimensions;
36
36
  }) => AspectRatio;
37
37
  export {};
@@ -1,4 +1,4 @@
1
- import type { LogLevel } from './log';
1
+ import type { MediaParserLogLevel } from './log';
2
2
  import type { M3uPlaylistContext } from './options';
3
3
  import type { SeekingHints } from './seeking-hints';
4
4
  import type { IsoBaseMediaState } from './state/iso-base-media/iso-state';
@@ -12,7 +12,7 @@ import type { SeekResolution } from './work-on-seek-request';
12
12
  export declare const getSeekingByte: ({ info, time, logLevel, currentPosition, isoState, transportStream, webmState, mediaSection, m3uPlaylistContext, structure, riffState, m3uState, }: {
13
13
  info: SeekingHints;
14
14
  time: number;
15
- logLevel: LogLevel;
15
+ logLevel: MediaParserLogLevel;
16
16
  currentPosition: number;
17
17
  isoState: IsoBaseMediaState;
18
18
  transportStream: TransportStreamState;
@@ -1,82 +1,72 @@
1
- import type { MatrixCoefficients, Primaries, TransferCharacteristics } from './containers/avc/color';
1
+ import type { MediaParserCodecData } from './codec-data';
2
+ import type { MediaParserMatrixCoefficients, MediaParserPrimaries, MediaParserTransferCharacteristics } from './containers/avc/color';
2
3
  import type { MoovBox } from './containers/iso-base-media/moov/moov';
3
4
  import type { TrakBox } from './containers/iso-base-media/trak/trak';
4
- import type { AllTracks } from './containers/riff/get-tracks-from-avi';
5
5
  import type { M3uPlaylistContext } from './options';
6
6
  import type { IsoBaseMediaState } from './state/iso-base-media/iso-state';
7
7
  import type { ParserState } from './state/parser-state';
8
8
  import type { StructureState } from './state/structure';
9
- type SampleAspectRatio = {
9
+ export type MediaParserSampleAspectRatio = {
10
10
  numerator: number;
11
11
  denominator: number;
12
12
  };
13
- export type VideoTrackColorParams = {
14
- transferCharacteristics: TransferCharacteristics | null;
15
- matrixCoefficients: MatrixCoefficients | null;
16
- primaries: Primaries | null;
13
+ export type MediaParserAdvancedColor = {
14
+ transfer: MediaParserTransferCharacteristics | null;
15
+ matrix: MediaParserMatrixCoefficients | null;
16
+ primaries: MediaParserPrimaries | null;
17
17
  fullRange: boolean | null;
18
18
  };
19
19
  export type MediaParserVideoCodec = 'vp8' | 'vp9' | 'h264' | 'av1' | 'h265' | 'prores';
20
20
  export type MediaParserAudioCodec = 'opus' | 'aac' | 'mp3' | 'ac3' | 'vorbis' | 'pcm-u8' | 'pcm-s16' | 'pcm-s24' | 'pcm-s32' | 'pcm-f32' | 'flac' | 'aiff';
21
- export type VideoTrack = {
21
+ export type MediaParserVideoTrack = {
22
+ codec: string;
23
+ description: Uint8Array | undefined;
24
+ colorSpace: VideoColorSpaceInit;
25
+ codedWidth: number;
26
+ codedHeight: number;
27
+ displayAspectWidth: number;
28
+ displayAspectHeight: number;
22
29
  type: 'video';
23
30
  trackId: number;
24
- description: Uint8Array | undefined;
25
- timescale: number;
26
- codec: string;
27
- codecWithoutConfig: MediaParserVideoCodec;
28
- m3uStreamFormat: 'ts' | 'mp4' | null;
29
- sampleAspectRatio: SampleAspectRatio;
31
+ codecEnum: MediaParserVideoCodec;
32
+ codecData: MediaParserCodecData | null;
33
+ sampleAspectRatio: MediaParserSampleAspectRatio;
30
34
  width: number;
31
35
  height: number;
32
- displayAspectWidth: number;
33
- displayAspectHeight: number;
34
- codedWidth: number;
35
- codedHeight: number;
36
36
  rotation: number;
37
- trakBox: TrakBox | null;
38
- codecPrivate: Uint8Array | null;
39
- color: VideoTrackColorParams;
40
37
  fps: number | null;
41
- };
42
- export type AudioTrack = {
43
- type: 'audio';
44
- trackId: number;
45
38
  timescale: number;
39
+ advancedColor: MediaParserAdvancedColor;
40
+ m3uStreamFormat: 'ts' | 'mp4' | null;
41
+ };
42
+ export type MediaParserAudioTrack = {
46
43
  codec: string;
47
- codecWithoutConfig: MediaParserAudioCodec;
48
- numberOfChannels: number;
49
44
  sampleRate: number;
50
45
  description: Uint8Array | undefined;
51
- trakBox: TrakBox | null;
52
- codecPrivate: Uint8Array | null;
46
+ numberOfChannels: number;
47
+ type: 'audio';
48
+ trackId: number;
49
+ codecEnum: MediaParserAudioCodec;
50
+ timescale: number;
51
+ codecData: MediaParserCodecData | null;
53
52
  };
54
- export type OtherTrack = {
53
+ export type MediaParserOtherTrack = {
55
54
  type: 'other';
56
55
  trackId: number;
57
56
  timescale: number;
58
57
  trakBox: TrakBox | null;
59
58
  };
60
- export type Track = VideoTrack | AudioTrack | OtherTrack;
59
+ export type MediaParserTrack = MediaParserVideoTrack | MediaParserAudioTrack | MediaParserOtherTrack;
61
60
  export declare const getNumberOfTracks: (moovBox: MoovBox) => number;
62
61
  export declare const isoBaseMediaHasTracks: (state: ParserState, mayUsePrecomputed: boolean) => boolean;
63
62
  export declare const getHasTracks: (state: ParserState, mayUsePrecomputed: boolean) => boolean;
64
- export declare const getTracksFromMoovBox: (moovBox: MoovBox) => {
65
- videoTracks: VideoTrack[];
66
- audioTracks: AudioTrack[];
67
- otherTracks: OtherTrack[];
68
- };
63
+ export declare const getTracksFromMoovBox: (moovBox: MoovBox) => MediaParserTrack[];
69
64
  export declare const getTracksFromIsoBaseMedia: ({ mayUsePrecomputed, structure, isoState, m3uPlaylistContext, }: {
70
65
  structure: StructureState;
71
66
  isoState: IsoBaseMediaState;
72
67
  m3uPlaylistContext: M3uPlaylistContext | null;
73
68
  mayUsePrecomputed: boolean;
74
- }) => {
75
- videoTracks: VideoTrack[];
76
- audioTracks: AudioTrack[];
77
- otherTracks: OtherTrack[];
78
- };
79
- export declare const defaultGetTracks: (parserState: ParserState) => AllTracks;
69
+ }) => MediaParserTrack[];
70
+ export declare const defaultGetTracks: (parserState: ParserState) => MediaParserTrack[];
80
71
  export declare const defaultHasallTracks: (parserState: ParserState) => boolean;
81
- export declare const getTracks: (state: ParserState, mayUsePrecomputed: boolean) => AllTracks;
82
- export {};
72
+ export declare const getTracks: (state: ParserState, mayUsePrecomputed: boolean) => MediaParserTrack[];