@remotion/media-parser 4.0.298 → 4.0.301

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 (186) 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/interpret-sps.d.ts +2 -2
  9. package/dist/containers/avc/interpret-sps.js +2 -2
  10. package/dist/containers/flac/parse-streaminfo.js +2 -3
  11. package/dist/containers/iso-base-media/collect-sample-positions-from-moof-boxes.d.ts +1 -1
  12. package/dist/containers/iso-base-media/color-to-webcodecs-colors.d.ts +2 -0
  13. package/dist/containers/iso-base-media/color-to-webcodecs-colors.js +12 -0
  14. package/dist/containers/iso-base-media/find-keyframe-before-time.d.ts +2 -2
  15. package/dist/containers/iso-base-media/find-track-to-seek.d.ts +5 -5
  16. package/dist/containers/iso-base-media/find-track-to-seek.js +18 -2
  17. package/dist/containers/iso-base-media/get-actual-number-of-channels.d.ts +3 -2
  18. package/dist/containers/iso-base-media/get-actual-number-of-channels.js +14 -3
  19. package/dist/containers/iso-base-media/get-children.d.ts +2 -2
  20. package/dist/containers/iso-base-media/get-keyframes.js +11 -2
  21. package/dist/containers/iso-base-media/get-mfra-seeking-box.d.ts +4 -4
  22. package/dist/containers/iso-base-media/get-moov-atom.js +1 -1
  23. package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.d.ts +9 -5
  24. package/dist/containers/iso-base-media/get-seeking-byte-from-fragmented-mp4.js +17 -4
  25. package/dist/containers/iso-base-media/get-seeking-byte.d.ts +2 -2
  26. package/dist/containers/iso-base-media/get-seeking-byte.js +5 -8
  27. package/dist/containers/iso-base-media/make-track.d.ts +2 -2
  28. package/dist/containers/iso-base-media/make-track.js +18 -17
  29. package/dist/containers/iso-base-media/mfra/find-best-segment-from-tfra.d.ts +2 -2
  30. package/dist/containers/iso-base-media/mfra/get-mfra-atom.d.ts +4 -4
  31. package/dist/containers/iso-base-media/mfra/get-mfro-atom.d.ts +4 -4
  32. package/dist/containers/iso-base-media/moov/moov.d.ts +2 -2
  33. package/dist/containers/iso-base-media/process-box.d.ts +5 -5
  34. package/dist/containers/iso-base-media/stsd/mebx.d.ts +2 -2
  35. package/dist/containers/iso-base-media/stsd/samples.d.ts +3 -3
  36. package/dist/containers/iso-base-media/stsd/stsd.d.ts +2 -2
  37. package/dist/containers/iso-base-media/trak/trak.d.ts +2 -2
  38. package/dist/containers/iso-base-media/traversal.d.ts +1 -0
  39. package/dist/containers/iso-base-media/traversal.js +13 -1
  40. package/dist/containers/m3u/after-manifest-fetch.d.ts +6 -6
  41. package/dist/containers/m3u/after-manifest-fetch.js +1 -1
  42. package/dist/containers/m3u/fetch-m3u8-stream.d.ts +2 -2
  43. package/dist/containers/m3u/first-sample-in-m3u-chunk.d.ts +3 -3
  44. package/dist/containers/m3u/first-sample-in-m3u-chunk.js +2 -8
  45. package/dist/containers/m3u/get-seeking-byte.d.ts +3 -3
  46. package/dist/containers/m3u/get-streams.d.ts +6 -6
  47. package/dist/containers/m3u/get-streams.js +9 -9
  48. package/dist/containers/m3u/parse-stream-inf.js +3 -3
  49. package/dist/containers/m3u/process-m3u-chunk.js +3 -3
  50. package/dist/containers/m3u/run-over-m3u.d.ts +2 -2
  51. package/dist/containers/m3u/sample-sorter.d.ts +7 -7
  52. package/dist/containers/m3u/types.d.ts +3 -3
  53. package/dist/containers/mp3/parse-mpeg-header.js +2 -3
  54. package/dist/containers/mp3/seek/audio-sample-from-cbr.d.ts +2 -2
  55. package/dist/containers/riff/get-tracks-from-avi.d.ts +4 -9
  56. package/dist/containers/riff/get-tracks-from-avi.js +19 -20
  57. package/dist/containers/riff/parse-video-section.js +1 -1
  58. package/dist/containers/riff/seek/fetch-idx1.d.ts +4 -4
  59. package/dist/containers/transport-stream/get-tracks.d.ts +2 -2
  60. package/dist/containers/transport-stream/get-tracks.js +1 -5
  61. package/dist/containers/transport-stream/handle-aac-packet.d.ts +4 -4
  62. package/dist/containers/transport-stream/handle-aac-packet.js +5 -4
  63. package/dist/containers/transport-stream/handle-avc-packet.d.ts +4 -4
  64. package/dist/containers/transport-stream/handle-avc-packet.js +10 -4
  65. package/dist/containers/transport-stream/process-audio.d.ts +5 -5
  66. package/dist/containers/transport-stream/process-stream-buffers.d.ts +8 -8
  67. package/dist/containers/transport-stream/process-video.d.ts +5 -5
  68. package/dist/containers/wav/parse-fmt.js +2 -3
  69. package/dist/containers/webm/color.d.ts +2 -2
  70. package/dist/containers/webm/color.js +6 -25
  71. package/dist/containers/webm/get-ready-tracks.d.ts +3 -3
  72. package/dist/containers/webm/get-sample-from-block.d.ts +7 -7
  73. package/dist/containers/webm/make-track.d.ts +3 -3
  74. package/dist/containers/webm/make-track.js +53 -21
  75. package/dist/containers/webm/parse-webm-header.js +5 -0
  76. package/dist/containers/webm/seek/fetch-web-cues.d.ts +4 -4
  77. package/dist/containers/webm/seek/get-seeking-byte.d.ts +2 -2
  78. package/dist/containers/webm/segments.d.ts +2 -2
  79. package/dist/containers/webm/segments.js +1 -1
  80. package/dist/containers/webm/state-for-processing.d.ts +5 -5
  81. package/dist/containers/webm/traversal.js +2 -1
  82. package/dist/controller/emitter.d.ts +2 -3
  83. package/dist/controller/seek-signal.d.ts +3 -9
  84. package/dist/controller/seek-signal.js +2 -2
  85. package/dist/convert-audio-or-video-sample.d.ts +4 -4
  86. package/dist/download-and-parse-media.js +1 -1
  87. package/dist/emit-available-info.js +9 -9
  88. package/dist/errors.d.ts +4 -18
  89. package/dist/errors.js +1 -15
  90. package/dist/esm/index.mjs +654 -544
  91. package/dist/esm/node.mjs +63 -51
  92. package/dist/esm/server-worker.mjs +13 -34
  93. package/dist/esm/universal.mjs +63 -51
  94. package/dist/esm/worker-server-entry.mjs +500 -388
  95. package/dist/esm/worker-web-entry.mjs +437 -337
  96. package/dist/esm/worker.mjs +14 -35
  97. package/dist/fields.d.ts +2 -2
  98. package/dist/file-types/bmp.d.ts +2 -2
  99. package/dist/file-types/detect-file-type.d.ts +2 -1
  100. package/dist/file-types/detect-file-type.js +1 -6
  101. package/dist/file-types/gif.d.ts +2 -0
  102. package/dist/file-types/gif.js +18 -0
  103. package/dist/file-types/index.js +4 -2
  104. package/dist/file-types/png.d.ts +2 -2
  105. package/dist/file-types/webp.d.ts +2 -2
  106. package/dist/get-audio-codec.d.ts +3 -4
  107. package/dist/get-audio-codec.js +44 -23
  108. package/dist/get-dimensions.d.ts +2 -2
  109. package/dist/get-dimensions.js +6 -3
  110. package/dist/get-duration.js +6 -7
  111. package/dist/get-fields-from-callbacks.js +1 -1
  112. package/dist/get-is-hdr.js +6 -5
  113. package/dist/get-sample-aspect-ratio.d.ts +5 -5
  114. package/dist/get-seeking-byte.d.ts +2 -2
  115. package/dist/get-tracks.d.ts +34 -44
  116. package/dist/get-tracks.js +6 -46
  117. package/dist/get-video-codec.d.ts +4 -3
  118. package/dist/get-video-codec.js +6 -6
  119. package/dist/has-all-info.js +1 -1
  120. package/dist/index.d.ts +114 -55
  121. package/dist/index.js +6 -4
  122. package/dist/init-video.js +4 -11
  123. package/dist/internal-parse-media.js +1 -1
  124. package/dist/log.d.ts +6 -6
  125. package/dist/metadata/get-metadata.js +6 -4
  126. package/dist/options.d.ts +19 -23
  127. package/dist/parse-loop.js +2 -2
  128. package/dist/parse-media-on-worker-entry.js +13 -5
  129. package/dist/parse-media.js +1 -1
  130. package/dist/perform-seek.d.ts +4 -4
  131. package/dist/readers/from-fetch.d.ts +2 -2
  132. package/dist/readers/from-node.d.ts +2 -2
  133. package/dist/readers/from-node.js +64 -55
  134. package/dist/readers/from-web-file.d.ts +2 -2
  135. package/dist/readers/reader.d.ts +5 -5
  136. package/dist/readers/universal.d.ts +2 -2
  137. package/dist/readers/web.d.ts +2 -2
  138. package/dist/register-track.d.ts +12 -12
  139. package/dist/remotion-license-acknowledge.d.ts +2 -2
  140. package/dist/seek-backwards.d.ts +4 -4
  141. package/dist/seek-forwards.d.ts +4 -4
  142. package/dist/state/can-skip-tracks.js +1 -1
  143. package/dist/state/emitted-fields.js +1 -1
  144. package/dist/state/has-tracks-section.d.ts +5 -5
  145. package/dist/state/iso-base-media/cached-sample-positions.d.ts +3 -3
  146. package/dist/state/iso-base-media/cached-sample-positions.js +16 -7
  147. package/dist/state/iso-base-media/iso-state.d.ts +4 -4
  148. package/dist/state/iso-base-media/lazy-mfra-load.d.ts +4 -4
  149. package/dist/state/m3u-state.d.ts +11 -11
  150. package/dist/state/matroska/lazy-cues-fetch.d.ts +4 -4
  151. package/dist/state/matroska/webm.d.ts +4 -4
  152. package/dist/state/matroska/webm.js +1 -1
  153. package/dist/state/may-skip-video-data.d.ts +1 -0
  154. package/dist/state/may-skip-video-data.js +23 -2
  155. package/dist/state/need-samples-for-fields.js +1 -1
  156. package/dist/state/parser-state.d.ts +67 -38
  157. package/dist/state/riff/lazy-idx1-fetch.d.ts +4 -4
  158. package/dist/state/riff/sample-counter.d.ts +3 -3
  159. package/dist/state/riff.d.ts +6 -6
  160. package/dist/state/sample-callbacks.d.ts +12 -12
  161. package/dist/state/sample-callbacks.js +2 -2
  162. package/dist/state/samples-observed/slow-duration-fps.d.ts +3 -3
  163. package/dist/state/transport-stream/last-emitted-sample.d.ts +3 -3
  164. package/dist/state/transport-stream/transport-stream.d.ts +2 -2
  165. package/dist/version.d.ts +1 -1
  166. package/dist/version.js +1 -1
  167. package/dist/webcodec-sample-types.d.ts +21 -10
  168. package/dist/work-on-seek-request.d.ts +4 -4
  169. package/dist/work-on-seek-request.js +40 -43
  170. package/dist/worker/serialize-error.d.ts +2 -2
  171. package/dist/worker/serialize-error.js +7 -25
  172. package/dist/worker/worker-types.d.ts +22 -24
  173. package/dist/worker-server.d.ts +2 -2
  174. package/dist/worker-server.js +5 -5
  175. package/dist/writers/writer.d.ts +2 -2
  176. package/package.json +3 -3
  177. package/dist/containers/iso-base-media/sample-positions.d.ts +0 -25
  178. package/dist/containers/iso-base-media/sample-positions.js +0 -37
  179. package/dist/containers/iso-base-media/turn-sample-positions-into-array.d.ts +0 -19
  180. package/dist/containers/iso-base-media/turn-sample-positions-into-array.js +0 -73
  181. package/dist/containers/m3u/iterate-over-segment-files.d.ts +0 -21
  182. package/dist/containers/m3u/iterate-over-segment-files.js +0 -132
  183. package/dist/containers/mp3/audio-sample-from-cbr.d.ts +0 -11
  184. package/dist/containers/mp3/audio-sample-from-cbr.js +0 -35
  185. package/dist/emit-audio-sample.d.ts +0 -12
  186. package/dist/emit-audio-sample.js +0 -11
