@remotion/media-parser 4.0.233 → 4.0.235

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 (95) hide show
  1. package/dist/aac-codecprivate.d.ts +19 -0
  2. package/dist/aac-codecprivate.js +122 -0
  3. package/dist/add-avc-profile-to-track.d.ts +1 -1
  4. package/dist/boxes/iso-base-media/get-actual-number-of-channels.d.ts +13 -0
  5. package/dist/boxes/iso-base-media/get-actual-number-of-channels.js +22 -0
  6. package/dist/boxes/iso-base-media/make-track.js +16 -7
  7. package/dist/boxes/iso-base-media/meta/hdlr.d.ts +12 -0
  8. package/dist/boxes/iso-base-media/meta/hdlr.js +33 -0
  9. package/dist/boxes/iso-base-media/meta/ilst.d.ts +28 -0
  10. package/dist/boxes/iso-base-media/meta/ilst.js +86 -0
  11. package/dist/boxes/iso-base-media/meta/keys.d.ts +10 -0
  12. package/dist/boxes/iso-base-media/meta/keys.js +17 -0
  13. package/dist/boxes/iso-base-media/meta/list.d.ts +12 -0
  14. package/dist/boxes/iso-base-media/meta/list.js +33 -0
  15. package/dist/boxes/iso-base-media/moov/moov.d.ts +3 -1
  16. package/dist/boxes/iso-base-media/moov/moov.js +2 -1
  17. package/dist/boxes/iso-base-media/process-box.d.ts +5 -2
  18. package/dist/boxes/iso-base-media/process-box.js +66 -8
  19. package/dist/boxes/iso-base-media/stsd/keys.d.ts +15 -1
  20. package/dist/boxes/iso-base-media/stsd/keys.js +25 -12
  21. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +3 -1
  22. package/dist/boxes/iso-base-media/stsd/mebx.js +2 -1
  23. package/dist/boxes/iso-base-media/stsd/samples.d.ts +5 -2
  24. package/dist/boxes/iso-base-media/stsd/samples.js +7 -2
  25. package/dist/boxes/iso-base-media/stsd/stsd.d.ts +3 -1
  26. package/dist/boxes/iso-base-media/stsd/stsd.js +2 -1
  27. package/dist/boxes/iso-base-media/trak/trak.d.ts +3 -1
  28. package/dist/boxes/iso-base-media/trak/trak.js +2 -1
  29. package/dist/boxes/riff/expect-riff-box.d.ts +1 -0
  30. package/dist/boxes/riff/expect-riff-box.js +1 -1
  31. package/dist/boxes/riff/get-tracks-from-avi.d.ts +2 -1
  32. package/dist/boxes/riff/get-tracks-from-avi.js +14 -8
  33. package/dist/boxes/riff/parse-box.d.ts +3 -1
  34. package/dist/boxes/riff/parse-box.js +38 -5
  35. package/dist/boxes/riff/parse-isft.d.ts +6 -0
  36. package/dist/boxes/riff/parse-isft.js +17 -0
  37. package/dist/boxes/riff/parse-movi.js +31 -20
  38. package/dist/boxes/riff/parse-riff-box.js +4 -0
  39. package/dist/boxes/riff/riff-box.d.ts +5 -1
  40. package/dist/boxes/webm/ebml.d.ts +1 -1
  41. package/dist/boxes/webm/parse-ebml.js +2 -1
  42. package/dist/boxes/webm/parse-webm-header.d.ts +6 -1
  43. package/dist/boxes/webm/parse-webm-header.js +3 -1
  44. package/dist/boxes/webm/segments/all-segments.d.ts +42 -2
  45. package/dist/boxes/webm/segments/all-segments.js +28 -3
  46. package/dist/boxes/webm/segments/parse-children.d.ts +8 -3
  47. package/dist/boxes/webm/segments/parse-children.js +39 -4
  48. package/dist/boxes/webm/segments.d.ts +5 -2
  49. package/dist/boxes/webm/segments.js +23 -3
  50. package/dist/boxes/webm/traversal.d.ts +1 -0
  51. package/dist/boxes/webm/traversal.js +18 -2
  52. package/dist/buffer-iterator.d.ts +3 -0
  53. package/dist/buffer-iterator.js +23 -0
  54. package/dist/create/iso-base-media/codec-specific/mp4a.js +1 -17
  55. package/dist/create/iso-base-media/mp4-header.js +2 -1
  56. package/dist/emit-available-info.d.ts +1 -1
  57. package/dist/emit-available-info.js +17 -6
  58. package/dist/esm/index.mjs +992 -162
  59. package/dist/get-audio-codec.d.ts +1 -1
  60. package/dist/get-dimensions.d.ts +1 -1
  61. package/dist/get-duration.d.ts +1 -1
  62. package/dist/get-is-hdr.d.ts +1 -1
  63. package/dist/get-metadata.d.ts +7 -0
  64. package/dist/get-metadata.js +63 -0
  65. package/dist/get-tracks.d.ts +1 -1
  66. package/dist/get-tracks.js +1 -1
  67. package/dist/get-video-codec.d.ts +1 -1
  68. package/dist/has-all-info.d.ts +8 -3
  69. package/dist/has-all-info.js +21 -12
  70. package/dist/index.d.ts +6 -0
  71. package/dist/index.js +2 -0
  72. package/dist/metadata/get-metadata.d.ts +7 -0
  73. package/dist/metadata/get-metadata.js +16 -0
  74. package/dist/metadata/metadata-from-iso.d.ts +4 -0
  75. package/dist/metadata/metadata-from-iso.js +148 -0
  76. package/dist/metadata/metadata-from-matroska.d.ts +3 -0
  77. package/dist/metadata/metadata-from-matroska.js +53 -0
  78. package/dist/metadata/metadata-from-riff.d.ts +3 -0
  79. package/dist/metadata/metadata-from-riff.js +24 -0
  80. package/dist/options.d.ts +9 -3
  81. package/dist/parse-media.js +32 -29
  82. package/dist/parse-result.d.ts +3 -1
  83. package/dist/parse-video.d.ts +3 -1
  84. package/dist/parse-video.js +5 -3
  85. package/dist/parser-context.d.ts +1 -2
  86. package/dist/register-track.d.ts +1 -1
  87. package/dist/state/can-skip-tracks.d.ts +9 -0
  88. package/dist/state/can-skip-tracks.js +33 -0
  89. package/dist/state/has-tracks-section.d.ts +6 -0
  90. package/dist/state/has-tracks-section.js +21 -0
  91. package/dist/state/parser-state.d.ts +51 -0
  92. package/dist/state/parser-state.js +170 -0
  93. package/dist/version.d.ts +1 -1
  94. package/dist/version.js +1 -1
  95. package/package.json +3 -3
