@remotion/media-parser 4.0.209 → 4.0.210

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 (213) hide show
  1. package/buffer.js +2 -0
  2. package/dist/boxes/iso-base-media/get-sample-positions-from-track.js +1 -1
  3. package/dist/boxes/iso-base-media/make-track.js +14 -2
  4. package/dist/boxes/iso-base-media/mdat/mdat.d.ts +2 -1
  5. package/dist/boxes/iso-base-media/mdat/mdat.js +8 -3
  6. package/dist/boxes/iso-base-media/moov/moov.d.ts +2 -1
  7. package/dist/boxes/iso-base-media/moov/moov.js +2 -1
  8. package/dist/boxes/iso-base-media/process-box.d.ts +6 -3
  9. package/dist/boxes/iso-base-media/process-box.js +20 -5
  10. package/dist/boxes/iso-base-media/stsd/avcc.d.ts +1 -1
  11. package/dist/boxes/iso-base-media/stsd/avcc.js +2 -2
  12. package/dist/boxes/iso-base-media/stsd/ctts.js +2 -5
  13. package/dist/boxes/iso-base-media/stsd/hvcc.d.ts +1 -1
  14. package/dist/boxes/iso-base-media/stsd/hvcc.js +2 -2
  15. package/dist/boxes/iso-base-media/stsd/mebx.d.ts +2 -1
  16. package/dist/boxes/iso-base-media/stsd/mebx.js +2 -1
  17. package/dist/boxes/iso-base-media/stsd/samples.d.ts +4 -2
  18. package/dist/boxes/iso-base-media/stsd/samples.js +69 -11
  19. package/dist/boxes/iso-base-media/stsd/stsd.d.ts +2 -1
  20. package/dist/boxes/iso-base-media/stsd/stsd.js +2 -1
  21. package/dist/boxes/iso-base-media/trak/trak.d.ts +2 -1
  22. package/dist/boxes/iso-base-media/trak/trak.js +2 -1
  23. package/dist/boxes/iso-base-media/traversal.d.ts +44 -0
  24. package/dist/boxes/iso-base-media/traversal.js +211 -0
  25. package/dist/boxes/webm/color.d.ts +4 -0
  26. package/dist/boxes/webm/color.js +120 -0
  27. package/dist/boxes/webm/description.js +1 -1
  28. package/dist/boxes/webm/get-ready-tracks.js +3 -3
  29. package/dist/boxes/webm/get-sample-from-block.js +1 -1
  30. package/dist/boxes/webm/get-track.js +16 -1
  31. package/dist/boxes/webm/make-track.d.ts +9 -0
  32. package/dist/boxes/webm/make-track.js +260 -0
  33. package/dist/boxes/webm/parse-ebml.js +2 -2
  34. package/dist/boxes/webm/segments/all-segments.d.ts +36 -3
  35. package/dist/boxes/webm/segments/all-segments.js +34 -6
  36. package/dist/boxes/webm/traversal.d.ts +26 -1
  37. package/dist/boxes/webm/traversal.js +214 -1
  38. package/dist/create/cluster-segment.js +0 -2
  39. package/dist/create/cluster.d.ts +10 -2
  40. package/dist/create/cluster.js +16 -10
  41. package/dist/create/create-media.d.ts +4 -2
  42. package/dist/create/create-media.js +76 -14
  43. package/dist/create/cues.d.ts +0 -0
  44. package/dist/create/cues.js +1 -0
  45. package/dist/create/make-duration-with-padding.d.ts +1 -1
  46. package/dist/create/make-duration-with-padding.js +3 -3
  47. package/dist/create/matroska-cues.d.ts +6 -0
  48. package/dist/create/matroska-cues.js +50 -0
  49. package/dist/create/matroska-info.js +1 -1
  50. package/dist/create/matroska-seek.d.ts +6 -0
  51. package/dist/create/matroska-seek.js +32 -0
  52. package/dist/create/matroska-segment.d.ts +1 -0
  53. package/dist/create/matroska-segment.js +3 -2
  54. package/dist/create/matroska-trackentry.d.ts +9 -14
  55. package/dist/create/matroska-trackentry.js +79 -94
  56. package/dist/emit-available-info.d.ts +12 -0
  57. package/dist/emit-available-info.js +133 -0
  58. package/dist/esm/buffer.mjs +57 -0
  59. package/dist/esm/from-fetch.mjs +72 -0
  60. package/dist/esm/from-node.mjs +48 -0
  61. package/dist/esm/from-web-file.mjs +48 -0
  62. package/dist/esm/index.mjs +6689 -0
  63. package/dist/esm/web-fs.mjs +67 -0
  64. package/dist/get-audio-codec.d.ts +5 -5
  65. package/dist/get-audio-codec.js +41 -57
  66. package/dist/get-container.d.ts +4 -0
  67. package/dist/get-container.js +26 -0
  68. package/dist/get-duration.js +1 -1
  69. package/dist/get-fps.js +1 -1
  70. package/dist/get-sample-aspect-ratio.d.ts +1 -1
  71. package/dist/get-sample-aspect-ratio.js +19 -19
  72. package/dist/get-tracks.d.ts +13 -0
  73. package/dist/get-tracks.js +8 -8
  74. package/dist/get-video-codec.d.ts +5 -2
  75. package/dist/get-video-codec.js +111 -21
  76. package/dist/has-all-info.d.ts +2 -2
  77. package/dist/has-all-info.js +23 -9
  78. package/dist/index.d.ts +3 -1
  79. package/dist/options.d.ts +97 -30
  80. package/dist/parse-media.js +43 -62
  81. package/dist/parse-video.d.ts +2 -1
  82. package/dist/parse-video.js +3 -1
  83. package/dist/parser-state.js +1 -2
  84. package/dist/readers/from-fetch.js +24 -4
  85. package/dist/readers/from-node.js +13 -3
  86. package/dist/readers/from-web-file.js +14 -2
  87. package/dist/readers/reader.d.ts +6 -1
  88. package/dist/samples-from-moof.js +1 -1
  89. package/dist/traversal.d.ts +0 -21
  90. package/dist/traversal.js +1 -158
  91. package/dist/truthy.d.ts +3 -0
  92. package/dist/truthy.js +7 -0
  93. package/dist/writers/buffer.d.ts +2 -0
  94. package/dist/writers/buffer.js +58 -0
  95. package/dist/writers/web-fs.d.ts +1 -0
  96. package/dist/writers/web-fs.js +42 -18
  97. package/dist/writers/writer.d.ts +4 -2
  98. package/fetch.js +2 -0
  99. package/node.js +2 -0
  100. package/package.json +43 -8
  101. package/web-file.js +2 -0
  102. package/web-fs.js +2 -0
  103. package/.eslintrc +0 -8
  104. package/input.webm +0 -0
  105. package/src/add-new-matroska-tracks.ts +0 -23
  106. package/src/boxes/iso-base-media/base-type.ts +0 -4
  107. package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +0 -68
  108. package/src/boxes/iso-base-media/esds/esds-descriptors.ts +0 -135
  109. package/src/boxes/iso-base-media/esds/esds.ts +0 -49
  110. package/src/boxes/iso-base-media/ftyp.ts +0 -39
  111. package/src/boxes/iso-base-media/get-sample-positions-from-track.ts +0 -69
  112. package/src/boxes/iso-base-media/make-track.ts +0 -116
  113. package/src/boxes/iso-base-media/mdat/mdat.ts +0 -140
  114. package/src/boxes/iso-base-media/mdhd.ts +0 -59
  115. package/src/boxes/iso-base-media/moov/moov.ts +0 -43
  116. package/src/boxes/iso-base-media/mvhd.ts +0 -114
  117. package/src/boxes/iso-base-media/process-box.ts +0 -748
  118. package/src/boxes/iso-base-media/stsd/av1c.ts +0 -19
  119. package/src/boxes/iso-base-media/stsd/avcc.ts +0 -36
  120. package/src/boxes/iso-base-media/stsd/colr.ts +0 -49
  121. package/src/boxes/iso-base-media/stsd/ctts.ts +0 -64
  122. package/src/boxes/iso-base-media/stsd/hvcc.ts +0 -32
  123. package/src/boxes/iso-base-media/stsd/keys.ts +0 -27
  124. package/src/boxes/iso-base-media/stsd/mebx.ts +0 -54
  125. package/src/boxes/iso-base-media/stsd/pasp.ts +0 -32
  126. package/src/boxes/iso-base-media/stsd/samples.ts +0 -359
  127. package/src/boxes/iso-base-media/stsd/stco.ts +0 -52
  128. package/src/boxes/iso-base-media/stsd/stsc.ts +0 -61
  129. package/src/boxes/iso-base-media/stsd/stsd.ts +0 -55
  130. package/src/boxes/iso-base-media/stsd/stss.ts +0 -47
  131. package/src/boxes/iso-base-media/stsd/stsz.ts +0 -75
  132. package/src/boxes/iso-base-media/stsd/stts.ts +0 -62
  133. package/src/boxes/iso-base-media/tfdt.ts +0 -37
  134. package/src/boxes/iso-base-media/tfhd.ts +0 -66
  135. package/src/boxes/iso-base-media/tkhd.ts +0 -150
  136. package/src/boxes/iso-base-media/to-date.ts +0 -9
  137. package/src/boxes/iso-base-media/trak/trak.ts +0 -43
  138. package/src/boxes/iso-base-media/trun.ts +0 -74
  139. package/src/boxes/iso-base-media/void-box.ts +0 -4
  140. package/src/boxes/webm/allowed-partial-segments.ts +0 -1
  141. package/src/boxes/webm/av1-codec-private.ts +0 -113
  142. package/src/boxes/webm/description.ts +0 -104
  143. package/src/boxes/webm/ebml.ts +0 -98
  144. package/src/boxes/webm/get-ready-tracks.ts +0 -36
  145. package/src/boxes/webm/get-sample-from-block.ts +0 -125
  146. package/src/boxes/webm/get-track.ts +0 -257
  147. package/src/boxes/webm/make-header.ts +0 -253
  148. package/src/boxes/webm/parse-ebml.ts +0 -259
  149. package/src/boxes/webm/parse-webm-header.ts +0 -18
  150. package/src/boxes/webm/segments/all-segments.ts +0 -888
  151. package/src/boxes/webm/segments/block-simple-block-flags.ts +0 -52
  152. package/src/boxes/webm/segments/parse-children.ts +0 -144
  153. package/src/boxes/webm/segments/track-entry.ts +0 -38
  154. package/src/boxes/webm/segments.ts +0 -147
  155. package/src/boxes/webm/traversal.ts +0 -45
  156. package/src/buffer-iterator.ts +0 -555
  157. package/src/create/cluster-segment.ts +0 -62
  158. package/src/create/cluster.ts +0 -64
  159. package/src/create/create-media.ts +0 -136
  160. package/src/create/make-duration-with-padding.ts +0 -15
  161. package/src/create/matroska-header.ts +0 -63
  162. package/src/create/matroska-info.ts +0 -30
  163. package/src/create/matroska-segment.ts +0 -10
  164. package/src/create/matroska-trackentry.ts +0 -325
  165. package/src/create/timescale.ts +0 -1
  166. package/src/get-audio-codec.ts +0 -270
  167. package/src/get-dimensions.ts +0 -47
  168. package/src/get-duration.ts +0 -103
  169. package/src/get-fps.ts +0 -113
  170. package/src/get-sample-aspect-ratio.ts +0 -204
  171. package/src/get-sample-positions.ts +0 -93
  172. package/src/get-tracks.ts +0 -147
  173. package/src/get-video-codec.ts +0 -117
  174. package/src/has-all-info.ts +0 -81
  175. package/src/index.ts +0 -18
  176. package/src/make-hvc1-codec-strings.ts +0 -55
  177. package/src/options.ts +0 -118
  178. package/src/parse-media.ts +0 -183
  179. package/src/parse-result.ts +0 -79
  180. package/src/parse-video.ts +0 -83
  181. package/src/parser-context.ts +0 -10
  182. package/src/parser-state.ts +0 -178
  183. package/src/readers/from-fetch.ts +0 -90
  184. package/src/readers/from-node.ts +0 -51
  185. package/src/readers/from-web-file.ts +0 -49
  186. package/src/readers/reader.ts +0 -15
  187. package/src/samples-from-moof.ts +0 -102
  188. package/src/test/aspect-ratio.test.ts +0 -42
  189. package/src/test/av1.test.ts +0 -108
  190. package/src/test/create-matroska.test.ts +0 -287
  191. package/src/test/duration.test.ts +0 -18
  192. package/src/test/keys.test.ts +0 -47
  193. package/src/test/matroska.test.ts +0 -463
  194. package/src/test/mvhd.test.ts +0 -94
  195. package/src/test/parse-esds.test.ts +0 -98
  196. package/src/test/parse-stco.test.ts +0 -61
  197. package/src/test/parse-stsc.test.ts +0 -104
  198. package/src/test/parse-stsz.test.ts +0 -57
  199. package/src/test/parse-stts.test.ts +0 -38
  200. package/src/test/parse-video.test.ts +0 -101
  201. package/src/test/parse-webm.test.ts +0 -17
  202. package/src/test/samples-from-moof.test.ts +0 -2496
  203. package/src/test/stream-local.test.ts +0 -743
  204. package/src/test/stream-remote.test.ts +0 -59
  205. package/src/test/stream-samples.test.ts +0 -181
  206. package/src/test/stsd.test.ts +0 -265
  207. package/src/test/tkhd.test.ts +0 -87
  208. package/src/traversal.ts +0 -528
  209. package/src/webcodec-sample-types.ts +0 -29
  210. package/src/writers/web-fs.ts +0 -50
  211. package/src/writers/writer.ts +0 -12
  212. package/tsconfig.json +0 -14
  213. package/tsconfig.tsbuildinfo +0 -1