@@ -1,3 +1,3 @@
1
- import type { VideoTrack } from './get-tracks';
1
+ import type { MediaParserVideoTrack } from './get-tracks';
2
2
  import type { SpsAndPps } from './state/parser-state';
3
- export declare const addAvcProfileToTrack: (track: VideoTrack, avc1Profile: SpsAndPps | null) => VideoTrack;
3
+ export declare const addAvcProfileToTrack: (track: MediaParserVideoTrack, avc1Profile: SpsAndPps | null) => MediaParserVideoTrack;
@@ -10,7 +10,13 @@ const addAvcProfileToTrack = (track, avc1Profile) => {
10
10
  return {
11
11
  ...track,
12
12
  codec: (0, codec_string_1.getCodecStringFromSpsAndPps)(avc1Profile.sps),
13
- codecPrivate: (0, create_sps_pps_data_1.createSpsPpsData)(avc1Profile),
13
+ codecData: { type: 'avc-sps-pps', data: (0, create_sps_pps_data_1.createSpsPpsData)(avc1Profile) },
14
+ // description should be undefined, since this signals to WebCodecs that
15
+ // the codec is in Annex B format, which is the case for AVI files
16
+ // https://www.w3.org/TR/webcodecs-avc-codec-registration/#videodecoderconfig-description
17
+ // ChatGPT 4.1: "Great question! The format of the H.264/AVC bitstream inside a ⁠.avi file is almost always in the "Annex B" format"
18
+ // (description is probably already undefined at this point, just writing this to be explicit)
19
+ description: undefined,
14
20
  };
15
21
  };
