@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
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMatroskaCues = void 0;
4
+ const make_header_1 = require("../boxes/webm/make-header");
5
+ const createMatroskaCues = (cues) => {
6
+ return (0, make_header_1.makeMatroskaBytes)({
7
+ type: 'Cues',
8
+ minVintWidth: null,
9
+ value: cues.map((cue) => {
10
+ return {
11
+ type: 'CuePoint',
12
+ value: [
13
+ {
14
+ type: 'CueTime',
15
+ minVintWidth: null,
16
+ value: {
17
+ value: cue.time,
18
+ byteLength: null,
19
+ },
20
+ },
21
+ {
22
+ type: 'CueTrackPositions',
23
+ value: [
24
+ {
25
+ type: 'CueTrack',
26
+ minVintWidth: null,
27
+ value: {
28
+ value: cue.trackNumber,
29
+ byteLength: null,
30
+ },
31
+ },
32
+ {
33
+ type: 'CueClusterPosition',
34
+ minVintWidth: null,
35
+ value: {
36
+ value: cue.clusterPosition,
37
+ byteLength: null,
38
+ },
39
+ },
40
+ ],
41
+ minVintWidth: null,
42
+ },
43
+ ],
44
+ minVintWidth: null,
45
+ };
46
+ }),
47
+ });
48
+ };
49
+ exports.createMatroskaCues = createMatroskaCues;
@@ -25,7 +25,7 @@ const makeMatroskaInfo = ({ timescale }) => {
25
25
  value: '@remotion/media-parser',
26
26
  minVintWidth: null,
27
27
  },
28
- ...(0, make_duration_with_padding_1.makeDurationWithPadding)(0),
28
+ (0, make_duration_with_padding_1.makeDurationWithPadding)(0),
29
29
  ],
30
30
  minVintWidth: null,
31
31
  });
@@ -0,0 +1,6 @@
1
+ import type { MatroskaElement } from '../boxes/webm/segments/all-segments';
2
+ export type Seek = {
3
+ hexString: MatroskaElement;
4
+ byte: number;
5
+ };
6
+ export declare const createMatroskaSeekHead: (seeks: Seek[]) => import("../boxes/webm/segments/all-segments").BytesAndOffset[];
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMatroskaSeekHead = void 0;
4
+ const make_header_1 = require("../boxes/webm/make-header");
5
+ const createMatroskaSeekHead = (seeks) => {
6
+ return (0, make_header_1.padMatroskaBytes)((0, make_header_1.makeMatroskaBytes)({
7
+ type: 'SeekHead',
8
+ minVintWidth: null,
9
+ value: seeks.map((seek) => {
10
+ return {
11
+ type: 'Seek',
12
+ minVintWidth: null,
13
+ value: [
14
+ {
15
+ type: 'SeekID',
16
+ minVintWidth: null,
17
+ value: seek.hexString,
18
+ },
19
+ {
20
+ type: 'SeekPosition',
21
+ minVintWidth: null,
22
+ value: {
23
+ value: seek.byte,
24
+ byteLength: null,
25
+ },
26
+ },
27
+ ],
28
+ };
29
+ }),
30
+ }), 200);
31
+ };
32
+ exports.createMatroskaSeekHead = createMatroskaSeekHead;
@@ -1,2 +1,3 @@
1
1
  import type { BytesAndOffset } from '../boxes/webm/segments/all-segments';
2
+ export declare const MATROSKA_SEGMENT_MIN_VINT_WIDTH = 8;
2
3
  export declare const createMatroskaSegment: (children: BytesAndOffset[]) => BytesAndOffset;
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMatroskaSegment = void 0;
3
+ exports.createMatroskaSegment = exports.MATROSKA_SEGMENT_MIN_VINT_WIDTH = void 0;
4
4
  const make_header_1 = require("../boxes/webm/make-header");
5
+ exports.MATROSKA_SEGMENT_MIN_VINT_WIDTH = 8;
5
6
  const createMatroskaSegment = (children) => {
6
7
  return (0, make_header_1.makeMatroskaBytes)({
7
8
  type: 'Segment',
8
9
  value: children,
9
- minVintWidth: 8,
10
+ minVintWidth: exports.MATROSKA_SEGMENT_MIN_VINT_WIDTH,
10
11
  });
11
12
  };