@@ -1,81 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeMatroskaTracks = exports.makeMatroskaVideoTrackEntryBytes = exports.makeMatroskaAudioTrackEntryBytes = exports.makeMatroskaVideoBytes = exports.makeMatroskaColorBytes = void 0;
3
+ exports.makeMatroskaTracks = exports.makeMatroskaVideoTrackEntryBytes = exports.makeMatroskaAudioTrackEntryBytes = exports.makeMatroskaVideoBytes = void 0;
4
+ const color_1 = require("../boxes/webm/color");
4
5
  const make_header_1 = require("../boxes/webm/make-header");
5
- const makeMatroskaColorBytes = ({ transferChracteristics, matrixCoefficients, primaries, fullRange, }) => {
6
- const rangeValue = transferChracteristics && matrixCoefficients
7
- ? 3
8
- : fullRange === true
9
- ? 2
10
- : fullRange === false
11
- ? 1
12
- : 0;
13
- // https://datatracker.ietf.org/doc/draft-ietf-cellar-matroska/
14
- // 5.1.4.1.28.27
15
- const primariesValue = primaries === 'bt709'
16
- ? 1
17
- : primaries === 'smpte170m'
18
- ? 6
19
- : primaries === 'bt470bg'
20
- ? 5
21
- : 2;
22
- const transferChracteristicsValue = transferChracteristics === 'bt709'
23
- ? 1
24
- : transferChracteristics === 'smpte170m'
25
- ? 6
26
- : transferChracteristics === 'iec61966-2-1'
27
- ? 13
28
- : 2;
29
- if (matrixCoefficients === 'rgb') {
30
- throw new Error('Cannot encode Matroska in RGB');
31
- }
32
- const matrixCoefficientsValue = matrixCoefficients === 'bt709'
33
- ? 1
34
- : matrixCoefficients === 'bt470bg'
35
- ? 5
36
- : matrixCoefficients === 'smpte170m'
37
- ? 6
38
- : 2;
39
- return (0, make_header_1.makeMatroskaBytes)({
40
- type: 'Colour',
41
- minVintWidth: null,
42
- value: [
43
- {
44
- type: 'TransferCharacteristics',
45
- value: {
46
- value: transferChracteristicsValue,
47
- byteLength: null,
48
- },
49
- minVintWidth: null,
50
- },
51
- {
52
- type: 'MatrixCoefficients',
53
- value: {
54
- value: matrixCoefficientsValue,
55
- byteLength: null,
56
- },
57
- minVintWidth: null,
58
- },
59
- {
60
- type: 'Primaries',
61
- value: {
62
- value: primariesValue,
63
- byteLength: null,
64
- },
65
- minVintWidth: null,
66
- },
67
- {
68
- type: 'Range',
69
- value: {
70
- value: rangeValue,
71
- byteLength: null,
72
- },
73
- minVintWidth: null,
74
- },
75
- ],
76
- });
77
- };
78
- exports.makeMatroskaColorBytes = makeMatroskaColorBytes;
79
6
  const makeMatroskaVideoBytes = ({ color, width, height, }) => {
80
7
  return (0, make_header_1.makeMatroskaBytes)({
81
8
  type: 'Video',
@@ -106,13 +33,67 @@ const makeMatroskaVideoBytes = ({ color, width, height, }) => {
106
33
  },
107
34
  minVintWidth: null,
108
35
  },
109
- (0, exports.makeMatroskaColorBytes)(color),
36
+ (0, color_1.makeMatroskaColorBytes)(color),
110
37
  ],
111
38
  minVintWidth: null,
112
39
  });
