@remotion/media-parser 4.0.209 → 4.0.211

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 (290) 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 +13 -4
  5. package/dist/boxes/iso-base-media/mdat/mdat.js +20 -5
  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 +66 -12
  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 +39 -0
  24. package/dist/boxes/iso-base-media/traversal.js +201 -0
  25. package/dist/boxes/webm/color.d.ts +4 -0
  26. package/dist/boxes/webm/color.js +127 -0
  27. package/dist/boxes/webm/description.js +1 -1
  28. package/dist/boxes/webm/ebml.d.ts +1 -1
  29. package/dist/boxes/webm/get-ready-tracks.js +3 -3
  30. package/dist/boxes/webm/get-sample-from-block.js +1 -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/segments/parse-children.js +6 -0
  37. package/dist/boxes/webm/traversal.d.ts +26 -1
  38. package/dist/boxes/webm/traversal.js +214 -1
  39. package/dist/buffer-iterator.d.ts +4 -1
  40. package/dist/buffer-iterator.js +31 -5
  41. package/dist/create/cluster-segment.js +0 -2
  42. package/dist/create/cluster.d.ts +16 -2
  43. package/dist/create/cluster.js +17 -10
  44. package/dist/create/create-media.d.ts +4 -2
  45. package/dist/create/create-media.js +101 -22
  46. package/dist/create/make-duration-with-padding.d.ts +1 -1
  47. package/dist/create/make-duration-with-padding.js +3 -3
  48. package/dist/create/matroska-cues.d.ts +6 -0
  49. package/dist/create/matroska-cues.js +49 -0
  50. package/dist/create/matroska-info.js +1 -1
  51. package/dist/create/matroska-seek.d.ts +6 -0
  52. package/dist/create/matroska-seek.js +32 -0
  53. package/dist/create/matroska-segment.d.ts +1 -0
  54. package/dist/create/matroska-segment.js +3 -2
  55. package/dist/create/matroska-trackentry.d.ts +9 -14
  56. package/dist/create/matroska-trackentry.js +79 -102
  57. package/dist/emit-available-info.d.ts +12 -0
  58. package/dist/emit-available-info.js +133 -0
  59. package/dist/esm/buffer.mjs +57 -0
  60. package/dist/esm/from-fetch.mjs +107 -0
  61. package/dist/esm/from-node.mjs +49 -0
  62. package/dist/esm/from-web-file.mjs +49 -0
  63. package/dist/esm/index.mjs +6822 -0
  64. package/dist/esm/web-fs.mjs +67 -0
  65. package/dist/get-audio-codec.d.ts +5 -5
  66. package/dist/get-audio-codec.js +44 -57
  67. package/dist/get-container.d.ts +4 -0
  68. package/dist/get-container.js +26 -0
  69. package/dist/get-duration.js +1 -1
  70. package/dist/get-fps.js +1 -1
  71. package/dist/get-sample-aspect-ratio.d.ts +1 -1
  72. package/dist/get-sample-aspect-ratio.js +19 -19
  73. package/dist/get-tracks.d.ts +13 -0
  74. package/dist/get-tracks.js +8 -8
  75. package/dist/get-video-codec.d.ts +5 -2
  76. package/dist/get-video-codec.js +111 -21
  77. package/dist/has-all-info.d.ts +2 -2
  78. package/dist/has-all-info.js +23 -9
  79. package/dist/index.d.ts +4 -1
  80. package/dist/options.d.ts +97 -30
  81. package/dist/parse-media.js +59 -69
  82. package/dist/parse-video.d.ts +2 -1
  83. package/dist/parse-video.js +3 -1
  84. package/dist/parser-context.d.ts +1 -0
  85. package/dist/parser-state.js +1 -2
  86. package/dist/readers/from-fetch.d.ts +12 -0
  87. package/dist/readers/from-fetch.js +83 -17
  88. package/dist/readers/from-node.js +14 -3
  89. package/dist/readers/from-web-file.js +15 -2
  90. package/dist/readers/reader.d.ts +7 -1
  91. package/dist/samples-from-moof.js +1 -1
  92. package/dist/truthy.d.ts +3 -0
  93. package/dist/truthy.js +7 -0
  94. package/dist/writers/buffer.d.ts +2 -0
  95. package/dist/writers/buffer.js +58 -0
  96. package/dist/writers/web-fs.d.ts +1 -0
  97. package/dist/writers/web-fs.js +42 -18
  98. package/dist/writers/writer.d.ts +4 -2
  99. package/fetch.js +2 -0
  100. package/node.js +2 -0
  101. package/package.json +43 -8
  102. package/web-file.js +2 -0
  103. package/web-fs.js +2 -0
  104. package/.eslintrc +0 -8
  105. package/dist/av1-codec-string.d.ts +0 -3
  106. package/dist/av1-codec-string.js +0 -91
  107. package/dist/boxes/iso-base-media/ftype.d.ts +0 -9
  108. package/dist/boxes/iso-base-media/ftype.js +0 -31
  109. package/dist/boxes/iso-base-media/stsd/avcc-hvcc.d.ts +0 -20
  110. package/dist/boxes/iso-base-media/stsd/avcc-hvcc.js +0 -73
  111. package/dist/boxes/iso-base-media/stts/stts.d.ts +0 -15
  112. package/dist/boxes/iso-base-media/stts/stts.js +0 -35
  113. package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.d.ts +0 -14
  114. package/dist/boxes/webm/bitstream/av1/bitstream-frame-header.js +0 -67
  115. package/dist/boxes/webm/bitstream/av1/bitstream-frame.d.ts +0 -11
  116. package/dist/boxes/webm/bitstream/av1/bitstream-frame.js +0 -14
  117. package/dist/boxes/webm/bitstream/av1/chroma-sample-position.d.ts +0 -6
  118. package/dist/boxes/webm/bitstream/av1/chroma-sample-position.js +0 -9
  119. package/dist/boxes/webm/bitstream/av1/color-config.d.ts +0 -16
  120. package/dist/boxes/webm/bitstream/av1/color-config.js +0 -103
  121. package/dist/boxes/webm/bitstream/av1/color-primaries.d.ts +0 -14
  122. package/dist/boxes/webm/bitstream/av1/color-primaries.js +0 -17
  123. package/dist/boxes/webm/bitstream/av1/decoder-model-info.d.ts +0 -9
  124. package/dist/boxes/webm/bitstream/av1/decoder-model-info.js +0 -17
  125. package/dist/boxes/webm/bitstream/av1/frame.d.ts +0 -0
  126. package/dist/boxes/webm/bitstream/av1/frame.js +0 -1
  127. package/dist/boxes/webm/bitstream/av1/header-segment.d.ts +0 -51
  128. package/dist/boxes/webm/bitstream/av1/header-segment.js +0 -183
  129. package/dist/boxes/webm/bitstream/av1/matrix-coefficients.d.ts +0 -17
  130. package/dist/boxes/webm/bitstream/av1/matrix-coefficients.js +0 -20
  131. package/dist/boxes/webm/bitstream/av1/operating-parameters-info.d.ts +0 -10
  132. package/dist/boxes/webm/bitstream/av1/operating-parameters-info.js +0 -15
  133. package/dist/boxes/webm/bitstream/av1/temporal-point-info.d.ts +0 -5
  134. package/dist/boxes/webm/bitstream/av1/temporal-point-info.js +0 -8
  135. package/dist/boxes/webm/bitstream/av1/timing-info.d.ts +0 -8
  136. package/dist/boxes/webm/bitstream/av1/timing-info.js +0 -20
  137. package/dist/boxes/webm/bitstream/av1/transfer-characteristics.d.ts +0 -21
  138. package/dist/boxes/webm/bitstream/av1/transfer-characteristics.js +0 -24
  139. package/dist/boxes/webm/bitstream/av1/uvlc.d.ts +0 -2
  140. package/dist/boxes/webm/bitstream/av1/uvlc.js +0 -20
  141. package/dist/boxes/webm/bitstream/av1.d.ts +0 -20
  142. package/dist/boxes/webm/bitstream/av1.js +0 -118
  143. package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.d.ts +0 -0
  144. package/dist/boxes/webm/bitstream/h264/get-h264-descriptor.js +0 -1
  145. package/dist/boxes/webm/segments/duration.d.ts +0 -6
  146. package/dist/boxes/webm/segments/duration.js +0 -19
  147. package/dist/boxes/webm/segments/info.d.ts +0 -9
  148. package/dist/boxes/webm/segments/info.js +0 -22
  149. package/dist/boxes/webm/segments/main.d.ts +0 -5
  150. package/dist/boxes/webm/segments/main.js +0 -2
  151. package/dist/boxes/webm/segments/muxing.d.ts +0 -6
  152. package/dist/boxes/webm/segments/muxing.js +0 -11
  153. package/dist/boxes/webm/segments/seek-head.d.ts +0 -9
  154. package/dist/boxes/webm/segments/seek-head.js +0 -22
  155. package/dist/boxes/webm/segments/seek-position.d.ts +0 -6
  156. package/dist/boxes/webm/segments/seek-position.js +0 -11
  157. package/dist/boxes/webm/segments/seek.d.ts +0 -13
  158. package/dist/boxes/webm/segments/seek.js +0 -35
  159. package/dist/boxes/webm/segments/timestamp-scale.d.ts +0 -6
  160. package/dist/boxes/webm/segments/timestamp-scale.js +0 -11
  161. package/dist/boxes/webm/segments/tracks.d.ts +0 -8
  162. package/dist/boxes/webm/segments/tracks.js +0 -21
  163. package/dist/boxes/webm/segments/unknown.d.ts +0 -6
  164. package/dist/boxes/webm/segments/unknown.js +0 -11
  165. package/dist/boxes/webm/segments/void.d.ts +0 -6
  166. package/dist/boxes/webm/segments/void.js +0 -11
  167. package/dist/boxes/webm/segments/writing.d.ts +0 -6
  168. package/dist/boxes/webm/segments/writing.js +0 -11
  169. package/dist/boxes/webm/tracks.d.ts +0 -8
  170. package/dist/boxes/webm/tracks.js +0 -21
  171. package/dist/combine-uint8array.d.ts +0 -1
  172. package/dist/combine-uint8array.js +0 -13
  173. package/dist/from-web.d.ts +0 -2
  174. package/dist/from-web.js +0 -45
  175. package/dist/get-video-metadata.d.ts +0 -2
  176. package/dist/get-video-metadata.js +0 -44
  177. package/dist/read-and-increment-offset.d.ts +0 -28
  178. package/dist/read-and-increment-offset.js +0 -177
  179. package/dist/understand-vorbis.d.ts +0 -1
  180. package/dist/understand-vorbis.js +0 -12
  181. package/input.webm +0 -0
  182. package/src/add-new-matroska-tracks.ts +0 -23
  183. package/src/boxes/iso-base-media/base-type.ts +0 -4
  184. package/src/boxes/iso-base-media/esds/decoder-specific-config.ts +0 -68
  185. package/src/boxes/iso-base-media/esds/esds-descriptors.ts +0 -135
  186. package/src/boxes/iso-base-media/esds/esds.ts +0 -49
  187. package/src/boxes/iso-base-media/ftyp.ts +0 -39
  188. package/src/boxes/iso-base-media/get-sample-positions-from-track.ts +0 -69
  189. package/src/boxes/iso-base-media/make-track.ts +0 -116
  190. package/src/boxes/iso-base-media/mdat/mdat.ts +0 -140
  191. package/src/boxes/iso-base-media/mdhd.ts +0 -59
  192. package/src/boxes/iso-base-media/moov/moov.ts +0 -43
  193. package/src/boxes/iso-base-media/mvhd.ts +0 -114
  194. package/src/boxes/iso-base-media/process-box.ts +0 -748
  195. package/src/boxes/iso-base-media/stsd/av1c.ts +0 -19
  196. package/src/boxes/iso-base-media/stsd/avcc.ts +0 -36
  197. package/src/boxes/iso-base-media/stsd/colr.ts +0 -49
  198. package/src/boxes/iso-base-media/stsd/ctts.ts +0 -64
  199. package/src/boxes/iso-base-media/stsd/hvcc.ts +0 -32
  200. package/src/boxes/iso-base-media/stsd/keys.ts +0 -27
  201. package/src/boxes/iso-base-media/stsd/mebx.ts +0 -54
  202. package/src/boxes/iso-base-media/stsd/pasp.ts +0 -32
  203. package/src/boxes/iso-base-media/stsd/samples.ts +0 -359
  204. package/src/boxes/iso-base-media/stsd/stco.ts +0 -52
  205. package/src/boxes/iso-base-media/stsd/stsc.ts +0 -61
  206. package/src/boxes/iso-base-media/stsd/stsd.ts +0 -55
  207. package/src/boxes/iso-base-media/stsd/stss.ts +0 -47
  208. package/src/boxes/iso-base-media/stsd/stsz.ts +0 -75
  209. package/src/boxes/iso-base-media/stsd/stts.ts +0 -62
  210. package/src/boxes/iso-base-media/tfdt.ts +0 -37
  211. package/src/boxes/iso-base-media/tfhd.ts +0 -66
  212. package/src/boxes/iso-base-media/tkhd.ts +0 -150
  213. package/src/boxes/iso-base-media/to-date.ts +0 -9
  214. package/src/boxes/iso-base-media/trak/trak.ts +0 -43
  215. package/src/boxes/iso-base-media/trun.ts +0 -74
  216. package/src/boxes/iso-base-media/void-box.ts +0 -4
  217. package/src/boxes/webm/allowed-partial-segments.ts +0 -1
  218. package/src/boxes/webm/av1-codec-private.ts +0 -113
  219. package/src/boxes/webm/description.ts +0 -104
  220. package/src/boxes/webm/ebml.ts +0 -98
  221. package/src/boxes/webm/get-ready-tracks.ts +0 -36
  222. package/src/boxes/webm/get-sample-from-block.ts +0 -125
  223. package/src/boxes/webm/get-track.ts +0 -257
  224. package/src/boxes/webm/make-header.ts +0 -253
  225. package/src/boxes/webm/parse-ebml.ts +0 -259
  226. package/src/boxes/webm/parse-webm-header.ts +0 -18
  227. package/src/boxes/webm/segments/all-segments.ts +0 -888
  228. package/src/boxes/webm/segments/block-simple-block-flags.ts +0 -52
  229. package/src/boxes/webm/segments/parse-children.ts +0 -144
  230. package/src/boxes/webm/segments/track-entry.ts +0 -38
  231. package/src/boxes/webm/segments.ts +0 -147
  232. package/src/boxes/webm/traversal.ts +0 -45
  233. package/src/buffer-iterator.ts +0 -555
  234. package/src/create/cluster-segment.ts +0 -62
  235. package/src/create/cluster.ts +0 -64
  236. package/src/create/create-media.ts +0 -136
  237. package/src/create/make-duration-with-padding.ts +0 -15
  238. package/src/create/matroska-header.ts +0 -63
  239. package/src/create/matroska-info.ts +0 -30
  240. package/src/create/matroska-segment.ts +0 -10
  241. package/src/create/matroska-trackentry.ts +0 -325
  242. package/src/create/timescale.ts +0 -1
  243. package/src/get-audio-codec.ts +0 -270
  244. package/src/get-dimensions.ts +0 -47
  245. package/src/get-duration.ts +0 -103
  246. package/src/get-fps.ts +0 -113
  247. package/src/get-sample-aspect-ratio.ts +0 -204
  248. package/src/get-sample-positions.ts +0 -93
  249. package/src/get-tracks.ts +0 -147
  250. package/src/get-video-codec.ts +0 -117
  251. package/src/has-all-info.ts +0 -81
  252. package/src/index.ts +0 -18
  253. package/src/make-hvc1-codec-strings.ts +0 -55
  254. package/src/options.ts +0 -118
  255. package/src/parse-media.ts +0 -183
  256. package/src/parse-result.ts +0 -79
  257. package/src/parse-video.ts +0 -83
  258. package/src/parser-context.ts +0 -10
  259. package/src/parser-state.ts +0 -178
  260. package/src/readers/from-fetch.ts +0 -90
  261. package/src/readers/from-node.ts +0 -51
  262. package/src/readers/from-web-file.ts +0 -49
  263. package/src/readers/reader.ts +0 -15
  264. package/src/samples-from-moof.ts +0 -102
  265. package/src/test/aspect-ratio.test.ts +0 -42
  266. package/src/test/av1.test.ts +0 -108
  267. package/src/test/create-matroska.test.ts +0 -287
  268. package/src/test/duration.test.ts +0 -18
  269. package/src/test/keys.test.ts +0 -47
  270. package/src/test/matroska.test.ts +0 -463
  271. package/src/test/mvhd.test.ts +0 -94
  272. package/src/test/parse-esds.test.ts +0 -98
  273. package/src/test/parse-stco.test.ts +0 -61
  274. package/src/test/parse-stsc.test.ts +0 -104
  275. package/src/test/parse-stsz.test.ts +0 -57
  276. package/src/test/parse-stts.test.ts +0 -38
  277. package/src/test/parse-video.test.ts +0 -101
  278. package/src/test/parse-webm.test.ts +0 -17
  279. package/src/test/samples-from-moof.test.ts +0 -2496
  280. package/src/test/stream-local.test.ts +0 -743
  281. package/src/test/stream-remote.test.ts +0 -59
  282. package/src/test/stream-samples.test.ts +0 -181
  283. package/src/test/stsd.test.ts +0 -265
  284. package/src/test/tkhd.test.ts +0 -87
  285. package/src/traversal.ts +0 -528
  286. package/src/webcodec-sample-types.ts +0 -29
  287. package/src/writers/web-fs.ts +0 -50
  288. package/src/writers/writer.ts +0 -12
  289. package/tsconfig.json +0 -14
  290. package/tsconfig.tsbuildinfo +0 -1