12
13
  exports.createMatroskaSegment = createMatroskaSegment;
@@ -1,32 +1,27 @@
1
1
  import type { BytesAndOffset } from '../boxes/webm/segments/all-segments';
2
- export type MatroskaColorParams = {
3
- transferChracteristics: 'bt709' | 'smpte170m' | 'iec61966-2-1' | null;
4
- matrixCoefficients: 'bt709' | 'bt470bg' | 'rgb' | 'smpte170m' | null;
5
- primaries: 'bt709' | 'smpte170m' | 'bt470bg' | null;
6
- fullRange: boolean | null;
7
- };
8
- export declare const makeMatroskaColorBytes: ({ transferChracteristics, matrixCoefficients, primaries, fullRange, }: MatroskaColorParams) => BytesAndOffset;
2
+ import type { MediaParserAudioCodec, MediaParserVideoCodec, VideoTrackColorParams } from '../get-tracks';
9
3
  export declare const makeMatroskaVideoBytes: ({ color, width, height, }: {
10
- color: MatroskaColorParams;
4
+ color: VideoTrackColorParams;
11
5
  width: number;
12
6
  height: number;
13
7
  }) => BytesAndOffset;
14
8
  export type MakeTrackAudio = {
15
9
  trackNumber: number;
16
- codecId: string;
10
+ codec: MediaParserAudioCodec;
17
11
  numberOfChannels: number;
18
12
  sampleRate: number;
19
13
  type: 'audio';
14
+ codecPrivate: Uint8Array | null;
20
15
  };
21
16
  export type MakeTrackVideo = {
22
- color: MatroskaColorParams;
17
+ color: VideoTrackColorParams;
23
18
  width: number;
24
19
  height: number;
25
- defaultDuration: number;
26
20
  trackNumber: number;
27
- codecId: string;
21
+ codec: MediaParserVideoCodec;
28
22
  type: 'video';
23
+ codecPrivate: Uint8Array | null;
29
24
  };
30
- export declare const makeMatroskaAudioTrackEntryBytes: ({ trackNumber, codecId, numberOfChannels: audioChannels, sampleRate, }: MakeTrackAudio) => BytesAndOffset;
31
- export declare const makeMatroskaVideoTrackEntryBytes: ({ color, width, height, defaultDuration, trackNumber, codecId, }: MakeTrackVideo) => BytesAndOffset;
25
+ export declare const makeMatroskaAudioTrackEntryBytes: ({ trackNumber, codec, numberOfChannels, sampleRate, codecPrivate, }: MakeTrackAudio) => BytesAndOffset;
26
+ export declare const makeMatroskaVideoTrackEntryBytes: ({ color, width, height, trackNumber, codec, codecPrivate, }: MakeTrackVideo) => BytesAndOffset;
32
27
  export declare const makeMatroskaTracks: (tracks: BytesAndOffset[]) => BytesAndOffset[];
@@ -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,
@@ -138,17 +119,9 @@ const makeMatroskaAudioTrackEntryBytes = ({ trackNumber, codecId, numberOfChanne
138
119
  },
139
120
  minVintWidth: null,
140
121
  },
141
- {
142
- type: 'TrackTimestampScale',
143
- value: {
144
- value: 1,
145
- size: '64',
146
- },
147
- minVintWidth: null,
148
- },
149
122
  {
150
123
  type: 'CodecID',
151
- value: codecId,
124
+ value: makeAudioCodecId(codec),
152
125
  minVintWidth: null,
153
126
  },
154
127
  {
@@ -158,7 +131,7 @@ const makeMatroskaAudioTrackEntryBytes = ({ trackNumber, codecId, numberOfChanne
158
131
  type: 'Channels',
159
132
  minVintWidth: null,
160
133
  value: {
161
- value: audioChannels,
134
+ value: numberOfChannels,
162
135
  byteLength: null,
163
136
  },
164
137
  },
@@ -181,11 +154,18 @@ const makeMatroskaAudioTrackEntryBytes = ({ trackNumber, codecId, numberOfChanne
181
154
  ],
182
155
  minVintWidth: null,
183
156
  },
184
- ],
157
+ codecPrivate
158
+ ? {
159
+ type: 'CodecPrivate',
160
+ minVintWidth: null,
161
+ value: codecPrivate,
162
+ }
163
+ : null,
164
+ ].filter(Boolean),
185
165
  });