113
40
  };
114
41
  exports.makeMatroskaVideoBytes = makeMatroskaVideoBytes;
115
- const makeMatroskaAudioTrackEntryBytes = ({ trackNumber, codecId, numberOfChannels: audioChannels, sampleRate, }) => {
42
+ const makeVideoCodecId = (codecId) => {
43
+ if (codecId === 'vp8') {
44
+ return 'V_VP8';
45
+ }
46
+ if (codecId === 'vp9') {
47
+ return 'V_VP9';
48
+ }
49
+ if (codecId === 'h264') {
50
+ return 'V_MPEG4/ISO/AVC';
51
+ }
52
+ if (codecId === 'av1') {
53
+ return 'V_AV1';
54
+ }
55
+ if (codecId === 'h265') {
56
+ return 'V_MPEGH/ISO/HEVC';
57
+ }
58
+ if (codecId === 'prores') {
59
+ return 'V_PRORES';
60
+ }
61
+ throw new Error(`Unknown codec: ${codecId}`);
62
+ };
63
+ const makeAudioCodecId = (codecId) => {
64
+ if (codecId === 'opus') {
65
+ return 'A_OPUS';
66
+ }
67
+ if (codecId === 'aac') {
68
+ return 'A_AAC';
69
+ }
70
+ if (codecId === 'mp3') {
71
+ return 'A_MPEG/L3';
72
+ }
73
+ if (codecId === 'vorbis') {
74
+ return 'A_VORBIS';
75
+ }
76
+ if (codecId === 'pcm-u8') {
77
+ return 'A_PCM/INT/LIT';
78
+ }
79
+ if (codecId === 'pcm-s16') {
80
+ return 'A_PCM/INT/LIT';
81
+ }
82
+ if (codecId === 'pcm-s24') {
83
+ return 'A_PCM/INT/LIT';
84
+ }
85
+ if (codecId === 'pcm-s32') {
86
+ return 'A_PCM/INT/LIT';
87
+ }
88
+ if (codecId === 'pcm-f32') {
89
+ return 'A_PCM/INT/LIT';
90
+ }
91
+ if (codecId === 'aiff') {
92
+ throw new Error('aiff is not supported in Matroska');
93
+ }
94
+ throw new Error(`Unknown codec: ${codecId}`);
95
+ };
96
+ const makeMatroskaAudioTrackEntryBytes = ({ trackNumber, codec, numberOfChannels, sampleRate, codecPrivate, }) => {
116
97
  return (0, make_header_1.makeMatroskaBytes)({
117
98
  type: 'TrackEntry',
118
99
  minVintWidth: null,
@@ -148,7 +129,7 @@ const makeMatroskaAudioTrackEntryBytes = ({ trackNumber, codecId, numberOfChanne
148
129
  },
149
130
  {
150
131
  type: 'CodecID',
151
- value: codecId,
132
+ value: makeAudioCodecId(codec),
152
133
  minVintWidth: null,
153
134
  },
154
135
  {
@@ -158,7 +139,7 @@ const makeMatroskaAudioTrackEntryBytes = ({ trackNumber, codecId, numberOfChanne
158
139
  type: 'Channels',
159
140
  minVintWidth: null,
160
141
  value: {
161
- value: audioChannels,
142
+ value: numberOfChannels,
162
143
  byteLength: null,
163
144
  },
164
145
  },
@@ -181,11 +162,18 @@ const makeMatroskaAudioTrackEntryBytes = ({ trackNumber, codecId, numberOfChanne
181
162
  ],
182
163
  minVintWidth: null,
183
164
  },
184
- ],
165
+ codecPrivate
166
+ ? {
167
+ type: 'CodecPrivate',
168
+ minVintWidth: null,
169
+ value: codecPrivate,
170
+ }
171
+ : null,
172
+ ].filter(Boolean),
185
173
  });
186
174
  };
187
175
  exports.makeMatroskaAudioTrackEntryBytes = makeMatroskaAudioTrackEntryBytes;
188
- const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, defaultDuration, trackNumber, codecId, }) => {
176
+ const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, trackNumber, codec, codecPrivate, }) => {
189
177
  return (0, make_header_1.makeMatroskaBytes)({
190
178
  type: 'TrackEntry',
191
179
  minVintWidth: null,
@@ -226,7 +214,7 @@ const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, defaultDuratio
226
214
  },
227
215
  {
228
216
  type: 'CodecID',
229
- value: codecId,
217
+ value: makeVideoCodecId(codec),
230
218
  minVintWidth: null,
231
219
  },
232
220
  {
@@ -237,20 +225,19 @@ const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, defaultDuratio
237
225
  },
238
226
  minVintWidth: null,
239
227
  },
240
- {
241
- type: 'DefaultDuration',
242
- value: {
243
- value: defaultDuration,
244
- byteLength: null,
245
- },
246
- minVintWidth: null,
247
- },
248
228
  (0, exports.makeMatroskaVideoBytes)({
249
229
  color,
250
230
  width,
251
231
  height,
252
232
  }),
253
- ],
233
+ codecPrivate
234
+ ? {
235
+ type: 'CodecPrivate',
236
+ minVintWidth: null,
237
+ value: codecPrivate,
238
+ }
239
+ : null,
240
+ ].filter(Boolean),
254
241
  });
