@remotion/media-parser 4.0.208 → 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 (215) 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 +5 -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/buffer-iterator.js +6 -0
  39. package/dist/create/cluster-segment.d.ts +1 -1
  40. package/dist/create/cluster-segment.js +3 -5
  41. package/dist/create/cluster.d.ts +13 -0
  42. package/dist/create/cluster.js +54 -0
  43. package/dist/create/create-media.d.ts +4 -2
  44. package/dist/create/create-media.js +87 -47
  45. package/dist/create/cues.d.ts +0 -0
  46. package/dist/create/cues.js +1 -0
  47. package/dist/create/make-duration-with-padding.d.ts +1 -0
  48. package/dist/create/make-duration-with-padding.js +15 -0
  49. package/dist/create/matroska-cues.d.ts +6 -0
  50. package/dist/create/matroska-cues.js +50 -0
  51. package/dist/create/matroska-info.d.ts +1 -2
  52. package/dist/create/matroska-info.js +3 -11
  53. package/dist/create/matroska-seek.d.ts +6 -0
  54. package/dist/create/matroska-seek.js +32 -0
  55. package/dist/create/matroska-segment.d.ts +1 -0
  56. package/dist/create/matroska-segment.js +3 -2
  57. package/dist/create/matroska-trackentry.d.ts +9 -14
  58. package/dist/create/matroska-trackentry.js +79 -94
  59. package/dist/create/timescale.d.ts +1 -0
  60. package/dist/create/timescale.js +4 -0
  61. package/dist/emit-available-info.d.ts +12 -0
  62. package/dist/emit-available-info.js +133 -0
  63. package/dist/esm/buffer.mjs +57 -0
  64. package/dist/esm/from-fetch.mjs +72 -0
  65. package/dist/esm/from-node.mjs +48 -0
  66. package/dist/esm/from-web-file.mjs +48 -0
  67. package/dist/esm/index.mjs +6689 -0
  68. package/dist/esm/web-fs.mjs +67 -0
  69. package/dist/get-audio-codec.d.ts +5 -5
  70. package/dist/get-audio-codec.js +41 -57
  71. package/dist/get-container.d.ts +4 -0
  72. package/dist/get-container.js +26 -0
  73. package/dist/get-duration.js +1 -1
  74. package/dist/get-fps.js +1 -1
  75. package/dist/get-sample-aspect-ratio.d.ts +1 -1
  76. package/dist/get-sample-aspect-ratio.js +19 -19
  77. package/dist/get-tracks.d.ts +13 -0
  78. package/dist/get-tracks.js +8 -8
  79. package/dist/get-video-codec.d.ts +5 -2
  80. package/dist/get-video-codec.js +111 -21
  81. package/dist/has-all-info.d.ts +2 -2
  82. package/dist/has-all-info.js +23 -9
  83. package/dist/index.d.ts +3 -1
  84. package/dist/options.d.ts +97 -30
  85. package/dist/parse-media.js +43 -62
  86. package/dist/parse-video.d.ts +2 -1
  87. package/dist/parse-video.js +3 -1
  88. package/dist/parser-state.js +1 -2
  89. package/dist/readers/from-fetch.js +24 -4
  90. package/dist/readers/from-node.js +13 -3
  91. package/dist/readers/from-web-file.js +14 -2
  92. package/dist/readers/reader.d.ts +6 -1
  93. package/dist/samples-from-moof.js +1 -1
  94. package/dist/traversal.d.ts +0 -21
  95. package/dist/traversal.js +1 -158
  96. package/dist/truthy.d.ts +3 -0
  97. package/dist/truthy.js +7 -0
  98. package/dist/writers/buffer.d.ts +2 -0
  99. package/dist/writers/buffer.js +58 -0
  100. package/dist/writers/web-fs.d.ts +1 -0
  101. package/dist/writers/web-fs.js +42 -18
  102. package/dist/writers/writer.d.ts +4 -2
  103. package/fetch.js +2 -0
  104. package/node.js +2 -0
  105. package/package.json +43 -8
  106. package/web-file.js +2 -0
  107. package/web-fs.js +2 -0
  108. package/.eslintrc +0 -8
  109. package/input.webm +0 -0
  110. package/src/add-new-matroska-tracks.ts +0 -23
  111. package/src/boxes/iso-base-media/base-type.ts +0 -4
  112. package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +0 -68
  113. package/src/boxes/iso-base-media/esds/esds-descriptors.ts +0 -135
  114. package/src/boxes/iso-base-media/esds/esds.ts +0 -49
  115. package/src/boxes/iso-base-media/ftyp.ts +0 -39
  116. package/src/boxes/iso-base-media/get-sample-positions-from-track.ts +0 -69
  117. package/src/boxes/iso-base-media/make-track.ts +0 -116
  118. package/src/boxes/iso-base-media/mdat/mdat.ts +0 -140
  119. package/src/boxes/iso-base-media/mdhd.ts +0 -59
  120. package/src/boxes/iso-base-media/moov/moov.ts +0 -43
  121. package/src/boxes/iso-base-media/mvhd.ts +0 -114
  122. package/src/boxes/iso-base-media/process-box.ts +0 -748
  123. package/src/boxes/iso-base-media/stsd/av1c.ts +0 -19
  124. package/src/boxes/iso-base-media/stsd/avcc.ts +0 -36
  125. package/src/boxes/iso-base-media/stsd/colr.ts +0 -49
  126. package/src/boxes/iso-base-media/stsd/ctts.ts +0 -64
  127. package/src/boxes/iso-base-media/stsd/hvcc.ts +0 -32
  128. package/src/boxes/iso-base-media/stsd/keys.ts +0 -27
  129. package/src/boxes/iso-base-media/stsd/mebx.ts +0 -54
  130. package/src/boxes/iso-base-media/stsd/pasp.ts +0 -32
  131. package/src/boxes/iso-base-media/stsd/samples.ts +0 -359
  132. package/src/boxes/iso-base-media/stsd/stco.ts +0 -52
  133. package/src/boxes/iso-base-media/stsd/stsc.ts +0 -61
  134. package/src/boxes/iso-base-media/stsd/stsd.ts +0 -55
  135. package/src/boxes/iso-base-media/stsd/stss.ts +0 -47
  136. package/src/boxes/iso-base-media/stsd/stsz.ts +0 -75
  137. package/src/boxes/iso-base-media/stsd/stts.ts +0 -62
  138. package/src/boxes/iso-base-media/tfdt.ts +0 -37
  139. package/src/boxes/iso-base-media/tfhd.ts +0 -66
  140. package/src/boxes/iso-base-media/tkhd.ts +0 -150
  141. package/src/boxes/iso-base-media/to-date.ts +0 -9
  142. package/src/boxes/iso-base-media/trak/trak.ts +0 -43
  143. package/src/boxes/iso-base-media/trun.ts +0 -74
  144. package/src/boxes/iso-base-media/void-box.ts +0 -4
  145. package/src/boxes/webm/allowed-partial-segments.ts +0 -1
  146. package/src/boxes/webm/av1-codec-private.ts +0 -113
  147. package/src/boxes/webm/description.ts +0 -104
  148. package/src/boxes/webm/ebml.ts +0 -98
  149. package/src/boxes/webm/get-ready-tracks.ts +0 -36
  150. package/src/boxes/webm/get-sample-from-block.ts +0 -125
  151. package/src/boxes/webm/get-track.ts +0 -257
  152. package/src/boxes/webm/make-header.ts +0 -253
  153. package/src/boxes/webm/parse-ebml.ts +0 -255
  154. package/src/boxes/webm/parse-webm-header.ts +0 -18
  155. package/src/boxes/webm/segments/all-segments.ts +0 -888
  156. package/src/boxes/webm/segments/block-simple-block-flags.ts +0 -52
  157. package/src/boxes/webm/segments/parse-children.ts +0 -144
  158. package/src/boxes/webm/segments/track-entry.ts +0 -38
  159. package/src/boxes/webm/segments.ts +0 -147
  160. package/src/boxes/webm/traversal.ts +0 -45
  161. package/src/buffer-iterator.ts +0 -548
  162. package/src/create/cluster-segment.ts +0 -62
  163. package/src/create/create-media.ts +0 -172
  164. package/src/create/matroska-header.ts +0 -63
  165. package/src/create/matroska-info.ts +0 -46
  166. package/src/create/matroska-segment.ts +0 -10
  167. package/src/create/matroska-trackentry.ts +0 -325
  168. package/src/get-audio-codec.ts +0 -270
  169. package/src/get-dimensions.ts +0 -47
  170. package/src/get-duration.ts +0 -103
  171. package/src/get-fps.ts +0 -113
  172. package/src/get-sample-aspect-ratio.ts +0 -204
  173. package/src/get-sample-positions.ts +0 -93
  174. package/src/get-tracks.ts +0 -147
  175. package/src/get-video-codec.ts +0 -117
  176. package/src/has-all-info.ts +0 -81
  177. package/src/index.ts +0 -18
  178. package/src/make-hvc1-codec-strings.ts +0 -55
  179. package/src/options.ts +0 -118
  180. package/src/parse-media.ts +0 -183
  181. package/src/parse-result.ts +0 -79
  182. package/src/parse-video.ts +0 -83
  183. package/src/parser-context.ts +0 -10
  184. package/src/parser-state.ts +0 -178
  185. package/src/readers/from-fetch.ts +0 -90
  186. package/src/readers/from-node.ts +0 -51
  187. package/src/readers/from-web-file.ts +0 -49
  188. package/src/readers/reader.ts +0 -15
  189. package/src/samples-from-moof.ts +0 -102
  190. package/src/test/aspect-ratio.test.ts +0 -42
  191. package/src/test/av1.test.ts +0 -108
  192. package/src/test/create-matroska.test.ts +0 -287
  193. package/src/test/duration.test.ts +0 -18
  194. package/src/test/keys.test.ts +0 -47
  195. package/src/test/matroska.test.ts +0 -463
  196. package/src/test/mvhd.test.ts +0 -94
  197. package/src/test/parse-esds.test.ts +0 -98
  198. package/src/test/parse-stco.test.ts +0 -61
  199. package/src/test/parse-stsc.test.ts +0 -104
  200. package/src/test/parse-stsz.test.ts +0 -57
  201. package/src/test/parse-stts.test.ts +0 -38
  202. package/src/test/parse-video.test.ts +0 -101
  203. package/src/test/parse-webm.test.ts +0 -17
  204. package/src/test/samples-from-moof.test.ts +0 -2496
  205. package/src/test/stream-local.test.ts +0 -743
  206. package/src/test/stream-remote.test.ts +0 -59
  207. package/src/test/stream-samples.test.ts +0 -181
  208. package/src/test/stsd.test.ts +0 -265
  209. package/src/test/tkhd.test.ts +0 -87
  210. package/src/traversal.ts +0 -528
  211. package/src/webcodec-sample-types.ts +0 -29
  212. package/src/writers/web-fs.ts +0 -50
  213. package/src/writers/writer.ts +0 -12
  214. package/tsconfig.json +0 -14
  215. 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 @@
1
+ export declare const CREATE_TIME_SCALE = 1000000;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CREATE_TIME_SCALE = void 0;
4
+ exports.CREATE_TIME_SCALE = 1000000;
@@ -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
+ };