186
166
  };
187
167
  exports.makeMatroskaAudioTrackEntryBytes = makeMatroskaAudioTrackEntryBytes;
188
- const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, defaultDuration, trackNumber, codecId, }) => {
168
+ const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, trackNumber, codec, codecPrivate, }) => {
189
169
  return (0, make_header_1.makeMatroskaBytes)({
190
170
  type: 'TrackEntry',
191
171
  minVintWidth: null,
@@ -226,7 +206,7 @@ const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, defaultDuratio
226
206
  },
227
207
  {
228
208
  type: 'CodecID',
229
- value: codecId,
209
+ value: makeVideoCodecId(codec),
230
210
  minVintWidth: null,
231
211
  },
232
212
  {
@@ -237,20 +217,19 @@ const makeMatroskaVideoTrackEntryBytes = ({ color, width, height, defaultDuratio
237
217
  },
238
218
  minVintWidth: null,
239
219
  },
240
- {
241
- type: 'DefaultDuration',
242
- value: {
243
- value: defaultDuration,
244
- byteLength: null,
245
- },
246
- minVintWidth: null,
247
- },
248
220
  (0, exports.makeMatroskaVideoBytes)({
249
221
  color,
250
222
  width,
251
223
  height,
252
224
  }),
253
- ],
225
+ codecPrivate
226
+ ? {
227
+ type: 'CodecPrivate',
228
+ minVintWidth: null,
229
+ value: codecPrivate,
230
+ }
231
+ : null,
232
+ ].filter(Boolean),
254
233
  });
255
234
  };
256
235
  exports.makeMatroskaVideoTrackEntryBytes = makeMatroskaVideoTrackEntryBytes;
@@ -259,8 +238,6 @@ const makeMatroskaTracks = (tracks) => {
259
238
  type: 'Tracks',
260
239
  value: tracks,
261
240
  minVintWidth: null,
262
- }),
263
- // TODO: That's too much padding
264
- 1000);
241
+ }), 500);
265
242
  };
266
243
  exports.makeMatroskaTracks = makeMatroskaTracks;