16
22
  exports.addAvcProfileToTrack = addAvcProfileToTrack;
@@ -0,0 +1,29 @@
1
+ export type MediaParserAvcSppData = {
2
+ type: 'avc-sps-pps';
3
+ data: Uint8Array;
4
+ };
5
+ export type MediaParserHvccData = {
6
+ type: 'hvcc-data';
7
+ data: Uint8Array;
8
+ };
9
+ export type MediaParserAv1cData = {
10
+ type: 'av1c-data';
11
+ data: Uint8Array;
12
+ };
13
+ export type MediaParserAacConfig = {
14
+ type: 'aac-config';
15
+ data: Uint8Array;
16
+ };
17
+ export type MediaParserFlacDescription = {
18
+ type: 'flac-description';
19
+ data: Uint8Array;
20
+ };
21
+ export type UnknownCodecData = {
22
+ type: 'unknown-data';
23
+ data: Uint8Array;
24
+ };
25
+ export type MediaParserOggIdentification = {
26
+ type: 'ogg-identification';
27
+ data: Uint8Array;
28
+ };
29
+ export type MediaParserCodecData = MediaParserAvcSppData | MediaParserHvccData | MediaParserAv1cData | MediaParserAacConfig | MediaParserFlacDescription | MediaParserOggIdentification | UnknownCodecData;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -54,14 +54,13 @@ const parseAac = async (state) => {
54
54
  container: 'aac',
55
55
  track: {
56
56
  codec: (0, aac_codecprivate_1.mapAudioObjectTypeToCodecString)(audioObjectType),
57
- codecWithoutConfig: 'aac',
58
- codecPrivate,
57
+ codecEnum: 'aac',
58
+ codecData: { type: 'aac-config', data: codecPrivate },
59
59
  description: codecPrivate,
60
60
  numberOfChannels: channelConfiguration,
61
61
  sampleRate,
62
62
  timescale: 1000000,
63
63
  trackId: 0,
64
- trakBox: null,
65
64
  type: 'audio',
66
65
  },
67
66
  registerAudioSampleCallback: state.callbacks.registerAudioSampleCallback,
@@ -1,6 +1,6 @@
1
- export type MatrixCoefficients = 'bt709' | 'bt470bg' | 'rgb' | 'smpte170m' | 'bt2020';
2
- export declare const getMatrixCoefficientsFromIndex: (index: number) => MatrixCoefficients | null;
3
- export type TransferCharacteristics = 'bt709' | 'smpte170m' | 'iec61966-2-1' | 'arib-std-b67';
4
- export declare const getTransferCharacteristicsFromIndex: (index: number) => TransferCharacteristics | null;
5
- export type Primaries = 'bt709' | 'smpte170m' | 'bt470bg' | 'bt2020' | null;
6
- export declare const getPrimariesFromIndex: (index: number) => Primaries | null;
1
+ export type MediaParserMatrixCoefficients = 'rgb' | 'bt709' | 'bt470bg' | 'smpte170m' | 'bt2020-ncl';
2
+ export declare const getMatrixCoefficientsFromIndex: (index: number) => MediaParserMatrixCoefficients | null;
3
+ export type MediaParserTransferCharacteristics = 'bt709' | 'smpte170m' | 'iec61966-2-1' | 'linear' | 'pq' | 'hlg';
4
+ export declare const getTransferCharacteristicsFromIndex: (index: number) => MediaParserTransferCharacteristics | null;
5
+ export type MediaParserPrimaries = 'bt709' | 'bt470bg' | 'smpte170m' | 'bt2020' | 'smpte432' | null;
6
+ export declare const getPrimariesFromIndex: (index: number) => MediaParserPrimaries | null;
@@ -2,38 +2,64 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getPrimariesFromIndex = exports.getTransferCharacteristicsFromIndex = exports.getMatrixCoefficientsFromIndex = void 0;
4
4
  const getMatrixCoefficientsFromIndex = (index) => {
5
- return index === 1
6
- ? 'bt709'
7
- : index === 5
8
- ? 'bt470bg'
9
- : index === 6
10
- ? 'smpte170m'
11
- : index === 9
12
- ? 'bt2020'
13
- : null;
5
+ if (index === 0) {
6
+ return 'rgb';
7
+ }
8
+ if (index === 1) {
9
+ return 'bt709';
10
+ }
11
+ if (index === 5) {
12
+ return 'bt470bg';
13
+ }
14
+ if (index === 6) {
15
+ return 'smpte170m';
16
+ }
17
+ if (index === 9) {
18
+ return 'bt2020-ncl';
19
+ }
20
+ return null;
14
21
  };
15
22
  exports.getMatrixCoefficientsFromIndex = getMatrixCoefficientsFromIndex;
23
+ // https://w3c.github.io/webcodecs/#videotransfercharacteristics
24
+ // But we may support more than that
16
25
  const getTransferCharacteristicsFromIndex = (index) => {
17
- return index === 1
18
- ? 'bt709'
19
- : index === 6
20
- ? 'smpte170m'
21
- : index === 13
22
- ? 'iec61966-2-1'
23
- : index === 18
24
- ? 'arib-std-b67'
25
- : null;
26
+ if (index === 1) {
27
+ return 'bt709';
28
+ }
29
+ if (index === 6) {
30
+ return 'smpte170m';
31
+ }
32
+ if (index === 8) {
33
+ return 'linear';
34
+ }
35
+ if (index === 13) {
36
+ return 'iec61966-2-1';
37
+ }
38
+ if (index === 16) {
39
+ return 'pq';
40
+ }
41
+ if (index === 18) {
42
+ return 'hlg';
43
+ }
44
+ return null;
26
45
  };
27
46
  exports.getTransferCharacteristicsFromIndex = getTransferCharacteristicsFromIndex;
28
47
  const getPrimariesFromIndex = (index) => {
29
- return index === 1
30
- ? 'bt709'
31
- : index === 5
32
- ? 'bt470bg'
33
- : index === 6
34
- ? 'smpte170m'
35
- : index === 9
36
- ? 'bt2020'
37
- : null;
48
+ if (index === 1) {
49
+ return 'bt709';
50
+ }
51
+ if (index === 5) {
52
+ return 'bt470bg';
53
+ }
54
+ if (index === 6) {
55
+ return 'smpte170m';
56
+ }
57
+ if (index === 9) {
58
+ return 'bt2020';
59
+ }
60
+ if (index === 12) {
61
+ return 'smpte432';
62
+ }
63
+ return null;
38
64
  };
39
65
  exports.getPrimariesFromIndex = getPrimariesFromIndex;
@@ -1,4 +1,4 @@
1
- import type { VideoTrackColorParams } from '../../get-tracks';
1
+ import type { MediaParserAdvancedColor } from '../../get-tracks';
2
2
  import type { SpsInfo } from './parse-avc';
3
3
  export declare const getDimensionsFromSps: (sps: SpsInfo) => {
4
4
  height: number;
@@ -8,4 +8,4 @@ export declare const getSampleAspectRatioFromSps: (sps: SpsInfo) => {
8
8
  width: number;
9
9
  height: number;
10
10
  };
11
- export declare const getVideoColorFromSps: (sps: SpsInfo) => VideoTrackColorParams;
11
+ export declare const getVideoColorFromSps: (sps: SpsInfo) => MediaParserAdvancedColor;
@@ -37,10 +37,10 @@ const getVideoColorFromSps = (sps) => {
37
37
  const transferCharacteristics = (_b = sps.vui_parameters) === null || _b === void 0 ? void 0 : _b.transfer_characteristics;
38
38
  const colorPrimaries = (_c = sps.vui_parameters) === null || _c === void 0 ? void 0 : _c.colour_primaries;
39
39
  return {
40
- matrixCoefficients: matrixCoefficients
40
+ matrix: matrixCoefficients
41
41
  ? (0, color_1.getMatrixCoefficientsFromIndex)(matrixCoefficients)
42
42
  : null,
43
- transferCharacteristics: transferCharacteristics
43
+ transfer: transferCharacteristics
44
44
  ? (0, color_1.getTransferCharacteristicsFromIndex)(transferCharacteristics)
45
45
  : null,
46
46
  primaries: colorPrimaries ? (0, color_1.getPrimariesFromIndex)(colorPrimaries) : null,
@@ -37,13 +37,12 @@ const parseStreamInfo = async ({ iterator, state, }) => {
37
37
  codec: 'flac',
38
38
  type: 'audio',
39
39
  description: asUint8Array,
40
- codecPrivate: asUint8Array,
41
- codecWithoutConfig: 'flac',
40
+ codecData: { type: 'flac-description', data: asUint8Array },
41
+ codecEnum: 'flac',
42
42
  numberOfChannels: channels,
43
43
  sampleRate,
44
44
  timescale: 1000000,
45
45
  trackId: 0,
46
- trakBox: null,
47
46
  },
48
47
  registerAudioSampleCallback: state.callbacks.registerAudioSampleCallback,
49
48
  tracks: state.callbacks.tracks,
@@ -7,7 +7,7 @@ export declare const collectSamplePositionsFromMoofBoxes: ({ moofBoxes, tkhdBox,
7
7
  }) => {
8
8
  samplePositions: {
9
9
  isLastFragment: boolean;
10
- samples: import("../..").SamplePosition[];
10
+ samples: import("../../get-sample-positions").SamplePosition[];
11
11
  }[];
12
12
  isComplete: boolean;
13
13
  };
@@ -0,0 +1,2 @@
1
+ import type { MediaParserAdvancedColor } from '../../get-tracks';
2
+ export declare const mediaParserAdvancedColorToWebCodecsColor: (color: MediaParserAdvancedColor) => VideoColorSpaceInit;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mediaParserAdvancedColorToWebCodecsColor = void 0;
4
+ const mediaParserAdvancedColorToWebCodecsColor = (color) => {
5
+ return {
6
+ transfer: color.transfer,
7
+ matrix: color.matrix,
8
+ primaries: color.primaries,
9
+ fullRange: color.fullRange,
10
+ };
11
+ };
12
+ exports.mediaParserAdvancedColorToWebCodecsColor = mediaParserAdvancedColorToWebCodecsColor;
@@ -1,10 +1,10 @@
1
1
  import type { SamplePosition } from '../../get-sample-positions';
2
- import type { LogLevel } from '../../log';
2
+ import type { MediaParserLogLevel } from '../../log';
3
3
  import type { MediaSection } from '../../state/video-section';
4
4
  export declare const findKeyframeBeforeTime: ({ samplePositions, time, timescale, mediaSections, logLevel, }: {
5
5
  samplePositions: SamplePosition[];
6
6
  time: number;
7
7
  timescale: number;
8
8
  mediaSections: MediaSection[];
9
- logLevel: LogLevel;
9
+ logLevel: MediaParserLogLevel;
10
10
  }) => number | null;
@@ -1,14 +1,14 @@
1
1
  import type { SamplePosition } from '../../get-sample-positions';
2
- import type { AudioTrack, OtherTrack, VideoTrack } from '../../get-tracks';
2
+ import type { MediaParserAudioTrack, MediaParserOtherTrack, MediaParserVideoTrack } from '../../get-tracks';
3
3
  import type { IsoBaseMediaStructure } from '../../parse-result';
4
4
  import type { StructureState } from '../../state/structure';
5
- export declare const findAnyTrackWithSamplePositions: (allTracks: (VideoTrack | AudioTrack | OtherTrack)[], struc: IsoBaseMediaStructure) => {
6
- track: VideoTrack | AudioTrack;
5
+ export declare const findAnyTrackWithSamplePositions: (allTracks: (MediaParserVideoTrack | MediaParserAudioTrack | MediaParserOtherTrack)[], struc: IsoBaseMediaStructure) => {
6
+ track: MediaParserVideoTrack | MediaParserAudioTrack;
7
7
  samplePositions: SamplePosition[];
8
8
  } | null;
9
9
  type TrackWithSamplePositions = {
10
- track: VideoTrack | AudioTrack;
10
+ track: MediaParserVideoTrack | MediaParserAudioTrack;
11
11
  samplePositions: SamplePosition[];
12
12
  };
13
- export declare const findTrackToSeek: (allTracks: (VideoTrack | AudioTrack | OtherTrack)[], structure: StructureState) => TrackWithSamplePositions | null;
13
+ export declare const findTrackToSeek: (allTracks: (MediaParserVideoTrack | MediaParserAudioTrack | MediaParserOtherTrack)[], structure: StructureState) => TrackWithSamplePositions | null;
14
14
  export {};
@@ -5,10 +5,18 @@ const are_samples_complete_1 = require("./are-samples-complete");
5
5
  const get_sample_positions_from_track_1 = require("./get-sample-positions-from-track");
6
6
  const traversal_1 = require("./traversal");
7
7
  const findAnyTrackWithSamplePositions = (allTracks, struc) => {
8
+ const moov = (0, traversal_1.getMoovFromFromIsoStructure)(struc);
9
+ if (!moov) {
10
+ return null;
11
+ }
8
12
  for (const track of allTracks) {
9
13
  if (track.type === 'video' || track.type === 'audio') {
14
+ const trakBox = (0, traversal_1.getTrakBoxByTrackId)(moov, track.trackId);
15
+ if (!trakBox) {
16
+ continue;
17
+ }
10
18
  const { samplePositions } = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
11
- trakBox: track.trakBox,
19
+ trakBox,
12
20
  moofBoxes: (0, traversal_1.getMoofBoxes)(struc.boxes),
13
21
  moofComplete: (0, are_samples_complete_1.areSamplesComplete)({
14
22
  moofBoxes: (0, traversal_1.getMoofBoxes)(struc.boxes),
@@ -30,8 +38,16 @@ const findTrackToSeek = (allTracks, structure) => {
30
38
  if (!firstVideoTrack) {
31
39
  return (0, exports.findAnyTrackWithSamplePositions)(allTracks, struc);
32
40
  }
41
+ const moov = (0, traversal_1.getMoovFromFromIsoStructure)(struc);
42
+ if (!moov) {
43
+ return null;
44
+ }
45
+ const trakBox = (0, traversal_1.getTrakBoxByTrackId)(moov, firstVideoTrack.trackId);
46
+ if (!trakBox) {
47
+ return null;
48
+ }
33
49
  const { samplePositions } = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
34
- trakBox: firstVideoTrack.trakBox,
50
+ trakBox,
35
51
  moofBoxes: (0, traversal_1.getMoofBoxes)(struc.boxes),
36
52
  moofComplete: (0, are_samples_complete_1.areSamplesComplete)({
37
53
  moofBoxes: (0, traversal_1.getMoofBoxes)(struc.boxes),
@@ -1,12 +1,13 @@
1
+ import type { MediaParserCodecData } from '../../codec-data';
1
2
  import type { MediaParserAudioCodec } from '../../get-tracks';
2
3
  type AudioDecoderConfig = {
3
4
  numberOfChannels: number;
4
5
  sampleRate: number;
5
- codecPrivate: Uint8Array | null;
6
+ codecPrivate: MediaParserCodecData | null;
6
7
  };
7
8
  export declare const getActualDecoderParameters: ({ audioCodec, codecPrivate, numberOfChannels, sampleRate, }: {
8
9
  audioCodec: MediaParserAudioCodec;
9
- codecPrivate: Uint8Array | null;
10
+ codecPrivate: MediaParserCodecData | null;
10
11
  numberOfChannels: number;
11
12
  sampleRate: number;
12
13
  }) => AudioDecoderConfig;
@@ -7,16 +7,27 @@ const aac_codecprivate_1 = require("../../aac-codecprivate");
7
7
  // Therefore, prioritizing Codec Private over `numberOfChannels`.
8
8
  const getActualDecoderParameters = ({ audioCodec, codecPrivate, numberOfChannels, sampleRate, }) => {
9
9
  if (audioCodec !== 'aac') {
10
- return { numberOfChannels, sampleRate, codecPrivate };
10
+ return {
11
+ numberOfChannels,
12
+ sampleRate,
13
+ codecPrivate,
14
+ };
11
15
  }
12
16
  if (codecPrivate === null) {
13
17
  return { numberOfChannels, sampleRate, codecPrivate };
14
18
  }
15
- const parsed = (0, aac_codecprivate_1.parseAacCodecPrivate)(codecPrivate);
19
+ if (codecPrivate.type !== 'aac-config') {
20
+ throw new Error('Expected AAC codec private data');
21
+ }
22
+ const parsed = (0, aac_codecprivate_1.parseAacCodecPrivate)(codecPrivate.data);
23
+ const actual = (0, aac_codecprivate_1.createAacCodecPrivate)({
24
+ ...parsed,
25
+ codecPrivate: codecPrivate.data,
26
+ });
16
27
  return {
17
28
  numberOfChannels: parsed.channelConfiguration,
18
29
  sampleRate: parsed.sampleRate,
19
- codecPrivate: (0, aac_codecprivate_1.createAacCodecPrivate)({ ...parsed, codecPrivate }),
30
+ codecPrivate: { type: 'aac-config', data: actual },
20
31
  };
21
32
  };
22
33
  exports.getActualDecoderParameters = getActualDecoderParameters;
@@ -1,11 +1,11 @@
1
1
  import type { BufferIterator } from '../../iterator/buffer-iterator';
2
- import type { LogLevel } from '../../log';
2
+ import type { MediaParserLogLevel } from '../../log';
3
3
  import type { IsoBaseMediaBox } from './base-media-box';
4
4
  import type { OnlyIfMoovAtomExpected } from './process-box';
5
5
  export declare const getIsoBaseMediaChildren: ({ size, iterator, logLevel, onlyIfMoovAtomExpected, contentLength, }: {
6
6
  size: number;
7
7
  iterator: BufferIterator;
8
- logLevel: LogLevel;
8
+ logLevel: MediaParserLogLevel;
9
9
  onlyIfMoovAtomExpected: OnlyIfMoovAtomExpected | null;
10
10
  contentLength: number;
11
11
  }) => Promise<IsoBaseMediaBox[]>;
@@ -6,19 +6,28 @@ const are_samples_complete_1 = require("./are-samples-complete");
6
6
  const get_sample_positions_from_track_1 = require("./get-sample-positions-from-track");
7
7
  const traversal_1 = require("./traversal");
8
8
  const getKeyframesFromIsoBaseMedia = (state) => {
9
- const { videoTracks } = (0, get_tracks_1.getTracksFromIsoBaseMedia)({
9
+ const tracks = (0, get_tracks_1.getTracksFromIsoBaseMedia)({
10
10
  isoState: state.iso,
11
11
  m3uPlaylistContext: state.m3uPlaylistContext,
12
12
  structure: state.structure,
13
13
  mayUsePrecomputed: true,
14
14
  });
15
+ const videoTracks = tracks.filter((t) => t.type === 'video');
15
16
  const structure = state.structure.getIsoStructure();
16
17
  const moofBoxes = (0, traversal_1.getMoofBoxes)(structure.boxes);
17
18
  const tfraBoxes = (0, traversal_1.getTfraBoxes)(structure.boxes);
19
+ const moov = (0, traversal_1.getMoovFromFromIsoStructure)(structure);
20
+ if (!moov) {
21
+ return [];
22
+ }
18
23
  const allSamples = videoTracks.map((t) => {
19
24
  const { timescale: ts } = t;
25
+ const trakBox = (0, traversal_1.getTrakBoxByTrackId)(moov, t.trackId);
26
+ if (!trakBox) {
27
+ return [];
28
+ }
20
29
  const { samplePositions, isComplete } = (0, get_sample_positions_from_track_1.getSamplePositionsFromTrack)({
21
- trakBox: t.trakBox,
30
+ trakBox,
22
31
  moofBoxes,
23
32
  moofComplete: (0, are_samples_complete_1.areSamplesComplete)({
24
33
  moofBoxes,
@@ -1,15 +1,15 @@
1
1
  import type { MediaParserController } from '../../controller/media-parser-controller';
2
2
  import type { PrefetchCache } from '../../fetch';
3
- import type { LogLevel } from '../../log';
3
+ import type { MediaParserLogLevel } from '../../log';
4
4
  import type { ParseMediaSrc } from '../../options';
5
- import type { ReaderInterface } from '../../readers/reader';
5
+ import type { MediaParserReaderInterface } from '../../readers/reader';
6
6
  import type { IsoBaseMediaBox } from './base-media-box';
7
7
  export type MfraSeekingBoxOptions = {
8
8
  contentLength: number;
9
9
  controller: MediaParserController;
10
- readerInterface: ReaderInterface;
10
+ readerInterface: MediaParserReaderInterface;
11
11
  src: ParseMediaSrc;
12
- logLevel: LogLevel;
12
+ logLevel: MediaParserLogLevel;
13
13
  prefetchCache: PrefetchCache;
14
14
  };
15
15
  export declare const getMfraSeekingBox: ({ contentLength, controller, readerInterface, src, logLevel, prefetchCache, }: MfraSeekingBoxOptions) => Promise<IsoBaseMediaBox[] | null>;
@@ -67,7 +67,7 @@ const getMoovAtom = async ({ endOfMdat, state, }) => {
67
67
  const boxes = [];
68
68
  const canSkipTracksState = (0, can_skip_tracks_1.makeCanSkipTracksState)({
69
69
  hasAudioTrackHandlers: false,
70
- fields: { structure: true },
70
+ fields: { slowStructure: true },
71
71
  hasVideoTrackHandlers: false,
72
72
  structure: (0, structure_1.structureState)(),
73
73
  });
@@ -1,14 +1,18 @@
1
- import type { AudioTrack, OtherTrack, VideoTrack } from '../../get-tracks';
2
- import type { LogLevel } from '../../log';
1
+ import type { MediaParserTrack } from '../../get-tracks';
2
+ import type { MediaParserLogLevel } from '../../log';
3
+ import type { IsoBaseMediaStructure } from '../../parse-result';
3
4
  import type { IsoBaseMediaSeekingHints } from '../../seeking-hints';
4
5
  import type { IsoBaseMediaState } from '../../state/iso-base-media/iso-state';
6
+ import type { StructureState } from '../../state/structure';
5
7
  import type { SeekResolution } from '../../work-on-seek-request';
6
- export declare const getSeekingByteFromFragmentedMp4: ({ info, time, logLevel, currentPosition, isoState, allTracks, isLastChunkInPlaylist, }: {
8
+ export declare const getSeekingByteFromFragmentedMp4: ({ info, time, logLevel, currentPosition, isoState, tracks, isLastChunkInPlaylist, structure, mp4HeaderSegment, }: {
7
9
  info: IsoBaseMediaSeekingHints;
8
10
  time: number;
9
- logLevel: LogLevel;
11
+ logLevel: MediaParserLogLevel;
10
12
  currentPosition: number;
11
13
  isoState: IsoBaseMediaState;
12
- allTracks: (VideoTrack | AudioTrack | OtherTrack)[];
14
+ structure: StructureState;
15
+ tracks: MediaParserTrack[];
13
16
  isLastChunkInPlaylist: boolean;
17
+ mp4HeaderSegment: IsoBaseMediaStructure | null;
14
18
  }) => Promise<SeekResolution>;
@@ -9,14 +9,27 @@ const find_keyframe_before_time_1 = require("./find-keyframe-before-time");
9
9
  const get_sample_position_bounds_1 = require("./get-sample-position-bounds");
10
10
  const find_best_segment_from_tfra_1 = require("./mfra/find-best-segment-from-tfra");
11
11
  const traversal_1 = require("./traversal");
12
- const getSeekingByteFromFragmentedMp4 = async ({ info, time, logLevel, currentPosition, isoState, allTracks, isLastChunkInPlaylist, }) => {
13
- const firstVideoTrack = allTracks.find((t) => t.type === 'video');
12
+ const getSeekingByteFromFragmentedMp4 = async ({ info, time, logLevel, currentPosition, isoState, tracks, isLastChunkInPlaylist, structure, mp4HeaderSegment, }) => {
13
+ const firstVideoTrack = tracks.find((t) => t.type === 'video');
14
14
  // If there is both video and audio, seek based on video, but if not then audio is also okay
15
- const firstTrack = firstVideoTrack !== null && firstVideoTrack !== void 0 ? firstVideoTrack : allTracks.find((t) => t.type === 'audio');
15
+ const firstTrack = firstVideoTrack !== null && firstVideoTrack !== void 0 ? firstVideoTrack : tracks.find((t) => t.type === 'audio');
16
16
  if (!firstTrack) {
17
17
  throw new Error('no video and no audio tracks');
18
18
  }
19
- const tkhdBox = (0, traversal_1.getTkhdBox)(firstTrack.trakBox);
19
+ const moov = (0, traversal_1.getMoovBoxFromState)({
20
+ structureState: structure,
21
+ isoState,
22
+ mp4HeaderSegment,
23
+ mayUsePrecomputed: true,
24
+ });
25
+ if (!moov) {
26
+ throw new Error('No moov atom found');
27
+ }
28
+ const trakBox = (0, traversal_1.getTrakBoxByTrackId)(moov, firstTrack.trackId);
29
+ if (!trakBox) {
30
+ throw new Error('No trak box found');
31
+ }
32
+ const tkhdBox = (0, traversal_1.getTkhdBox)(trakBox);
20
33
  if (!tkhdBox) {
21
34
  throw new Error('Expected tkhd box in trak box');
22
35
  }
@@ -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 { IsoBaseMediaSeekingHints } from '../../seeking-hints';
4
4
  import type { IsoBaseMediaState } from '../../state/iso-base-media/iso-state';
@@ -7,7 +7,7 @@ import type { SeekResolution } from '../../work-on-seek-request';
7
7
  export declare const getSeekingByteFromIsoBaseMedia: ({ info, time, logLevel, currentPosition, isoState, m3uPlaylistContext, structure, }: {
8
8
  info: IsoBaseMediaSeekingHints;
9
9
  time: number;
10
- logLevel: LogLevel;
10
+ logLevel: MediaParserLogLevel;
11
11
  currentPosition: number;
12
12
  isoState: IsoBaseMediaState;
13
13
  m3uPlaylistContext: M3uPlaylistContext | null;
@@ -8,18 +8,13 @@ const find_track_to_seek_1 = require("./find-track-to-seek");
8
8
  const get_seeking_byte_from_fragmented_mp4_1 = require("./get-seeking-byte-from-fragmented-mp4");
9
9
  const traversal_1 = require("./traversal");
10
10
  const getSeekingByteFromIsoBaseMedia = ({ info, time, logLevel, currentPosition, isoState, m3uPlaylistContext, structure, }) => {
11
- var _a, _b;
11
+ var _a, _b, _c;
12
12
  const tracks = (0, get_tracks_1.getTracksFromIsoBaseMedia)({
13
13
  isoState,
14
14
  m3uPlaylistContext,
15
15
  structure,
16
16
  mayUsePrecomputed: false,
17
17
  });
18
- const allTracks = [
19
- ...tracks.videoTracks,
20
- ...tracks.audioTracks,
21
- ...tracks.otherTracks,
22
- ];
23
18
  const hasMoov = Boolean((0, traversal_1.getMoovBoxFromState)({
24
19
  structureState: structure,
25
20
  isoState,
@@ -39,11 +34,13 @@ const getSeekingByteFromIsoBaseMedia = ({ info, time, logLevel, currentPosition,
39
34
  logLevel,
40
35
  currentPosition,
41
36
  isoState,
42
- allTracks,
37
+ tracks,
43
38
  isLastChunkInPlaylist: (_b = m3uPlaylistContext === null || m3uPlaylistContext === void 0 ? void 0 : m3uPlaylistContext.isLastChunkInPlaylist) !== null && _b !== void 0 ? _b : false,
39
+ structure,
40
+ mp4HeaderSegment: (_c = m3uPlaylistContext === null || m3uPlaylistContext === void 0 ? void 0 : m3uPlaylistContext.mp4HeaderSegment) !== null && _c !== void 0 ? _c : null,
44
41
  });
45
42
  }
46
- const trackWithSamplePositions = (0, find_track_to_seek_1.findTrackToSeek)(allTracks, structure);
43
+ const trackWithSamplePositions = (0, find_track_to_seek_1.findTrackToSeek)(tracks, structure);
47
44
  if (!trackWithSamplePositions) {
48
45
  return Promise.resolve({
49
46
  type: 'valid-but-must-wait',
@@ -1,3 +1,3 @@
1
- import type { AudioTrack, OtherTrack, VideoTrack } from '../../get-tracks';
1
+ import type { MediaParserAudioTrack, MediaParserOtherTrack, MediaParserVideoTrack } from '../../get-tracks';
2
2
  import type { TrakBox } from './trak/trak';
3
- export declare const makeBaseMediaTrack: (trakBox: TrakBox) => VideoTrack | AudioTrack | OtherTrack | null;
3
+ export declare const makeBaseMediaTrack: (trakBox: TrakBox) => MediaParserVideoTrack | MediaParserAudioTrack | MediaParserOtherTrack | null;