@@ -0,0 +1,19 @@
1
+ /**
2
+ * bytes 17,144: 00010 001 | 1 0010 000
3
+ ^^^^^ ^^^ ^ ^^^^ ^
4
+ | | | | padding
5
+ | | |
6
+ | | +-- channelConfiguration (2)
7
+ | +-- samplingFrequencyIndex (3)
8
+ +-- audioConfigType (2)
9
+ */
10
+ export declare const createAacCodecPrivate: ({ audioObjectType, sampleRate, channelConfiguration, }: {
11
+ audioObjectType: number;
12
+ sampleRate: number;
13
+ channelConfiguration: number;
14
+ }) => Uint8Array;
15
+ export declare const parseAacCodecPrivate: (bytes: Uint8Array) => {
16
+ audioObjectType: number;
17
+ sampleRate: number;
18
+ channelConfiguration: number;
19
+ };
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ // codec private, for example [17, 144]
3
+ // audioObjectType = 2 = 'AAC LC'
4
+ // samplingFrequencyIndex = 3 = '48000 Hz'
5
+ // channelConfiguration = 2 = '2 channels'
6
+ /**
7
+ * bytes 17,144: 00010 001 | 1 0010 000
8
+ ^^^^^ ^^^ ^ ^^^^ ^
9
+ | | | | padding
10
+ | | |
11
+ | | +-- channelConfiguration (2)
12
+ | +-- samplingFrequencyIndex (3)
13
+ +-- audioConfigType (2)
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.parseAacCodecPrivate = exports.createAacCodecPrivate = void 0;
17
+ // https://wiki.multimedia.cx/index.php/MPEG-4_Audio#Channel_Configurations
18
+ const getConfigForSampleRate = (sampleRate) => {
19
+ if (sampleRate === 96000) {
20
+ return 0;
21
+ }
22
+ if (sampleRate === 88200) {
23
+ return 1;
24
+ }
25
+ if (sampleRate === 64000) {
26
+ return 2;
27
+ }
28
+ if (sampleRate === 48000) {
29
+ return 3;
30
+ }
31
+ if (sampleRate === 44100) {
32
+ return 4;
33
+ }
34
+ if (sampleRate === 32000) {
35
+ return 5;
36
+ }
37
+ if (sampleRate === 24000) {
38
+ return 6;
39
+ }
40
+ if (sampleRate === 22050) {
41
+ return 7;
42
+ }
43
+ if (sampleRate === 16000) {
44
+ return 8;
45
+ }
46
+ if (sampleRate === 12000) {
47
+ return 9;
48
+ }
49
+ if (sampleRate === 11025) {
50
+ return 10;
51
+ }
52
+ if (sampleRate === 8000) {
53
+ return 11;
54
+ }
55
+ if (sampleRate === 7350) {
56
+ return 12;
57
+ }
58
+ throw new Error(`Unexpected sample rate ${sampleRate}`);
59
+ };
60
+ const createAacCodecPrivate = ({ audioObjectType, sampleRate, channelConfiguration, }) => {
61
+ const bits = `${audioObjectType.toString(2).padStart(5, '0')}${getConfigForSampleRate(sampleRate).toString(2).padStart(4, '0')}${channelConfiguration.toString(2).padStart(4, '0')}000`;
62
+ if (bits.length !== 16) {
63
+ throw new Error('Invalid AAC codec private ' + bits.length);
64
+ }
65
+ if (channelConfiguration === 0 || channelConfiguration > 7) {
66
+ throw new Error('Invalid channel configuration ' + channelConfiguration);
67
+ }
68
+ const firstByte = parseInt(bits.slice(0, 8), 2);
69
+ const secondByte = parseInt(bits.slice(8, 16), 2);
70
+ return new Uint8Array([firstByte, secondByte]);
71
+ };
72
+ exports.createAacCodecPrivate = createAacCodecPrivate;
73
+ const parseAacCodecPrivate = (bytes) => {
74
+ if (bytes.length < 2) {
75
+ throw new Error('Invalid AAC codec private length');
76
+ }
77
+ const bits = `${bytes[0].toString(2).padStart(8, '0')}${bytes[1].toString(2).padStart(8, '0')}`;
78
+ if (bits.length !== 16) {
79
+ throw new Error('Invalid AAC codec private bits length');
80
+ }
81
+ const audioObjectType = parseInt(bits.slice(0, 5), 2);
82
+ const samplingFrequencyIndex = parseInt(bits.slice(5, 9), 2);
83
+ const channelConfiguration = parseInt(bits.slice(9, 13), 2);
84
+ const sampleRate = (() => {
85
+ switch (samplingFrequencyIndex) {
86
+ case 0:
87
+ return 96000;
88
+ case 1:
89
+ return 88200;
90
+ case 2:
91
+ return 64000;
92
+ case 3:
93
+ return 48000;
94
+ case 4:
95
+ return 44100;
96
+ case 5:
97
+ return 32000;
98
+ case 6:
99
+ return 24000;
100
+ case 7:
101
+ return 22050;
102
+ case 8:
103
+ return 16000;
104
+ case 9:
105
+ return 12000;
106
+ case 10:
107
+ return 11025;
108
+ case 11:
109
+ return 8000;
110
+ case 12:
111
+ return 7350;
112
+ default:
113
+ throw new Error(`Unexpected sampling frequency index ${samplingFrequencyIndex}`);
114
+ }
115
+ })();
116
+ return {
117
+ audioObjectType,
118
+ sampleRate,
119
+ channelConfiguration,
120
+ };
121
+ };
122
+ exports.parseAacCodecPrivate = parseAacCodecPrivate;
@@ -1,3 +1,3 @@
1
1
  import type { VideoTrack } from './get-tracks';
2
- import type { SpsAndPps } from './parser-state';
2
+ import type { SpsAndPps } from './state/parser-state';
3
3
  export declare const addAvcProfileToTrack: (track: VideoTrack, avc1Profile: SpsAndPps | null) => VideoTrack;
@@ -0,0 +1,13 @@
1
+ import type { MediaParserAudioCodec } from '../../get-tracks';
2
+ type AudioDecoderConfig = {
3
+ numberOfChannels: number;
4
+ sampleRate: number;
5
+ codecPrivate: Uint8Array | null;
6
+ };
7
+ export declare const getActualDecoderParameters: ({ audioCodec, codecPrivate, numberOfChannels, sampleRate, }: {
8
+ audioCodec: MediaParserAudioCodec;
9
+ codecPrivate: Uint8Array | null;
10
+ numberOfChannels: number;
11
+ sampleRate: number;
12
+ }) => AudioDecoderConfig;
13
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getActualDecoderParameters = void 0;
4
+ const aac_codecprivate_1 = require("../../aac-codecprivate");
5
+ // Example video: 'https://remotion-assets.s3.eu-central-1.amazonaws.com/example-videos/riverside.mp4';
6
+ // This video has `numberOfChannels = 2`, but the actual number of channels is `1` according to Codec Private.
7
+ // Therefore, prioritizing Codec Private over `numberOfChannels`.
8
+ const getActualDecoderParameters = ({ audioCodec, codecPrivate, numberOfChannels, sampleRate, }) => {
9
+ if (audioCodec !== 'aac') {
10
+ return { numberOfChannels, sampleRate, codecPrivate };
11
+ }
12
+ if (codecPrivate === null) {
13
+ return { numberOfChannels, sampleRate, codecPrivate };
14
+ }
15
+ const parsed = (0, aac_codecprivate_1.parseAacCodecPrivate)(codecPrivate);
16
+ return {
17
+ numberOfChannels: parsed.channelConfiguration,
18
+ sampleRate: parsed.sampleRate,
19
+ codecPrivate: (0, aac_codecprivate_1.createAacCodecPrivate)(parsed),
20
+ };
21
+ };
22
+ exports.getActualDecoderParameters = getActualDecoderParameters;
@@ -5,9 +5,10 @@ const get_audio_codec_1 = require("../../get-audio-codec");
5
5
  const get_fps_1 = require("../../get-fps");
6
6
  const get_sample_aspect_ratio_1 = require("../../get-sample-aspect-ratio");
7
7
  const get_video_codec_1 = require("../../get-video-codec");
8
+ const get_actual_number_of_channels_1 = require("./get-actual-number-of-channels");
8
9
  const traversal_1 = require("./traversal");
9
10
  const makeBaseMediaTrack = (trakBox) => {
10
- var _a, _b, _c;
11
+ var _a, _b, _c, _d;
11
12
  const tkhdBox = (0, traversal_1.getTkhdBox)(trakBox);
12
13
  const videoDescriptors = (0, traversal_1.getVideoDescriptors)(trakBox);
13
14
  const timescaleAndDuration = (0, get_fps_1.getTimescaleAndDuration)(trakBox);
@@ -27,17 +28,25 @@ const makeBaseMediaTrack = (trakBox) => {
27
28
  throw new Error('Could not find sample rate');
28
29
  }
29
30
  const { codecString, description } = (0, get_audio_codec_1.getAudioCodecStringFromTrak)(trakBox);
31
+ const codecPrivate = (_b = (_a = (0, get_audio_codec_1.getCodecPrivateFromTrak)(trakBox)) !== null && _a !== void 0 ? _a : description) !== null && _b !== void 0 ? _b : null;
32
+ const codecWithoutConfig = (0, get_audio_codec_1.getAudioCodecFromTrack)(trakBox);
33
+ const actual = (0, get_actual_number_of_channels_1.getActualDecoderParameters)({
34
+ audioCodec: codecWithoutConfig,
35
+ codecPrivate,
36
+ numberOfChannels,
37
+ sampleRate,
38
+ });
30
39
  return {
31
40
  type: 'audio',
32
41
  trackId: tkhdBox.trackId,
33
42
  timescale: timescaleAndDuration.timescale,
34
43
  codec: codecString,
35
- numberOfChannels,
36
- sampleRate,
37
- description,
44
+ numberOfChannels: actual.numberOfChannels,
45
+ sampleRate: actual.sampleRate,
46
+ description: (_c = actual.codecPrivate) !== null && _c !== void 0 ? _c : undefined,
38
47
  trakBox,
39
- codecPrivate: (_b = (_a = (0, get_audio_codec_1.getCodecPrivateFromTrak)(trakBox)) !== null && _a !== void 0 ? _a : description) !== null && _b !== void 0 ? _b : null,
40
- codecWithoutConfig: (0, get_audio_codec_1.getAudioCodecFromTrack)(trakBox),
48
+ codecPrivate: actual.codecPrivate,
49
+ codecWithoutConfig,
41
50
  };
42
51
  }
43
52
  if (!(0, get_fps_1.trakBoxContainsVideo)(trakBox)) {
@@ -84,7 +93,7 @@ const makeBaseMediaTrack = (trakBox) => {
84
93
  rotation,
85
94
  trakBox,
86
95
  codecPrivate: privateData,
87
- color: (_c = (0, get_video_codec_1.getIsoBmColrConfig)(trakBox)) !== null && _c !== void 0 ? _c : {
96
+ color: (_d = (0, get_video_codec_1.getIsoBmColrConfig)(trakBox)) !== null && _d !== void 0 ? _d : {
88
97
  fullRange: null,
89
98
  matrixCoefficients: null,
90
99
  primaries: null,
@@ -0,0 +1,12 @@
1
+ import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { BaseBox } from '../base-type';
3
+ export interface HdlrBox extends BaseBox {
4
+ type: 'hdlr-box';
5
+ hdlrType: string;
6
+ componentName: string;
7
+ }
8
+ export declare const parseHdlr: ({ iterator, size, offset, }: {
9
+ iterator: BufferIterator;
10
+ size: number;
11
+ offset: number;
12
+ }) => Promise<HdlrBox>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseHdlr = void 0;
4
+ const parseHdlr = ({ iterator, size, offset, }) => {
5
+ const box = iterator.startBox(size - 8);
6
+ const version = iterator.getUint8();
7
+ if (version !== 0) {
8
+ throw new Error(`Unsupported hdlr version: ${version}`);
9
+ }
10
+ // version
11
+ iterator.discard(3);
12
+ // predefined
13
+ iterator.discard(4);
14
+ // type
15
+ const hdlrType = iterator.getByteString(4);
16
+ // component manufactor
17
+ iterator.discard(4);
18
+ // component flags
19
+ iterator.discard(4);
20
+ // component flags mask
21
+ iterator.discard(4);
22
+ // component name
23
+ const componentName = iterator.readUntilNullTerminator();
24
+ box.discardRest();
25
+ return Promise.resolve({
26
+ type: 'hdlr-box',
27
+ boxSize: size,
28
+ offset,
29
+ hdlrType,
30
+ componentName,
31
+ });
32
+ };
33
+ exports.parseHdlr = parseHdlr;
@@ -0,0 +1,28 @@
1
+ import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { BaseBox } from '../base-type';
3
+ type IlstEntry = {
4
+ index: number;
5
+ wellKnownType: number;
6
+ type: string;
7
+ value: Value;
8
+ };
9
+ export type Value = {
10
+ type: 'text';
11
+ value: string;
12
+ } | {
13
+ type: 'number';
14
+ value: number;
15
+ } | {
16
+ type: 'unknown';
17
+ value: unknown;
18
+ };
19
+ export interface IlstBox extends BaseBox {
20
+ type: 'ilst-box';
21
+ entries: IlstEntry[];
22
+ }
23
+ export declare const parseIlstBox: ({ iterator, size, offset, }: {
24
+ iterator: BufferIterator;
25
+ size: number;
26
+ offset: number;
27
+ }) => IlstBox;
28
+ export {};
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseIlstBox = void 0;
4
+ // https://developer.apple.com/documentation/quicktime-file-format/well-known_types
5
+ const parseFromWellKnownType = (wellKnownType, iterator, size) => {
6
+ if (wellKnownType === 1) {
7
+ const value = iterator.getByteString(size);
8
+ return { type: 'text', value };
9
+ }
10
+ if (wellKnownType === 21) {
11
+ if (size === 1) {
12
+ return { type: 'number', value: iterator.getInt8() };
13
+ }
14
+ if (size === 2) {
15
+ return { type: 'number', value: iterator.getInt16() };
16
+ }
17
+ if (size === 3) {
18
+ return { type: 'number', value: iterator.getInt24() };
19
+ }
20
+ if (size === 4) {
21
+ return { type: 'number', value: iterator.getInt32() };
22
+ }
23
+ if (size === 8) {
24
+ return { type: 'number', value: Number(iterator.getInt64()) };
25
+ }
26
+ throw new Error(`Weird size for number ${size}`);
27
+ }
28
+ if (wellKnownType === 22) {
29
+ if (size === 1) {
30
+ return { type: 'number', value: iterator.getUint8() };
31
+ }
32
+ if (size === 2) {
33
+ return { type: 'number', value: iterator.getUint16() };
34
+ }
35
+ if (size === 3) {
36
+ return { type: 'number', value: iterator.getUint24() };
37
+ }
38
+ if (size === 4) {
39
+ return { type: 'number', value: iterator.getUint32() };
40
+ }
41
+ throw new Error(`Weird size for number ${size}`);
42
+ }
43
+ if (wellKnownType === 23) {
44
+ if (size === 4) {
45
+ return { type: 'number', value: iterator.getFloat32() };
46
+ }
47
+ if (size === 8) {
48
+ return { type: 'number', value: iterator.getFloat64() };
49
+ }
50
+ throw new Error(`Weird size for number ${size}`);
51
+ }
52
+ iterator.discard(size);
53
+ return { type: 'unknown', value: null };
54
+ };
55
+ const parseIlstBox = ({ iterator, size, offset, }) => {
56
+ const box = iterator.startBox(size - 8);
57
+ const entries = [];
58
+ while (iterator.counter.getOffset() < size + offset) {
59
+ // metadata size
60
+ const metadataSize = iterator.getUint32();
61
+ const index = iterator.getUint32();
62
+ // "skip" as a number
63
+ if (index === 1936419184) {
64
+ iterator.discard(metadataSize - 8);
65
+ continue;
66
+ }
67
+ const innerSize = iterator.getUint32();
68
+ const type = iterator.getAtom();
69
+ const typeIndicator = iterator.getUint8();
70
+ if (typeIndicator !== 0) {
71
+ throw new Error('Expected type indicator to be 0');
72
+ }
73
+ const wellKnownType = iterator.getUint24();
74
+ iterator.discard(4);
75
+ const value = parseFromWellKnownType(wellKnownType, iterator, innerSize - 16);
76
+ entries.push({ index, type, wellKnownType, value });
77
+ }
78
+ box.discardRest();
79
+ return {
80
+ type: 'ilst-box',
81
+ boxSize: size,
82
+ offset,
83
+ entries,
84
+ };
85
+ };
86
+ exports.parseIlstBox = parseIlstBox;
@@ -0,0 +1,10 @@
1
+ import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { BaseBox } from '../base-type';
3
+ export interface KeysBox extends BaseBox {
4
+ type: 'keys-box';
5
+ }
6
+ export declare const parseKeys: ({ iterator, size, offset, }: {
7
+ iterator: BufferIterator;
8
+ size: number;
9
+ offset: number;
10
+ }) => Promise<KeysBox>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseKeys = void 0;
4
+ const parseKeys = ({ iterator, size, offset, }) => {
5
+ const box = iterator.startBox(size - 8);
6
+ const version = iterator.getUint8();
7
+ if (version !== 0) {
8
+ throw new Error(`Unsupported hdlr version: ${version}`);
9
+ }
10
+ box.discardRest();
11
+ return Promise.resolve({
12
+ type: 'keys-box',
13
+ boxSize: size,
14
+ offset,
15
+ });
16
+ };
17
+ exports.parseKeys = parseKeys;
@@ -0,0 +1,12 @@
1
+ import type { BufferIterator } from '../../../buffer-iterator';
2
+ import type { BaseBox } from '../base-type';
3
+ export interface HdlrBox extends BaseBox {
4
+ type: 'hdlr-box';
5
+ hdlrType: string;
6
+ componentName: string;
7
+ }
8
+ export declare const parseHdlr: ({ iterator, size, offset, }: {
9
+ iterator: BufferIterator;
10
+ size: number;
11
+ offset: number;
12
+ }) => Promise<HdlrBox>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseHdlr = void 0;
4
+ const parseHdlr = ({ iterator, size, offset, }) => {
5
+ const box = iterator.startBox(size - 8);
6
+ const version = iterator.getUint8();
7
+ if (version !== 0) {
8
+ throw new Error(`Unsupported hdlr version: ${version}`);
9
+ }
10
+ // version
11
+ iterator.discard(3);
12
+ // predefined
13
+ iterator.discard(4);
14
+ // type
15
+ const hdlrType = iterator.getByteString(4);
16
+ // component manufactor
17
+ iterator.discard(4);
18
+ // component flags
19
+ iterator.discard(4);
20
+ // component flags mask
21
+ iterator.discard(4);
22
+ // component name
23
+ const componentName = iterator.readUntilNullTerminator();
24
+ box.discardRest();
25
+ return Promise.resolve({
26
+ type: 'hdlr-box',
27
+ boxSize: size,
28
+ offset,
29
+ hdlrType,
30
+ componentName,
31
+ });
32
+ };
33
+ exports.parseHdlr = parseHdlr;
@@ -1,5 +1,6 @@
1
1
  import type { BufferIterator } from '../../../buffer-iterator';
2
2
  import type { LogLevel } from '../../../log';
3
+ import type { Options, ParseMediaFields } from '../../../options';
3
4
  import type { AnySegment } from '../../../parse-result';
4
5
  import type { ParserContext } from '../../../parser-context';
5
6
  import type { BaseBox } from '../base-type';
@@ -7,11 +8,12 @@ export interface MoovBox extends BaseBox {
7
8
  type: 'moov-box';
8
9
  children: AnySegment[];
9
10
  }
10
- export declare const parseMoov: ({ iterator, offset, size, options, signal, logLevel, }: {
11
+ export declare const parseMoov: ({ iterator, offset, size, options, signal, logLevel, fields, }: {
11
12
  iterator: BufferIterator;
12
13
  offset: number;
13
14
  size: number;
14
15
  options: ParserContext;
15
16
  signal: AbortSignal | null;
16
17
  logLevel: LogLevel;
18
+ fields: Options<ParseMediaFields>;
17
19
  }) => Promise<MoovBox>;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseMoov = void 0;
4
4
  const process_box_1 = require("../process-box");
5
- const parseMoov = async ({ iterator, offset, size, options, signal, logLevel, }) => {
5
+ const parseMoov = async ({ iterator, offset, size, options, signal, logLevel, fields, }) => {
6
6
  const children = await (0, process_box_1.parseIsoBaseMediaBoxes)({
7
7
  iterator,
8
8
  maxBytes: size - (iterator.counter.getOffset() - offset),
@@ -12,6 +12,7 @@ const parseMoov = async ({ iterator, offset, size, options, signal, logLevel, })
12
12
  continueMdat: false,
13
13
  signal,
14
14
  logLevel,
15
+ fields,
15
16
  });
16
17
  if (children.status === 'incomplete') {
17
18
  throw new Error('Incomplete boxes are not allowed');
@@ -1,5 +1,6 @@
1
1
  import type { BufferIterator } from '../../buffer-iterator';
2
2
  import type { LogLevel } from '../../log';
3
+ import type { Options, ParseMediaFields } from '../../options';
3
4
  import type { IsoBaseMediaBox, IsoBaseMediaStructure, ParseResult } from '../../parse-result';
4
5
  import type { BoxAndNext, PartialMdatBox } from '../../parse-video';
5
6
  import type { ParserContext } from '../../parser-context';
@@ -11,15 +12,16 @@ export declare const parseMdatPartially: ({ iterator, boxSize, fileOffset, parse
11
12
  options: ParserContext;
12
13
  signal: AbortSignal | null;
13
14
  }) => Promise<BoxAndNext>;
14
- export declare const processBox: ({ iterator, allowIncompleteBoxes, parsedBoxes, options, signal, logLevel, }: {
15
+ export declare const processBox: ({ iterator, allowIncompleteBoxes, parsedBoxes, options, signal, logLevel, fields, }: {
15
16
  iterator: BufferIterator;
16
17
  allowIncompleteBoxes: boolean;
17
18
  parsedBoxes: IsoBaseMediaBox[];
18
19
  options: ParserContext;
19
20
  signal: AbortSignal | null;
20
21
  logLevel: LogLevel;
22
+ fields: Options<ParseMediaFields>;
21
23
  }) => Promise<BoxAndNext>;
22
- export declare const parseIsoBaseMediaBoxes: ({ iterator, maxBytes, allowIncompleteBoxes, initialBoxes, options, continueMdat, signal, logLevel, }: {
24
+ export declare const parseIsoBaseMediaBoxes: ({ iterator, maxBytes, allowIncompleteBoxes, initialBoxes, options, continueMdat, signal, logLevel, fields, }: {
23
25
  iterator: BufferIterator;
24
26
  maxBytes: number;
25
27
  allowIncompleteBoxes: boolean;
@@ -28,4 +30,5 @@ export declare const parseIsoBaseMediaBoxes: ({ iterator, maxBytes, allowIncompl
28
30
  continueMdat: false | PartialMdatBox;
29
31
  signal: AbortSignal | null;
30
32
  logLevel: LogLevel;
33
+ fields: Options<ParseMediaFields>;
31
34
  }) => Promise<ParseResult<IsoBaseMediaStructure>>;