@@ -13,16 +13,29 @@ exports.webFileReader = {
13
13
  : file.slice(range[0], range[1]);
14
14
  const reader = new FileReader();
15
15
  reader.readAsArrayBuffer(file);
16
+ const controller = new AbortController();
17
+ if (controller) {
18
+ controller.signal.addEventListener('abort', () => {
19
+ reader.abort();
20
+ }, { once: true });
21
+ }
16
22
  if (signal) {
17
23
  signal.addEventListener('abort', () => {
18
- reader.abort();
24
+ controller.abort();
19
25
  }, { once: true });
20
26
  }
21
27
  return new Promise((resolve, reject) => {
22
28
  reader.onload = () => {
23
29
  resolve({
24
- reader: part.stream().getReader(),
30
+ reader: {
31
+ reader: part.stream().getReader(),
32
+ abort() {
33
+ controller.abort();
34
+ },
35
+ },
25
36
  contentLength: file.size,
37
+ name: file.name,
38
+ supportsContentRange: true,
26
39
  });
27
40
  };
28
41
  reader.onerror = (error) => {
@@ -1,6 +1,12 @@
1
- type ReadResult = {
1
+ type Reader = {
2
2
  reader: ReadableStreamDefaultReader<Uint8Array>;
3
+ abort: () => void;
4
+ };
5
+ type ReadResult = {
6
+ reader: Reader;
3
7
  contentLength: number | null;
8
+ name: string;
9
+ supportsContentRange: boolean;
4
10
  };
5
11
  type ReadContent = (src: string | File, range: [number, number] | number | null, signal: AbortSignal | undefined) => Promise<ReadResult>;
6
12
  type GetLength = (src: string | File) => Promise<number>;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getSamplesFromMoof = void 0;
4
- const traversal_1 = require("./traversal");
4
+ const traversal_1 = require("./boxes/iso-base-media/traversal");
5
5
  const getSamplesFromTraf = (trafSegment, moofOffset) => {
6
6
  var _a, _b, _c, _d, _e, _f;
7
7
  if (trafSegment.type !== 'regular-box' || trafSegment.boxType !== 'traf') {
@@ -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.211",
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.211"
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
- }
@@ -1,3 +0,0 @@
1
- import type { ColorParameterBox } from './boxes/iso-base-media/stsd/colr';
2
- import type { Av1BitstreamHeaderSegment } from './boxes/webm/bitstream/av1/header-segment';
3
- export declare const constructAv1CodecString: (av1BitstreamHeader: Av1BitstreamHeaderSegment, colrAtom: ColorParameterBox | null) => string;
@@ -1,91 +0,0 @@
1
- "use strict";
2
- // https://aomediacodec.github.io/av1-isobmff/#codecsparam
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.constructAv1CodecString = void 0;
5
- const constructAv1CodecString = (av1BitstreamHeader, colrAtom) => {
6
- let str = 'av01.';
7
- // Profile
8
- str += av1BitstreamHeader.seq_profile;
9
- str += '.';
10
- // Level
11
- // The level parameter value SHALL equal the first level value indicated by seq_level_idx in the Sequence Header OBU
12
- str += av1BitstreamHeader.seq_level[0].seq_level_idx
13
- .toString()
14
- .padStart(2, '0');
15
- // Tier
16
- // The tier parameter value SHALL be equal to M when the first seq_tier value in the Sequence Header OBU is equal to 0, and H when it is equal to 1
17
- str += av1BitstreamHeader.seq_level[0].seq_tier ? 'H' : 'M';
18
- str += '.';
19
- // bitDepth
20
- // The bitDepth parameter value SHALL equal the value of BitDepth variable as defined in [AV1] derived from the Sequence Header OBU
21
- str += av1BitstreamHeader.color_config.bitDepth.toString().padStart(2, '0');
22
- str += '.';
23
- // monochrome
24
- // The monochrome parameter value, represented by a single digit decimal, SHALL equal the value of mono_chrome in the Sequence Header OBU
25
- str += av1BitstreamHeader.color_config.mono_chrome ? '1' : '0';
26
- str += '.';
27
- // The chromaSubsampling parameter value, represented by a three-digit decimal,
28
- // SHALL have its first digit equal to subsampling_x
29
- str += av1BitstreamHeader.color_config.subsampling_x ? '1' : '0';
30
- // and its second digit equal to subsampling_y.
31
- str += av1BitstreamHeader.color_config.subsampling_y ? '1' : '0';
32
- // If both subsampling_x and subsampling_y are set to 1, then the third digit SHALL be equal to chroma_sample_position, otherwise it SHALL be set to 0
33
- str +=
34
- av1BitstreamHeader.color_config.subsampling_x &&
35
- av1BitstreamHeader.color_config.subsampling_y
36
- ? av1BitstreamHeader.color_config.chroma_sample_position === 1
37
- ? '1'
38
- : '0'
39
- : '0';
40
- str += '.';
41
- // The colorPrimaries, transferCharacteristics, matrixCoefficients, and videoFullRangeFlag parameter values are set as follows:
42
- // If a colr box with colour_type set to nclx is present, the colorPrimaries, transferCharacteristics, matrixCoefficients, and videoFullRangeFlag parameter values SHALL equal the values of matching fields in the colr box.
43
- if (colrAtom) {
44
- str += colrAtom.primaries.toString().padStart(2, '0');
45
- str += '.';
46
- str += colrAtom.transfer.toString().padStart(2, '0');
47
- str += '.';
48
- str += colrAtom.matrixIndex.toString().padStart(2, '0');
49
- str += '.';
50
- str += colrAtom.fullRangeFlag ? '1' : '0';
51
- }
52
- // Otherwise, a colr box with colour_type set to nclx is absent.
53
- // If the color_description_present_flag is set to 1 in the Sequence Header OBU, the colorPrimaries, transferCharacteristics, and matrixCoefficients parameter values SHALL equal the values of matching fields in the Sequence Header OBU.
54
- else if (av1BitstreamHeader.color_config.color_description_present_flag) {
55
- str += av1BitstreamHeader.color_config.color_primaries
56
- .toString()
57
- .padStart(2, '0');
58
- str += '.';
59
- str += av1BitstreamHeader.color_config.transfer_characteristics
60
- .toString()
61
- .padStart(2, '0');
62
- str += '.';
63
- str += av1BitstreamHeader.color_config.matrix_coefficients
64
- .toString()
65
- .padStart(2, '0');
66
- str += '.';
67
- // The videoFullRangeFlag parameter value SHALL equal the color_range flag in the Sequence Header OBU.
68
- str += av1BitstreamHeader.color_config.color_range ? '1' : '0';
69
- }
70
- else {
71
- // Otherwise, the color_description_present_flag is set to 0 in the Sequence Header OBU. The colorPrimaries, transferCharacteristics, and matrixCoefficients parameter values SHOULD be set to the default values below.
72
- // colorPrimaries 01 (ITU-R BT.709)
73
- str += '01';
74
- str += '.';
75
- // transferCharacteristics 01 (ITU-R BT.709)
76
- str += '01';
77
- str += '.';
78
- // matrixCoefficients 00 (ITU-R BT.709)
79
- str += '01';
80
- str += '.';
81
- // videoFullRangeFlag 0 (studio swing representation)
82
- str += '0';
83
- }
84
- // If the codecs parameter string ends with ".0.110.01.01.01.0" (containing all the default values below), that trailing part of the string SHOULD be omitted.
85
- const suffix = '.0.110.01.01.01.0';
86
- if (str.endsWith(suffix)) {
87
- str = str.slice(0, -suffix.length);
88
- }
89
- return str;
90
- };
91
- exports.constructAv1CodecString = constructAv1CodecString;
@@ -1,9 +0,0 @@
1
- import type { BaseBox } from './base-type';
2
- export interface FtypBox extends BaseBox {
3
- type: 'ftyp-box';
4
- majorBrand: string;
5
- minorVersion: number;
6
- compatibleBrands: string[];
7
- }
8
- export declare const fourByteToNumber: (data: ArrayBuffer, from: number) => number;
9
- export declare const parseFtyp: (data: ArrayBuffer, offset: number) => FtypBox;
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseFtyp = exports.fourByteToNumber = void 0;
4
- const fourByteToNumber = (data, from) => {
5
- const view = new DataView(data);
6
- return ((view.getUint8(from + 0) << 24) |
7
- (view.getUint8(from + 1) << 16) |
8
- (view.getUint8(from + 2) << 8) |
9
- view.getUint8(from + 3));
10
- };
11
- exports.fourByteToNumber = fourByteToNumber;
12
- const parseFtyp = (data, offset) => {
13
- const majorBrand = new TextDecoder().decode(data.slice(8, 12)).trim();
14
- const minorVersion = (0, exports.fourByteToNumber)(data, 12);
15
- const rest = data.slice(16);
16
- const types = rest.byteLength / 4;
17
- const compatibleBrands = [];
18
- for (let i = 0; i < types; i++) {
19
- const fourBytes = rest.slice(i * 4, i * 4 + 4);
20
- compatibleBrands.push(new TextDecoder().decode(fourBytes).trim());
21
- }
22
- return {
23
- type: 'ftyp-box',
24
- majorBrand,
25
- minorVersion,
26
- compatibleBrands,
27
- offset,
28
- boxSize: data.byteLength,
29
- };
30
- };
31
- exports.parseFtyp = parseFtyp;
@@ -1,20 +0,0 @@
1
- import type { BufferIterator } from '../../../buffer-iterator';
2
- export interface AvccBox {
3
- type: 'avcc-box';
4
- data: Uint8Array;
5
- configurationString: string;
6
- }
7
- export declare const parseAvcc: ({ data, size, }: {
8
- data: BufferIterator;
9
- size: number;
10
- }) => AvccBox;
11
- export interface HvccBox {
12
- type: 'hvcc-box';
13
- data: Uint8Array;
14
- configurationString: string;
15
- }
16
- export declare const parseHvcc: ({ data, size, offset, }: {
17
- data: BufferIterator;
18
- size: number;
19
- offset: number;
20
- }) => HvccBox;
@@ -1,73 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseHvcc = exports.parseAvcc = void 0;
4
- const parseAvcc = ({ data, size, }) => {
5
- const confVersion = data.getUint8();
6
- if (confVersion !== 1) {
7
- throw new Error(`Unsupported AVCC version ${confVersion}`);
8
- }
9
- const profile = data.getUint8();
10
- const profileCompatibility = data.getUint8();
11
- const level = data.getUint8();
12
- const str = `${profile.toString(16).padStart(2, '0')}${profileCompatibility.toString(16).padStart(2, '0')}${level.toString(16).padStart(2, '0')}`;
13
- data.counter.decrement(4);
14
- return {
15
- type: 'avcc-box',
16
- data: data.getSlice(size - 8),
17
- configurationString: str,
18
- };
19
- };
20
- exports.parseAvcc = parseAvcc;
21
- const parseHvcc = ({ data, size, offset, }) => {
22
- const raw = data.getSlice(size - 8);
23
- data.counter.decrement(size - 8);
24
- const configurationVersion = data.getUint8();
25
- if (configurationVersion !== 1) {
26
- throw new Error(`Unsupported HVCC version ${configurationVersion}`);
27
- }
28
- const generalProfileSpaceTierFlagAndIdc = data.getUint8();
29
- let generalProfileCompatibility = data.getUint32();
30
- // unsigned int(2) general_profile_space;
31
- // unsigned int(1) general_tier_flag;
32
- // unsigned int(5) general_profile_idc;
33
- const generalProfileSpace = generalProfileSpaceTierFlagAndIdc >> 6;
34
- const generalTierFlag = generalProfileSpaceTierFlagAndIdc >> 5;
35
- const generalProfileIdc = generalProfileSpaceTierFlagAndIdc >> 0;
36
- // general_constraint_indicator_flags(48)
37
- const generalConstraintIndicator = data.getSlice(6);
38
- const generalLevelIdc = data.getUint8();
39
- let reversedGeneralProfileSpace = 0;
40
- for (let i = 0; i < 32; i++) {
41
- reversedGeneralProfileSpace |= generalProfileCompatibility & 1;
42
- if (i === 31)
43
- break;
44
- reversedGeneralProfileSpace <<= 1;
45
- generalProfileCompatibility >>= 1;
46
- }
47
- const profileSpaceChar = generalProfileSpace === 0
48
- ? ''
49
- : generalProfileSpace === 1
50
- ? 'A'
51
- : generalProfileSpace === 2
52
- ? 'B'
53
- : 'C';
54
- const generalTierChar = generalTierFlag === 0 ? 'L' : 'H';
55
- let hasByte = false;
56
- let generalConstraintString = '';
57
- for (let i = 5; i >= 0; i--) {
58
- if (generalConstraintIndicator[i] || hasByte) {
59
- generalConstraintString =
60
- generalConstraintIndicator[i].toString(16) + generalConstraintString;
61
- hasByte = true;
62
- }
63
- }
64
- const constraintString = `${profileSpaceChar}${generalProfileIdc.toString(16)}.${reversedGeneralProfileSpace.toString(16)}.${generalTierChar}${generalLevelIdc}.${generalConstraintString}`;
65
- const remaining = size - (data.counter.getOffset() - offset);
66
- data.discard(remaining);
67
- return {
68
- type: 'hvcc-box',
69
- data: raw,
70
- configurationString: constraintString,
71
- };
72
- };
73
- exports.parseHvcc = parseHvcc;
@@ -1,15 +0,0 @@
1
- import type { BufferIterator } from '../../../buffer-iterator';
2
- export interface SttsBox {
3
- type: 'stts-box';
4
- sampleDistribution: SampleDistribution[];
5
- }
6
- type SampleDistribution = {
7
- sampleCount: number;
8
- sampleDelta: number;
9
- };
10
- export declare const parseStts: ({ data, size, fileOffset, }: {
11
- data: BufferIterator;
12
- size: number;
13
- fileOffset: number;
14
- }) => SttsBox;
15
- export {};
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseStts = void 0;
4
- const parseStts = ({ data, size, fileOffset, }) => {
5
- const initialOffset = data.counter.getOffset();
6
- const initialCounter = initialOffset - fileOffset;
7
- const version = data.getUint8();
8
- if (version !== 0) {
9
- throw new Error(`Unsupported STTS version ${version}`);
10
- }
11
- // flags, we discard them
12
- data.discard(3);
13
- // entry count
14
- const entryCount = data.getUint32();
15
- const sampleDistributions = [];
16
- // entries
17
- for (let i = 0; i < entryCount; i++) {
18
- const sampleCount = data.getUint32();
19
- const sampleDelta = data.getUint32();
20
- const sampleDistribution = {
21
- sampleCount,
22
- sampleDelta,
23
- };
24
- sampleDistributions.push(sampleDistribution);
25
- }
26
- const bytesUsed = data.counter.getOffset() - initialOffset + initialCounter;
27
- if (bytesUsed !== size) {
28
- throw new Error(`Expected stts box to be ${size} bytes, but was ${bytesUsed} bytes`);
29
- }
30
- return {
31
- type: 'stts-box',
32
- sampleDistribution: sampleDistributions,
33
- };
34
- };
35
- exports.parseStts = parseStts;
@@ -1,14 +0,0 @@
1
- import type { BufferIterator } from '../../../../buffer-iterator';
2
- import type { Av1BitstreamHeaderSegment } from './header-segment';
3
- type FrameType = 'key' | 'delta' | 'intra' | 'switch';
4
- export type Av1FrameHeader = {
5
- type: 'av1-frame-header';
6
- frameType: FrameType;
7
- temporalPointInfo: number | null;
8
- };
9
- export declare const getFrameType: (frameType: number) => FrameType;
10
- export declare const parseAv1FrameHeader: ({ stream, headerSegment, }: {
11
- stream: BufferIterator;
12
- headerSegment: Av1BitstreamHeaderSegment;
13
- }) => Av1FrameHeader;
14
- export {};