@@ -0,0 +1,12 @@
1
+ import type { AllParseMediaFields, Options, ParseMediaCallbacks, ParseMediaFields, ParseMediaResult } from './options';
2
+ import type { ParseResult } from './parse-result';
3
+ import type { ParserState } from './parser-state';
4
+ export declare const emitAvailableInfo: ({ hasInfo, parseResult, moreFields, state, returnValue, contentLength, name, }: {
5
+ hasInfo: Record<keyof Options<ParseMediaFields>, boolean>;
6
+ parseResult: ParseResult;
7
+ moreFields: ParseMediaCallbacks<AllParseMediaFields>;
8
+ state: ParserState;
9
+ returnValue: ParseMediaResult<AllParseMediaFields>;
10
+ contentLength: number | null;
11
+ name: string;
12
+ }) => void;
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emitAvailableInfo = void 0;
4
+ const get_audio_codec_1 = require("./get-audio-codec");
5
+ const get_container_1 = require("./get-container");
6
+ const get_dimensions_1 = require("./get-dimensions");
7
+ const get_duration_1 = require("./get-duration");
8
+ const get_fps_1 = require("./get-fps");
9
+ const get_tracks_1 = require("./get-tracks");
10
+ const get_video_codec_1 = require("./get-video-codec");
11
+ const emitAvailableInfo = ({ hasInfo, parseResult, moreFields, state, returnValue, contentLength, name, }) => {
12
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
13
+ const keys = Object.keys(hasInfo);
14
+ for (const key of keys) {
15
+ if (key === 'boxes') {
16
+ if (hasInfo.boxes && returnValue.boxes === undefined) {
17
+ (_a = moreFields.onBoxes) === null || _a === void 0 ? void 0 : _a.call(moreFields, parseResult.segments);
18
+ returnValue.boxes = parseResult.segments;
19
+ }
20
+ continue;
21
+ }
22
+ if (key === 'durationInSeconds') {
23
+ if (hasInfo.durationInSeconds &&
24
+ returnValue.durationInSeconds === undefined) {
25
+ const durationInSeconds = (0, get_duration_1.getDuration)(parseResult.segments, state);
26
+ (_b = moreFields.onDurationInSeconds) === null || _b === void 0 ? void 0 : _b.call(moreFields, durationInSeconds);
27
+ returnValue.durationInSeconds = durationInSeconds;
28
+ }
29
+ continue;
30
+ }
31
+ if (key === 'dimensions') {
32
+ if (hasInfo.dimensions && returnValue.dimensions === undefined) {
33
+ const dimensionsQueried = (0, get_dimensions_1.getDimensions)(parseResult.segments, state);
34
+ const dimensions = {
35
+ height: dimensionsQueried.height,
36
+ width: dimensionsQueried.width,
37
+ };
38
+ (_c = moreFields.onDimensions) === null || _c === void 0 ? void 0 : _c.call(moreFields, dimensions);
39
+ returnValue.dimensions = dimensions;
40
+ }
41
+ continue;
42
+ }
43
+ if (key === 'unrotatedDimensions') {
44
+ if (returnValue.unrotatedDimensions === undefined &&
45
+ hasInfo.unrotatedDimensions) {
46
+ const dimensionsQueried = (0, get_dimensions_1.getDimensions)(parseResult.segments, state);
47
+ const unrotatedDimensions = {
48
+ height: dimensionsQueried.unrotatedHeight,
49
+ width: dimensionsQueried.unrotatedWidth,
50
+ };
51
+ (_d = moreFields.onUnrotatedDimensions) === null || _d === void 0 ? void 0 : _d.call(moreFields, unrotatedDimensions);
52
+ returnValue.unrotatedDimensions = unrotatedDimensions;
53
+ }
54
+ continue;
55
+ }
56
+ if (key === 'rotation') {
57
+ if (returnValue.rotation === undefined && hasInfo.rotation) {
58
+ const dimensionsQueried = (0, get_dimensions_1.getDimensions)(parseResult.segments, state);
59
+ const { rotation } = dimensionsQueried;
60
+ (_e = moreFields.onRotation) === null || _e === void 0 ? void 0 : _e.call(moreFields, rotation);
61
+ returnValue.rotation = rotation;
62
+ }
63
+ continue;
64
+ }
65
+ if (key === 'fps') {
66
+ if (returnValue.fps === undefined && hasInfo.fps) {
67
+ const fps = (0, get_fps_1.getFps)(parseResult.segments);
68
+ (_f = moreFields.onFps) === null || _f === void 0 ? void 0 : _f.call(moreFields, fps);
69
+ returnValue.fps = fps;
70
+ }
71
+ continue;
72
+ }
73
+ if (key === 'videoCodec') {
74
+ if (returnValue.videoCodec === undefined && hasInfo.videoCodec) {
75
+ const videoCodec = (0, get_video_codec_1.getVideoCodec)(parseResult.segments);
76
+ (_g = moreFields.onVideoCodec) === null || _g === void 0 ? void 0 : _g.call(moreFields, videoCodec);
77
+ returnValue.videoCodec = videoCodec;
78
+ }
79
+ continue;
80
+ }
81
+ if (key === 'audioCodec') {
82
+ if (returnValue.audioCodec === undefined && hasInfo.audioCodec) {
83
+ const audioCodec = (0, get_audio_codec_1.getAudioCodec)(parseResult.segments, state);
84
+ (_h = moreFields.onAudioCodec) === null || _h === void 0 ? void 0 : _h.call(moreFields, audioCodec);
85
+ returnValue.audioCodec = audioCodec;
86
+ }
87
+ continue;
88
+ }
89
+ if (key === 'tracks') {
90
+ if (hasInfo.tracks &&
91
+ returnValue.videoTracks === undefined &&
92
+ returnValue.audioTracks === undefined) {
93
+ const { videoTracks, audioTracks } = (0, get_tracks_1.getTracks)(parseResult.segments, state);
94
+ (_j = moreFields.onTracks) === null || _j === void 0 ? void 0 : _j.call(moreFields, { videoTracks, audioTracks });
95
+ returnValue.videoTracks = videoTracks;
96
+ returnValue.audioTracks = audioTracks;
97
+ }
98
+ continue;
99
+ }
100
+ if (key === 'internalStats') {
101
+ if (hasInfo.internalStats && returnValue.internalStats === undefined) {
102
+ const internalStats = state.getInternalStats();
103
+ (_k = moreFields.onInternalStats) === null || _k === void 0 ? void 0 : _k.call(moreFields, internalStats);
104
+ returnValue.internalStats = internalStats;
105
+ }
106
+ continue;
107
+ }
108
+ if (key === 'size') {
109
+ if (returnValue.size === undefined && hasInfo.size) {
110
+ (_l = moreFields.onSize) === null || _l === void 0 ? void 0 : _l.call(moreFields, contentLength);
111
+ returnValue.size = contentLength;
112
+ }
113
+ continue;
114
+ }
115
+ if (key === 'name') {
116
+ if (returnValue.name === undefined && hasInfo.name) {
117
+ (_m = moreFields.onName) === null || _m === void 0 ? void 0 : _m.call(moreFields, name);
118
+ returnValue.name = name;
119
+ }
120
+ continue;
121
+ }
122
+ if (key === 'container') {
123
+ if (returnValue.container === undefined && hasInfo.container) {
124
+ const container = (0, get_container_1.getContainer)(parseResult.segments);
125
+ (_o = moreFields.onContainer) === null || _o === void 0 ? void 0 : _o.call(moreFields, container);
126
+ returnValue.container = container;
127
+ }
128
+ continue;
129
+ }
130
+ throw new Error(`Unhandled key: ${key}`);
131
+ }
132
+ };
133
+ exports.emitAvailableInfo = emitAvailableInfo;
@@ -0,0 +1,57 @@
1
+ // src/writers/buffer.ts
2
+ var createContent = () => {
3
+ const buf = new ArrayBuffer(0, {
4
+ maxByteLength: 1e8
5
+ });
6
+ if (!buf.resize) {
7
+ throw new Error("Could not create buffer writer");
8
+ }
9
+ let data = new Uint8Array(buf);
10
+ const write = (newData) => {
11
+ const oldLength = buf.byteLength;
12
+ const newLength = oldLength + newData.byteLength;
13
+ buf.resize(newLength);
14
+ const newArray = new Uint8Array(buf);
15
+ newArray.set(newData, oldLength);
16
+ data = newArray;
17
+ };
18
+ const updateDataAt = (position, newData) => {
19
+ const newArray = new Uint8Array(buf);
20
+ newArray.set(newData, position);
21
+ data = newArray;
22
+ };
23
+ let writPromise = Promise.resolve();
24
+ let removed = false;
25
+ const writer = {
26
+ write: (arr) => {
27
+ writPromise = writPromise.then(() => write(arr));
28
+ return writPromise;
29
+ },
30
+ save: () => {
31
+ if (removed) {
32
+ return Promise.reject(new Error("Already called .remove() on the result"));
33
+ }
34
+ return Promise.resolve(new File([data], "hithere", {}));
35
+ },
36
+ remove() {
37
+ removed = true;
38
+ data = new Uint8Array(0);
39
+ return Promise.resolve();
40
+ },
41
+ getWrittenByteCount: () => buf.byteLength,
42
+ updateDataAt: (position, newData) => {
43
+ writPromise = writPromise.then(() => updateDataAt(position, newData));
44
+ return writPromise;
45
+ },
46
+ waitForFinish: async () => {
47
+ await writPromise;
48
+ }
49
+ };
50
+ return Promise.resolve(writer);
51
+ };
52
+ var bufferWriter = {
53
+ createContent
54
+ };
55
+ export {
56
+ bufferWriter
57
+ };