255
242
  };
256
243
  exports.makeMatroskaVideoTrackEntryBytes = makeMatroskaVideoTrackEntryBytes;
@@ -259,8 +246,6 @@ const makeMatroskaTracks = (tracks) => {
259
246
  type: 'Tracks',
260
247
  value: tracks,
261
248
  minVintWidth: null,
262
- }),
263
- // TODO: That's too much padding
264
- 1000);
249
+ }), 500);
265
250
  };
266
251
  exports.makeMatroskaTracks = makeMatroskaTracks;
@@ -0,0 +1,12 @@
1
+ import type { AllParseMediaFields, Options, ParseMediaCallbacks, ParseMediaFields, ParseMediaResult } from './options';
2
+ import type { ParseResult } from './parse-result';
3
+ import type { ParserState } from './parser-state';
4
+ export declare const emitAvailableInfo: ({ hasInfo, parseResult, moreFields, state, returnValue, contentLength, name, }: {
5
+ hasInfo: Record<keyof Options<ParseMediaFields>, boolean>;
6
+ parseResult: ParseResult;
7
+ moreFields: ParseMediaCallbacks<AllParseMediaFields>;
8
+ state: ParserState;
9
+ returnValue: ParseMediaResult<AllParseMediaFields>;
10
+ contentLength: number | null;
11
+ name: string;
12
+ }) => void;
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emitAvailableInfo = void 0;
4
+ const get_audio_codec_1 = require("./get-audio-codec");
5
+ const get_container_1 = require("./get-container");
6
+ const get_dimensions_1 = require("./get-dimensions");
7
+ const get_duration_1 = require("./get-duration");
8
+ const get_fps_1 = require("./get-fps");
9
+ const get_tracks_1 = require("./get-tracks");
10
+ const get_video_codec_1 = require("./get-video-codec");
11
+ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValue, contentLength, name, }) => {
12
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
13
+ const keys = Object.keys(hasInfo);
14
+ for (const key of keys) {
15
+ if (key === 'boxes') {
16
+ if (hasInfo.boxes && returnValue.boxes === undefined) {
17
+ (_a = moreFields.onBoxes) === null || _a === void 0 ? void 0 : _a.call(moreFields, parseResult.segments);
18
+ returnValue.boxes = parseResult.segments;
19
+ }
20
+ continue;
21
+ }
22
+ if (key === 'durationInSeconds') {
23
+ if (hasInfo.durationInSeconds &&
24
+ returnValue.durationInSeconds === undefined) {
25
+ const durationInSeconds = (0, get_duration_1.getDuration)(parseResult.segments, state);
26
+ (_b = moreFields.onDurationInSeconds) === null || _b === void 0 ? void 0 : _b.call(moreFields, durationInSeconds);
27
+ returnValue.durationInSeconds = durationInSeconds;
28
+ }
29
+ continue;
30
+ }
31
+ if (key === 'dimensions') {
32
+ if (hasInfo.dimensions && returnValue.dimensions === undefined) {
33
+ const dimensionsQueried = (0, get_dimensions_1.getDimensions)(parseResult.segments, state);
34
+ const dimensions = {
35
+ height: dimensionsQueried.height,
36
+ width: dimensionsQueried.width,
37
+ };
38
+ (_c = moreFields.onDimensions) === null || _c === void 0 ? void 0 : _c.call(moreFields, dimensions);
39
+ returnValue.dimensions = dimensions;
40
+ }
41
+ continue;
42
+ }
43
+ if (key === 'unrotatedDimensions') {
44
+ if (returnValue.unrotatedDimensions === undefined &&
45
+ hasInfo.unrotatedDimensions) {
46
+ const dimensionsQueried = (0, get_dimensions_1.getDimensions)(parseResult.segments, state);
47
+ const unrotatedDimensions = {
48
+ height: dimensionsQueried.unrotatedHeight,
49
+ width: dimensionsQueried.unrotatedWidth,
50
+ };
51
+ (_d = moreFields.onUnrotatedDimensions) === null || _d === void 0 ? void 0 : _d.call(moreFields, unrotatedDimensions);
52
+ returnValue.unrotatedDimensions = unrotatedDimensions;
53
+ }
54
+ continue;
55
+ }
56
+ if (key === 'rotation') {
57
+ if (returnValue.rotation === undefined && hasInfo.rotation) {
58
+ const dimensionsQueried = (0, get_dimensions_1.getDimensions)(parseResult.segments, state);
59
+ const { rotation } = dimensionsQueried;
60
+ (_e = moreFields.onRotation) === null || _e === void 0 ? void 0 : _e.call(moreFields, rotation);
61
+ returnValue.rotation = rotation;
62
+ }
63
+ continue;
64
+ }
65
+ if (key === 'fps') {
66
+ if (returnValue.fps === undefined && hasInfo.fps) {
67
+ const fps = (0, get_fps_1.getFps)(parseResult.segments);
68
+ (_f = moreFields.onFps) === null || _f === void 0 ? void 0 : _f.call(moreFields, fps);
69
+ returnValue.fps = fps;
70
+ }
71
+ continue;
72
+ }
73
+ if (key === 'videoCodec') {
74
+ if (returnValue.videoCodec === undefined && hasInfo.videoCodec) {
75
+ const videoCodec = (0, get_video_codec_1.getVideoCodec)(parseResult.segments);
76
+ (_g = moreFields.onVideoCodec) === null || _g === void 0 ? void 0 : _g.call(moreFields, videoCodec);
77
+ returnValue.videoCodec = videoCodec;
78
+ }
79
+ continue;
80
+ }
81
+ if (key === 'audioCodec') {
82
+ if (returnValue.audioCodec === undefined && hasInfo.audioCodec) {
83
+ const audioCodec = (0, get_audio_codec_1.getAudioCodec)(parseResult.segments, state);
84
+ (_h = moreFields.onAudioCodec) === null || _h === void 0 ? void 0 : _h.call(moreFields, audioCodec);
85
+ returnValue.audioCodec = audioCodec;
86
+ }
87
+ continue;
88
+ }
89
+ if (key === 'tracks') {
90
+ if (hasInfo.tracks &&
91
+ returnValue.videoTracks === undefined &&
92
+ returnValue.audioTracks === undefined) {
93
+ const { videoTracks, audioTracks } = (0, get_tracks_1.getTracks)(parseResult.segments, state);
94
+ (_j = moreFields.onTracks) === null || _j === void 0 ? void 0 : _j.call(moreFields, { videoTracks, audioTracks });
95
+ returnValue.videoTracks = videoTracks;
96
+ returnValue.audioTracks = audioTracks;
97
+ }
98
+ continue;
99
+ }
100
+ if (key === 'internalStats') {
101
+ if (hasInfo.internalStats && returnValue.internalStats === undefined) {
102
+ const internalStats = state.getInternalStats();
103
+ (_k = moreFields.onInternalStats) === null || _k === void 0 ? void 0 : _k.call(moreFields, internalStats);
104
+ returnValue.internalStats = internalStats;
105
+ }
106
+ continue;
107
+ }
108
+ if (key === 'size') {
109
+ if (returnValue.size === undefined && hasInfo.size) {
110
+ (_l = moreFields.onSize) === null || _l === void 0 ? void 0 : _l.call(moreFields, contentLength);
111
+ returnValue.size = contentLength;
112
+ }
113
+ continue;
114
+ }
115
+ if (key === 'name') {
116
+ if (returnValue.name === undefined && hasInfo.name) {
117
+ (_m = moreFields.onName) === null || _m === void 0 ? void 0 : _m.call(moreFields, name);
118
+ returnValue.name = name;
119
+ }
120
+ continue;
121
+ }
122
+ if (key === 'container') {
123
+ if (returnValue.container === undefined && hasInfo.container) {
124
+ const container = (0, get_container_1.getContainer)(parseResult.segments);
125
+ (_o = moreFields.onContainer) === null || _o === void 0 ? void 0 : _o.call(moreFields, container);
126
+ returnValue.container = container;
127
+ }
128
+ continue;
129
+ }
130
+ throw new Error(`Unhandled key: ${key}`);
131
+ }
132
+ };
133
+ exports.emitAvailableInfo = emitAvailableInfo;
@@ -0,0 +1,57 @@
1
+ // src/writers/buffer.ts
2
+ var createContent = () => {
3
+ const buf = new ArrayBuffer(0, {
4
+ maxByteLength: 1e8
5
+ });
6
+ if (!buf.resize) {
7
+ throw new Error("Could not create buffer writer");
8
+ }
9
+ let data = new Uint8Array(buf);
10
+ const write = (newData) => {
11
+ const oldLength = buf.byteLength;
12
+ const newLength = oldLength + newData.byteLength;
13
+ buf.resize(newLength);
14
+ const newArray = new Uint8Array(buf);
15
+ newArray.set(newData, oldLength);
16
+ data = newArray;
17
+ };
18
+ const updateDataAt = (position, newData) => {
19
+ const newArray = new Uint8Array(buf);
20
+ newArray.set(newData, position);
21
+ data = newArray;
22
+ };
23
+ let writPromise = Promise.resolve();
24
+ let removed = false;
25
+ const writer = {
26
+ write: (arr) => {
27
+ writPromise = writPromise.then(() => write(arr));
28
+ return writPromise;
29
+ },
30
+ save: () => {
31
+ if (removed) {
32
+ return Promise.reject(new Error("Already called .remove() on the result"));
33
+ }
34
+ return Promise.resolve(new File([data], "hithere", {}));
35
+ },
36
+ remove() {
37
+ removed = true;
38
+ data = new Uint8Array(0);
39
+ return Promise.resolve();
40
+ },
41
+ getWrittenByteCount: () => buf.byteLength,
42
+ updateDataAt: (position, newData) => {
43
+ writPromise = writPromise.then(() => updateDataAt(position, newData));
44
+ return writPromise;
45
+ },
46
+ waitForFinish: async () => {
47
+ await writPromise;
48
+ }
49
+ };
50
+ return Promise.resolve(writer);
51
+ };
52
+ var bufferWriter = {
53
+ createContent
54
+ };
55
+ export {
56
+ bufferWriter
57
+ };
@@ -0,0 +1,72 @@
1
+ // src/readers/from-fetch.ts
2
+ var fetchReader = {
3
+ read: async (src, range, signal) => {
4
+ if (typeof src !== "string") {
5
+ throw new Error("src must be a string when using `fetchReader`");
6
+ }
7
+ const resolvedUrl = typeof window !== "undefined" && typeof window.location !== "undefined" ? new URL(src, window.location.origin).toString() : src;
8
+ if (!resolvedUrl.startsWith("https://") && !resolvedUrl.startsWith("blob:") && !resolvedUrl.startsWith("http://")) {
9
+ return Promise.reject(new Error(resolvedUrl + " is not a URL - needs to start with http:// or https:// or blob:. If you want to read a local file, pass `reader: nodeReader` to parseMedia()."));
10
+ }
11
+ const controller = new AbortController;
12
+ const res = await fetch(resolvedUrl, {
13
+ headers: range === null ? {} : typeof range === "number" ? {
14
+ Range: `bytes=${range}`
15
+ } : {
16
+ Range: `bytes=${`${range[0]}-${range[1]}`}`
17
+ },
18
+ signal: controller.signal,
19
+ cache: "no-store"
20
+ });
21
+ signal?.addEventListener("abort", () => {
22
+ controller.abort();
23
+ }, { once: true });
24
+ if (res.status.toString().startsWith("4") || res.status.toString().startsWith("5")) {
25
+ throw new Error(`Server returned status code ${res.status} for ${src}`);
26
+ }
27
+ if (!res.body) {
28
+ throw new Error("No body");
29
+ }
30
+ const length = res.headers.get("content-length");
31
+ const contentLength = length === null ? null : parseInt(length, 10);
32
+ const contentDisposition = res.headers.get("content-disposition");
33
+ const name = contentDisposition?.match(/filename="([^"]+)"/)?.[1];
34
+ const fallbackName = src.split("/").pop();
35
+ const reader = res.body.getReader();
36
+ if (signal) {
37
+ signal.addEventListener("abort", () => {
38
+ reader.cancel().catch(() => {
39
+ });
40
+ }, { once: true });
41
+ }
42
+ return {
43
+ reader: {
44
+ reader,
45
+ abort: () => {
46
+ controller.abort();
47
+ }
48
+ },
49
+ contentLength,
50
+ name: name ?? fallbackName
51
+ };
52
+ },
53
+ getLength: async (src) => {
54
+ if (typeof src !== "string") {
55
+ throw new Error("src must be a string when using `fetchReader`");
56
+ }
57
+ const res = await fetch(src, {
58
+ method: "HEAD"
59
+ });
60
+ if (!res.body) {
61
+ throw new Error("No body");
62
+ }
63
+ const length = res.headers.get("content-length");
64
+ if (!length) {
65
+ throw new Error("No content-length");
66
+ }
67
+ return parseInt(length, 10);
68
+ }
69
+ };
70
+ export {
71
+ fetchReader
72
+ };
@@ -0,0 +1,48 @@
1
+ // src/readers/from-node.ts
2
+ import {createReadStream} from "fs";
3
+ import {stat} from "node:fs/promises";
4
+ import {Readable} from "stream";
5
+ var nodeReader = {
6
+ read: async (src, range, signal) => {
7
+ if (typeof src !== "string") {
8
+ throw new Error("src must be a string when using `nodeReader`");
9
+ }
10
+ const controller = new AbortController;
11
+ const stream = createReadStream(src, {
12
+ start: range === null ? 0 : typeof range === "number" ? range : range[0],
13
+ end: range === null ? Infinity : typeof range === "number" ? Infinity : range[1],
14
+ signal: controller.signal
15
+ });
16
+ signal?.addEventListener("abort", () => {
17
+ controller.abort();
18
+ }, { once: true });
19
+ const stats = await stat(src);
20
+ const reader = Readable.toWeb(stream).getReader();
21
+ if (signal) {
22
+ signal.addEventListener("abort", () => {
23
+ reader.cancel().catch(() => {
24
+ });
25
+ }, { once: true });
26
+ }
27
+ return {
28
+ reader: {
29
+ reader,
30
+ abort: () => {
31
+ controller.abort();
32
+ }
33
+ },
34
+ contentLength: stats.size,
35
+ name: src.split("/").pop()
36
+ };
37
+ },
38
+ getLength: async (src) => {
39
+ if (typeof src !== "string") {
40
+ throw new Error("src must be a string when using `nodeReader`");
41
+ }
42
+ const stats = await stat(src);
43
+ return stats.size;
44
+ }
45
+ };
46
+ export {
47
+ nodeReader
48
+ };
@@ -0,0 +1,48 @@
1
+ // src/readers/from-web-file.ts
2
+ var webFileReader = {
3
+ read: (file, range, signal) => {
4
+ if (typeof file === "string") {
5
+ throw new Error("`inputTypeFileReader` only supports `File` objects");
6
+ }
7
+ const part = range === null ? file : typeof range === "number" ? file.slice(range) : file.slice(range[0], range[1]);
8
+ const reader = new FileReader;
9
+ reader.readAsArrayBuffer(file);
10
+ const controller = new AbortController;
11
+ if (controller) {
12
+ controller.signal.addEventListener("abort", () => {
13
+ reader.abort();
14
+ }, { once: true });
15
+ }
16
+ if (signal) {
17
+ signal.addEventListener("abort", () => {
18
+ controller.abort();
19
+ }, { once: true });
20
+ }
21
+ return new Promise((resolve, reject) => {
22
+ reader.onload = () => {
23
+ resolve({
24
+ reader: {
25
+ reader: part.stream().getReader(),
26
+ abort() {
27
+ controller.abort();
28
+ }
29
+ },
30
+ contentLength: file.size,
31
+ name: file.name
32
+ });
33
+ };
34
+ reader.onerror = (error) => {
35
+ reject(error);
36
+ };
37
+ });
38
+ },
39
+ getLength: (src) => {
40
+ if (typeof src === "string") {
41
+ throw new Error("`inputTypeFileReader` only supports `File` objects");
42
+ }
43
+ return Promise.resolve(src.size);
44
+ }
45
+ };
46
+ export {
47
+ webFileReader
48
+ };