@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
package/dist/traversal.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasSkippedMdatProcessing = exports.getCodecSegment = exports.getTrackId = exports.getTrackTypeSegment = exports.getDisplayHeightSegment = exports.getDisplayWidthSegment = exports.getHeightSegment = exports.getWidthSegment = exports.getPrivateData = exports.getBitDepth = exports.getNumberOfChannels = exports.getSampleRate = exports.getAudioSegment = exports.getVideoSegment = exports.getTimescaleSegment = exports.getTracksSegment = exports.getClusterSegment = exports.getTrunBoxes = exports.getTfhdBox = exports.getTfdtBox = exports.getStssBox = exports.getStscBox = exports.getStszBox = exports.getCttsBox = exports.getSttsBox = exports.getStcoBox = exports.getVideoDescriptors = exports.getStsdBox = exports.getStblBox = exports.getMdhdBox = exports.getMdiaBox = exports.getTkhdBox = exports.getTraks = exports.getMvhdBox = exports.getMoofBox = exports.getMoovBox = exports.getFtypBox = void 0;
3
+ exports.hasSkippedMdatProcessing = exports.getTrunBoxes = exports.getTfhdBox = exports.getTfdtBox = exports.getStssBox = exports.getStscBox = exports.getStszBox = exports.getCttsBox = exports.getSttsBox = exports.getStcoBox = exports.getVideoDescriptors = exports.getStsdBox = exports.getStblBox = exports.getMdhdBox = exports.getMdiaBox = exports.getTkhdBox = exports.getTraks = exports.getMvhdBox = exports.getMoofBox = exports.getMoovBox = exports.getFtypBox = void 0;
4
4
  const getFtypBox = (segments) => {
5
5
  const ftypBox = segments.find((s) => s.type === 'ftyp-box');
6
6
  if (!ftypBox || ftypBox.type !== 'ftyp-box') {
@@ -188,163 +188,6 @@ const getTrunBoxes = (segment) => {
188
188
  return trunBoxes;
189
189
  };
190
190
  exports.getTrunBoxes = getTrunBoxes;
191
- const getClusterSegment = (segment) => {
192
- const clusterSegment = segment.value.find((b) => b.type === 'Cluster');
193
- return clusterSegment !== null && clusterSegment !== void 0 ? clusterSegment : null;
194
- };
195
- exports.getClusterSegment = getClusterSegment;
196
- const getTracksSegment = (segment) => {
197
- const tracksSegment = segment.value.find((b) => b.type === 'Tracks');
198
- if (!tracksSegment || tracksSegment.type !== 'Tracks') {
199
- return null;
200
- }
201
- return tracksSegment;
202
- };
203
- exports.getTracksSegment = getTracksSegment;
204
- const getTimescaleSegment = (segment) => {
205
- const infoSegment = segment.value.find((b) => b.type === 'Info');
206
- if (!infoSegment || infoSegment.type !== 'Info') {
207
- return null;
208
- }
209
- const timescale = infoSegment.value.find((b) => b.type === 'TimestampScale');
210
- if (!timescale || timescale.type !== 'TimestampScale') {
211
- return null;
212
- }
213
- return timescale;
214
- };
215
- exports.getTimescaleSegment = getTimescaleSegment;
216
- const getVideoSegment = (track) => {
217
- const videoSegment = track.value.find((b) => b.type === 'Video');
218
- if (!videoSegment || videoSegment.type !== 'Video') {
219
- return null;
220
- }
221
- return videoSegment !== null && videoSegment !== void 0 ? videoSegment : null;
222
- };
223
- exports.getVideoSegment = getVideoSegment;
224
- const getAudioSegment = (track) => {
225
- const audioSegment = track.value.find((b) => b.type === 'Audio');
226
- if (!audioSegment || audioSegment.type !== 'Audio') {
227
- return null;
228
- }
229
- return audioSegment !== null && audioSegment !== void 0 ? audioSegment : null;
230
- };
231
- exports.getAudioSegment = getAudioSegment;
232
- const getSampleRate = (track) => {
233
- const audioSegment = (0, exports.getAudioSegment)(track);
234
- if (!audioSegment) {
235
- return null;
236
- }
237
- const samplingFrequency = audioSegment.value.find((b) => b.type === 'SamplingFrequency');
238
- if (!samplingFrequency || samplingFrequency.type !== 'SamplingFrequency') {
239
- return null;
240
- }
241
- return samplingFrequency.value.value;
242
- };
243
- exports.getSampleRate = getSampleRate;
244
- const getNumberOfChannels = (track) => {
245
- const audioSegment = (0, exports.getAudioSegment)(track);
246
- if (!audioSegment) {
247
- throw new Error('Could not find audio segment');
248
- }
249
- const channels = audioSegment.value.find((b) => b.type === 'Channels');
250
- if (!channels || channels.type !== 'Channels') {
251
- return 1;
252
- }
253
- return channels.value.value;
254
- };
255
- exports.getNumberOfChannels = getNumberOfChannels;
256
- const getBitDepth = (track) => {
257
- const audioSegment = (0, exports.getAudioSegment)(track);
258
- if (!audioSegment) {
259
- return null;
260
- }
261
- const bitDepth = audioSegment.value.find((b) => b.type === 'BitDepth');
262
- if (!bitDepth || bitDepth.type !== 'BitDepth') {
263
- return null;
264
- }
265
- return bitDepth.value.value;
266
- };
267
- exports.getBitDepth = getBitDepth;
268
- const getPrivateData = (track) => {
269
- const privateData = track.value.find((b) => b.type === 'CodecPrivate');
270
- if (!privateData || privateData.type !== 'CodecPrivate') {
271
- return null;
272
- }
273
- return privateData.value;
274
- };
275
- exports.getPrivateData = getPrivateData;
276
- const getWidthSegment = (track) => {
277
- const videoSegment = (0, exports.getVideoSegment)(track);
278
- if (!videoSegment) {
279
- return null;
280
- }
281
- const width = videoSegment.value.find((b) => b.type === 'PixelWidth');
282
- if (!width || width.type !== 'PixelWidth') {
283
- return null;
284
- }
285
- return width;
286
- };
287
- exports.getWidthSegment = getWidthSegment;
288
- const getHeightSegment = (track) => {
289
- const videoSegment = (0, exports.getVideoSegment)(track);
290
- if (!videoSegment) {
291
- return null;
292
- }
293
- const height = videoSegment.value.find((b) => b.type === 'PixelHeight');
294
- if (!height || height.type !== 'PixelHeight') {
295
- return null;
296
- }
297
- return height;
298
- };
299
- exports.getHeightSegment = getHeightSegment;
300
- const getDisplayWidthSegment = (track) => {
301
- const videoSegment = (0, exports.getVideoSegment)(track);
302
- if (!videoSegment) {
303
- return null;
304
- }
305
- const displayWidth = videoSegment.value.find((b) => b.type === 'DisplayWidth');
306
- if (!displayWidth || displayWidth.type !== 'DisplayWidth') {
307
- return null;
308
- }
309
- return displayWidth;
310
- };
311
- exports.getDisplayWidthSegment = getDisplayWidthSegment;
312
- const getDisplayHeightSegment = (track) => {
313
- const videoSegment = (0, exports.getVideoSegment)(track);
314
- if (!videoSegment) {
315
- return null;
316
- }
317
- const displayHeight = videoSegment.value.find((b) => b.type === 'DisplayHeight');
318
- if (!displayHeight || displayHeight.type !== 'DisplayHeight') {
319
- return null;
320
- }
321
- return displayHeight;
322
- };
323
- exports.getDisplayHeightSegment = getDisplayHeightSegment;
324
- const getTrackTypeSegment = (track) => {
325
- const trackType = track.value.find((b) => b.type === 'TrackType');
326
- if (!trackType || trackType.type !== 'TrackType') {
327
- return null;
328
- }
329
- return trackType;
330
- };
331
- exports.getTrackTypeSegment = getTrackTypeSegment;
332
- const getTrackId = (track) => {
333
- const trackId = track.value.find((b) => b.type === 'TrackNumber');
334
- if (!trackId || trackId.type !== 'TrackNumber') {
335
- throw new Error('Expected track number segment');
336
- }
337
- return trackId.value.value;
338
- };
339
- exports.getTrackId = getTrackId;
340
- const getCodecSegment = (track) => {
341
- const codec = track.value.find((b) => b.type === 'CodecID');
342
- if (!codec || codec.type !== 'CodecID') {
343
- return null;
344
- }
345
- return codec;
346
- };
347
- exports.getCodecSegment = getCodecSegment;
348
191
  const hasSkippedMdatProcessing = (anySegment) => {
349
192
  const mdat = anySegment.find((b) => b.type === 'mdat-box');
350
193
  if (!mdat) {
@@ -0,0 +1,3 @@
1
+ type Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T;
2
+ export declare function truthy<T>(value: T): value is Truthy<T>;
3
+ export {};
package/dist/truthy.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.truthy = void 0;
4
+ function truthy(value) {
5
+ return Boolean(value);
6
+ }
7
+ exports.truthy = truthy;
@@ -0,0 +1,2 @@
1
+ import type { WriterInterface } from './writer';
2
+ export declare const bufferWriter: WriterInterface;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bufferWriter = void 0;
4
+ const createContent = () => {
5
+ const buf = new ArrayBuffer(0, {
6
+ // TODO: Educate that the buffer is limited to 100MB
7
+ maxByteLength: 100000000,
8
+ });
9
+ if (!buf.resize) {
10
+ throw new Error('Could not create buffer writer');
11
+ }
12
+ let data = new Uint8Array(buf);
13
+ const write = (newData) => {
14
+ const oldLength = buf.byteLength;
15
+ const newLength = oldLength + newData.byteLength;
16
+ buf.resize(newLength);
17
+ const newArray = new Uint8Array(buf);
18
+ newArray.set(newData, oldLength);
19
+ data = newArray;
20
+ };
21
+ const updateDataAt = (position, newData) => {
22
+ const newArray = new Uint8Array(buf);
23
+ newArray.set(newData, position);
24
+ data = newArray;
25
+ };
26
+ let writPromise = Promise.resolve();
27
+ let removed = false;
28
+ const writer = {
29
+ write: (arr) => {
30
+ writPromise = writPromise.then(() => write(arr));
31
+ return writPromise;
32
+ },
33
+ save: () => {
34
+ if (removed) {
35
+ return Promise.reject(new Error('Already called .remove() on the result'));
36
+ }
37
+ // TODO: Unhardcode name
38
+ return Promise.resolve(new File([data], 'hithere', {}));
39
+ },
40
+ remove() {
41
+ removed = true;
42
+ data = new Uint8Array(0);
43
+ return Promise.resolve();
44
+ },
45
+ getWrittenByteCount: () => buf.byteLength,
46
+ updateDataAt: (position, newData) => {
47
+ writPromise = writPromise.then(() => updateDataAt(position, newData));
48
+ return writPromise;
49
+ },
50
+ waitForFinish: async () => {
51
+ await writPromise;
52
+ },
53
+ };
54
+ return Promise.resolve(writer);
55
+ };
56
+ exports.bufferWriter = {
57
+ createContent,
58
+ };
@@ -1,2 +1,3 @@
1
1
  import type { WriterInterface } from './writer';
2
2
  export declare const webFsWriter: WriterInterface;
3
+ export declare const canUseWebFsWriter: () => Promise<boolean>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.webFsWriter = void 0;
3
+ exports.canUseWebFsWriter = exports.webFsWriter = void 0;
4
4
  const createContent = async () => {
5
5
  const directoryHandle = await navigator.storage.getDirectory();
6
6
  const filename = `media-parser-${Math.random().toString().replace('0.', '')}.webm`;
@@ -9,36 +9,60 @@ const createContent = async () => {
9
9
  });
10
10
  const writable = await fileHandle.createWritable();
11
11
  let written = 0;
12
+ let writPromise = Promise.resolve();
13
+ const write = async (arr) => {
14
+ await writable.write(arr);
15
+ written += arr.byteLength;
16
+ };
17
+ const updateDataAt = async (position, data) => {
18
+ await writable.seek(position);
19
+ await writable.write(data);
20
+ await writable.seek(written);
21
+ };
22
+ const remove = async () => {
23
+ await directoryHandle.removeEntry(filename, {
24
+ recursive: true,
25
+ });
26
+ };
12
27
  const writer = {
13
- write: async (arr) => {
14
- await writable.write(arr);
15
- written += arr.byteLength;
28
+ write: (arr) => {
29
+ writPromise = writPromise.then(() => write(arr));
30
+ return writPromise;
16
31
  },
17
32
  save: async () => {
18
- await writable.close();
19
- const picker = await window.showSaveFilePicker({
20
- suggestedName: `${Math.random().toString().replace('.', '')}.webm`,
21
- });
33
+ try {
34
+ await writable.close();
35
+ }
36
+ catch (err) {
37
+ // Ignore, could already be closed
38
+ }
22
39
  const newHandle = await directoryHandle.getFileHandle(filename, {
23
40
  create: true,
24
41
  });
25
42
  const newFile = await newHandle.getFile();
26
- const pickerWriteable = await picker.createWritable();
27
- const stream = newFile.stream();
28
- await stream.pipeTo(pickerWriteable);
29
- await directoryHandle.removeEntry(filename, {
30
- recursive: true,
31
- });
43
+ return newFile;
32
44
  },
33
45
  getWrittenByteCount: () => written,
34
- updateDataAt: async (position, vint) => {
35
- await writable.seek(position);
36
- await writable.write(vint);
37
- await writable.seek(written);
46
+ updateDataAt: (position, data) => {
47
+ writPromise = writPromise.then(() => updateDataAt(position, data));
48
+ return writPromise;
38
49
  },
50
+ waitForFinish: async () => {
51
+ await writPromise;
52
+ },
53
+ remove,
39
54
  };
40
55
  return writer;
41
56
  };
42
57
  exports.webFsWriter = {
43
58
  createContent,
44
59
  };
60
+ const canUseWebFsWriter = async () => {
61
+ const directoryHandle = await navigator.storage.getDirectory();
62
+ const fileHandle = await directoryHandle.getFileHandle('remotion-probe-web-fs-support', {
63
+ create: true,
64
+ });
65
+ const canUse = fileHandle.createWritable !== undefined;
66
+ return canUse;
67
+ };
68
+ exports.canUseWebFsWriter = canUseWebFsWriter;
@@ -1,8 +1,10 @@
1
1
  export type Writer = {
2
2
  write: (arr: Uint8Array) => Promise<void>;
3
- save: () => Promise<void>;
3
+ save: () => Promise<File>;
4
4
  getWrittenByteCount: () => number;
5
- updateDataAt: (position: number, vint: Uint8Array) => Promise<void>;
5
+ updateDataAt: (position: number, data: Uint8Array) => Promise<void>;
6
+ waitForFinish: () => Promise<void>;
7
+ remove: () => Promise<void>;
6
8
  };
7
9
  type CreateContent = () => Promise<Writer>;
8
10
  export type WriterInterface = {
package/fetch.js ADDED
@@ -0,0 +1,2 @@
1
+ // For backwards compatibility when you use Metro
2
+ module.exports = require('./dist/readers/from-fetch');
package/node.js ADDED
@@ -0,0 +1,2 @@
1
+ // For backwards compatibility when you use Metro
2
+ module.exports = require('./dist/readers/from-node');
package/package.json CHANGED
@@ -3,12 +3,12 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/media-parser"
4
4
  },
5
5
  "name": "@remotion/media-parser",
6
- "version": "4.0.209",
6
+ "version": "4.0.210",
7
7
  "main": "dist/index.js",
8
8
  "sideEffects": false,
9
9
  "devDependencies": {
10
10
  "@types/wicg-file-system-access": "2023.10.5",
11
- "@remotion/renderer": "4.0.209"
11
+ "@remotion/renderer": "4.0.210"
12
12
  },
13
13
  "publishConfig": {
14
14
  "access": "public"
@@ -17,11 +17,42 @@
17
17
  "url": "https://github.com/remotion-dev/remotion/issues"
18
18
  },
19
19
  "exports": {
20
- ".": "./dist/index.js",
21
- "./node": "./dist/readers/from-node.js",
22
- "./fetch": "./dist/readers/from-fetch.js",
23
- "./web-file": "./dist/readers/from-web-file.js",
24
- "./web-fs": "./dist/writers/web-fs.js",
20
+ ".": {
21
+ "require": "./dist/index.js",
22
+ "module": "./dist/esm/index.mjs",
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/esm/index.mjs"
25
+ },
26
+ "./node": {
27
+ "require": "./dist/readers/from-node.js",
28
+ "module": "./dist/esm/from-node.mjs",
29
+ "types": "./dist/readers/from-node.d.ts",
30
+ "import": "./dist/esm/from-node.mjs"
31
+ },
32
+ "./fetch": {
33
+ "require": "./dist/readers/from-fetch.js",
34
+ "module": "./dist/esm/from-fetch.mjs",
35
+ "types": "./dist/readers/from-fetch.d.ts",
36
+ "import": "./dist/esm/from-fetch.mjs"
37
+ },
38
+ "./web-file": {
39
+ "require": "./dist/readers/from-web-file.js",
40
+ "module": "./dist/esm/from-web-file.mjs",
41
+ "types": "./dist/readers/from-web-file.d.ts",
42
+ "import": "./dist/esm/from-web-file.mjs"
43
+ },
44
+ "./web-fs": {
45
+ "require": "./dist/writers/web-fs.js",
46
+ "module": "./dist/esm/web-fs.mjs",
47
+ "types": "./dist/writers/web-fs.d.ts",
48
+ "import": "./dist/esm/web-fs.mjs"
49
+ },
50
+ "./buffer": {
51
+ "require": "./dist/writers/buffer.js",
52
+ "module": "./dist/esm/buffer.mjs",
53
+ "types": "./dist/writers/buffer.d.ts",
54
+ "import": "./dist/esm/buffer.mjs"
55
+ },
25
56
  "./package.json": "./package.json"
26
57
  },
27
58
  "typesVersions": {
@@ -37,6 +68,9 @@
37
68
  ],
38
69
  "web-fs": [
39
70
  "dist/writers/web-fs.d.ts"
71
+ ],
72
+ "buffer": [
73
+ "dist/writers/buffer.d.ts"
40
74
  ]
41
75
  }
42
76
  },
@@ -55,6 +89,7 @@
55
89
  "formatting": "prettier src --check",
56
90
  "lint": "eslint src --ext ts,tsx",
57
91
  "test": "bun test src/test",
58
- "watch": "tsc -w"
92
+ "watch": "tsc -w",
93
+ "build": "bun --env-file=../.env.bundle bundle.ts"
59
94
  }
60
95
  }
package/web-file.js ADDED
@@ -0,0 +1,2 @@
1
+ // For backwards compatibility when you use Metro
2
+ module.exports = require('./dist/readers/from-web-file');
package/web-fs.js ADDED
@@ -0,0 +1,2 @@
1
+ // For backwards compatibility when you use Metro
2
+ module.exports = require('./dist/writers/web-fs');
package/.eslintrc DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "extends": "@jonny/eslint-config",
3
- "rules": {
4
- "no-bitwise": "off",
5
- "@typescript-eslint/no-use-before-define": "off",
6
- "no-console": "error",
7
- },
8
- }
package/input.webm DELETED
Binary file
@@ -1,23 +0,0 @@
1
- import type {Track} from './get-tracks';
2
- import type {ParserContext} from './parser-context';
3
- import type {ParserState} from './parser-state';
4
-
5
- export const registerTrack = async ({
6
- state,
7
- options,
8
- track,
9
- }: {
10
- state: ParserState;
11
- options: ParserContext;
12
- track: Track;
13
- }) => {
14
- if (track.type === 'video' && options.onVideoTrack) {
15
- const callback = await options.onVideoTrack(track);
16
- await state.registerVideoSampleCallback(track.trackId, callback ?? null);
17
- }
18
-
19
- if (track.type === 'audio' && options.onAudioTrack) {
20
- const callback = await options.onAudioTrack(track);
21
- await state.registerAudioSampleCallback(track.trackId, callback ?? null);
22
- }
23
- };
@@ -1,4 +0,0 @@
1
- export interface BaseBox {
2
- boxSize: number;
3
- offset: number;
4
- }
@@ -1,68 +0,0 @@
1
- import type {BufferIterator} from '../../../buffer-iterator';
2
-
3
- type UnknownDecoderSpecificConfig = {
4
- type: 'unknown-decoder-specific-config';
5
- };
6
-
7
- type AudioSpecificConfig = {
8
- type: 'audio-specific-config';
9
- audioObjectType: number;
10
- samplingFrequencyIndex: number;
11
- channelConfiguration: number;
12
- asBytes: Uint8Array;
13
- };
14
-
15
- export type DecoderSpecificConfig =
16
- | UnknownDecoderSpecificConfig
17
- | AudioSpecificConfig;
18
-
19
- export const parseDecoderSpecificConfig = (
20
- iterator: BufferIterator,
21
- ): DecoderSpecificConfig => {
22
- const layerTag = iterator.getUint8();
23
- const layerSize = iterator.getPaddedFourByteNumber();
24
-
25
- const start = iterator.counter.getOffset();
26
-
27
- if (layerTag !== 5) {
28
- iterator.discard(layerSize);
29
- return {
30
- type: 'unknown-decoder-specific-config',
31
- };
32
- }
33
-
34
- // https://csclub.uwaterloo.ca/~pbarfuss/ISO14496-3-2009.pdf
35
- // 1.6.2.1 AudioSpecificConfig
36
-
37
- const bytes = iterator.getSlice(layerSize);
38
- iterator.counter.decrement(layerSize);
39
-
40
- iterator.startReadingBits();
41
- const audioObjectType = iterator.getBits(5);
42
- const samplingFrequencyIndex = iterator.getBits(4);
43
- if (samplingFrequencyIndex === 0xf) {
44
- iterator.getBits(24);
45
- }
46
-
47
- const channelConfiguration = iterator.getBits(4);
48
- iterator.stopReadingBits();
49
- const read = iterator.counter.getOffset() - start;
50
- if (read < layerSize) {
51
- iterator.discard(layerSize - read);
52
- }
53
-
54
- // Working around Chrome bug
55
- // https://issues.chromium.org/issues/360083330#comment5
56
- const patchedAsBytes =
57
- bytes.byteLength === 2 && bytes[0] === 17 && bytes[1] === 136
58
- ? new Uint8Array([17, 144])
59
- : bytes;
60
-
61
- return {
62
- type: 'audio-specific-config',
63
- audioObjectType,
64
- samplingFrequencyIndex,
65
- channelConfiguration,
66
- asBytes: patchedAsBytes,
67
- };
68
- };