@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,260 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTrack = exports.getMatroskaAudioCodecWithoutConfigString = void 0;
4
+ const buffer_iterator_1 = require("../../buffer-iterator");
5
+ const make_hvc1_codec_strings_1 = require("../../make-hvc1-codec-strings");
6
+ const av1_codec_private_1 = require("./av1-codec-private");
7
+ const color_1 = require("./color");
8
+ const description_1 = require("./description");
9
+ const track_entry_1 = require("./segments/track-entry");
10
+ const traversal_1 = require("./traversal");
11
+ const getDescription = (track) => {
12
+ const codec = (0, traversal_1.getCodecSegment)(track);
13
+ if (!codec) {
14
+ return undefined;
15
+ }
16
+ if (codec.value === 'V_MPEG4/ISO/AVC' || codec.value === 'V_MPEGH/ISO/HEVC') {
17
+ const priv = (0, traversal_1.getPrivateData)(track);
18
+ if (priv) {
19
+ return priv;
20
+ }
21
+ }
22
+ return undefined;
23
+ };
24
+ const getMatroskaVideoCodecWithoutConfigString = ({ codecSegment: codec, }) => {
25
+ if (codec.value === 'V_VP8') {
26
+ return 'vp8';
27
+ }
28
+ if (codec.value === 'V_VP9') {
29
+ return 'vp9';
30
+ }
31
+ if (codec.value === 'V_MPEG4/ISO/AVC') {
32
+ return 'h264';
33
+ }
34
+ if (codec.value === 'V_AV1') {
35
+ return 'av1';
36
+ }
37
+ if (codec.value === 'V_MPEGH/ISO/HEVC') {
38
+ return 'h265';
39
+ }
40
+ throw new Error(`Unknown codec: ${codec.value}`);
41
+ };
42
+ const getMatroskaVideoCodecString = ({ track, codecSegment: codec, }) => {
43
+ if (codec.value === 'V_VP8') {
44
+ return 'vp8';
45
+ }
46
+ if (codec.value === 'V_VP9') {
47
+ const priv = (0, traversal_1.getPrivateData)(track);
48
+ if (priv) {
49
+ throw new Error('@remotion/media-parser cannot handle the private data for VP9. Do you have an example file you could send so we can implement it?');
50
+ }
51
+ return 'vp09.00.10.08';
52
+ }
53
+ if (codec.value === 'V_MPEG4/ISO/AVC') {
54
+ const priv = (0, traversal_1.getPrivateData)(track);
55
+ if (priv) {
56
+ return `avc1.${priv[1].toString(16).padStart(2, '0')}${priv[2].toString(16).padStart(2, '0')}${priv[3].toString(16).padStart(2, '0')}`;
57
+ }
58
+ throw new Error('Could not find a CodecPrivate field in TrackEntry');
59
+ }
60
+ if (codec.value === 'V_AV1') {
61
+ const priv = (0, traversal_1.getPrivateData)(track);
62
+ if (!priv) {
63
+ throw new Error('Expected private data in AV1 track');
64
+ }
65
+ return (0, av1_codec_private_1.parseAv1PrivateData)(priv, null);
66
+ }
67
+ if (codec.value === 'V_MPEGH/ISO/HEVC') {
68
+ const priv = (0, traversal_1.getPrivateData)(track);
69
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(priv, priv.length);
70
+ return 'hvc1.' + (0, make_hvc1_codec_strings_1.getHvc1CodecString)(iterator);
71
+ }
72
+ throw new Error(`Unknown codec: ${codec.value}`);
73
+ };
74
+ const getMatroskaAudioCodecWithoutConfigString = ({ track, }) => {
75
+ const codec = (0, traversal_1.getCodecSegment)(track);
76
+ if (!codec) {
77
+ throw new Error('Expected codec segment');
78
+ }
79
+ if (codec.value === 'A_OPUS') {
80
+ return 'opus';
81
+ }
82
+ if (codec.value === 'A_VORBIS') {
83
+ return 'vorbis';
84
+ }
85
+ if (codec.value === 'A_PCM/INT/LIT') {
86
+ // https://github.com/ietf-wg-cellar/matroska-specification/issues/142#issuecomment-330004950
87
+ // Audio samples MUST be considered as signed values, except if the audio bit depth is 8 which MUST be interpreted as unsigned values.
88
+ const bitDepth = (0, traversal_1.getBitDepth)(track);
89
+ if (bitDepth === null) {
90
+ throw new Error('Expected bit depth');
91
+ }
92
+ if (bitDepth === 8) {
93
+ return 'pcm-u8';
94
+ }
95
+ if (bitDepth === 16) {
96
+ return 'pcm-s16';
97
+ }
98
+ if (bitDepth === 24) {
99
+ return 'pcm-s24';
100
+ }
101
+ throw new Error('Unknown audio format');
102
+ }
103
+ if (codec.value === 'A_AAC') {
104
+ return `aac`;
105
+ }
106
+ if (codec.value === 'A_MPEG/L3') {
107
+ return 'mp3';
108
+ }
109
+ throw new Error(`Unknown codec: ${codec.value}`);
110
+ };
111
+ exports.getMatroskaAudioCodecWithoutConfigString = getMatroskaAudioCodecWithoutConfigString;
112
+ const getMatroskaAudioCodecString = (track) => {
113
+ const codec = (0, traversal_1.getCodecSegment)(track);
114
+ if (!codec) {
115
+ throw new Error('Expected codec segment');
116
+ }
117
+ if (codec.value === 'A_OPUS') {
118
+ return 'opus';
119
+ }
120
+ if (codec.value === 'A_VORBIS') {
121
+ return 'vorbis';
122
+ }
123
+ if (codec.value === 'A_PCM/INT/LIT') {
124
+ // https://github.com/ietf-wg-cellar/matroska-specification/issues/142#issuecomment-330004950
125
+ // Audio samples MUST be considered as signed values, except if the audio bit depth is 8 which MUST be interpreted as unsigned values.
126
+ const bitDepth = (0, traversal_1.getBitDepth)(track);
127
+ if (bitDepth === null) {
128
+ throw new Error('Expected bit depth');
129
+ }
130
+ if (bitDepth === 8) {
131
+ return 'pcm-u8';
132
+ }
133
+ return 'pcm-s' + bitDepth;
134
+ }
135
+ if (codec.value === 'A_AAC') {
136
+ const priv = (0, traversal_1.getPrivateData)(track);
137
+ const iterator = (0, buffer_iterator_1.getArrayBufferIterator)(priv, priv.length);
138
+ iterator.startReadingBits();
139
+ /**
140
+ * ChatGPT
141
+ * ▪ The first 5 bits represent the AOT.
142
+ ▪ Common values:
143
+ ◦ 1 for AAC Main
144
+ ◦ 2 for AAC LC (Low Complexity)
145
+ ◦ 3 for AAC SSR (Scalable Sample Rate)
146
+ ◦ 4 for AAC LTP (Long Term Prediction)
147
+ ◦ 5 for SBR (Spectral Band Replication)
148
+ ◦ 29 for HE-AAC (which uses SBR with AAC LC)
149
+ */
150
+ /**
151
+ * Fully qualified codec:
152
+ * This codec has multiple possible codec strings:
153
+ "mp4a.40.2" — MPEG-4 AAC LC
154
+ "mp4a.40.02" — MPEG-4 AAC LC, leading 0 for Aud-OTI compatibility
155
+ "mp4a.40.5" — MPEG-4 HE-AAC v1 (AAC LC + SBR)
156
+ "mp4a.40.05" — MPEG-4 HE-AAC v1 (AAC LC + SBR), leading 0 for Aud-OTI compatibility
157
+ "mp4a.40.29" — MPEG-4 HE-AAC v2 (AAC LC + SBR + PS)
158
+ "mp4a.67" — MPEG-2 AAC LC
159
+ */
160
+ const profile = iterator.getBits(5);
161
+ iterator.stopReadingBits();
162
+ iterator.destroy();
163
+ return `mp4a.40.${profile.toString().padStart(2, '0')}`;
164
+ }
165
+ if (codec.value === 'A_MPEG/L3') {
166
+ return 'mp3';
167
+ }
168
+ throw new Error(`Unknown codec: ${codec.value}`);
169
+ };
170
+ const getTrack = ({ timescale, track, }) => {
171
+ const trackType = (0, traversal_1.getTrackTypeSegment)(track);
172
+ if (!trackType) {
173
+ throw new Error('Expected track type segment');
174
+ }
175
+ const trackId = (0, traversal_1.getTrackId)(track);
176
+ if ((0, track_entry_1.trackTypeToString)(trackType.value.value) === 'video') {
177
+ const width = (0, traversal_1.getWidthSegment)(track);
178
+ if (width === null) {
179
+ throw new Error('Expected width segment');
180
+ }
181
+ const height = (0, traversal_1.getHeightSegment)(track);
182
+ if (height === null) {
183
+ throw new Error('Expected height segment');
184
+ }
185
+ const displayHeight = (0, traversal_1.getDisplayHeightSegment)(track);
186
+ const displayWidth = (0, traversal_1.getDisplayWidthSegment)(track);
187
+ const codec = (0, traversal_1.getCodecSegment)(track);
188
+ if (!codec) {
189
+ return null;
190
+ }
191
+ const codecPrivate = (0, traversal_1.getPrivateData)(track);
192
+ const codecString = getMatroskaVideoCodecString({
193
+ track,
194
+ codecSegment: codec,
195
+ });
196
+ const colour = (0, traversal_1.getColourSegment)(track);
197
+ if (!codecString) {
198
+ return null;
199
+ }
200
+ return {
201
+ type: 'video',
202
+ trackId,
203
+ codec: codecString,
204
+ description: getDescription(track),
205
+ height: displayHeight ? displayHeight.value.value : height.value.value,
206
+ width: displayWidth ? displayWidth.value.value : width.value.value,
207
+ sampleAspectRatio: {
208
+ numerator: 1,
209
+ denominator: 1,
210
+ },
211
+ timescale,
212
+ codedHeight: height.value.value,
213
+ codedWidth: width.value.value,
214
+ displayAspectHeight: displayHeight
215
+ ? displayHeight.value.value
216
+ : height.value.value,
217
+ displayAspectWidth: displayWidth
218
+ ? displayWidth.value.value
219
+ : width.value.value,
220
+ rotation: 0,
221
+ trakBox: null,
222
+ codecPrivate,
223
+ color: colour
224
+ ? (0, color_1.parseColorSegment)(colour)
225
+ : {
226
+ fullRange: null,
227
+ matrixCoefficients: null,
228
+ primaries: null,
229
+ transferCharacteristics: null,
230
+ },
231
+ codecWithoutConfig: getMatroskaVideoCodecWithoutConfigString({
232
+ codecSegment: codec,
233
+ }),
234
+ };
235
+ }
236
+ if ((0, track_entry_1.trackTypeToString)(trackType.value.value) === 'audio') {
237
+ const sampleRate = (0, traversal_1.getSampleRate)(track);
238
+ const numberOfChannels = (0, traversal_1.getNumberOfChannels)(track);
239
+ const codecPrivate = (0, traversal_1.getPrivateData)(track);
240
+ if (sampleRate === null) {
241
+ throw new Error('Could not find sample rate or number of channels');
242
+ }
243
+ return {
244
+ type: 'audio',
245
+ trackId,
246
+ codec: getMatroskaAudioCodecString(track),
247
+ timescale,
248
+ numberOfChannels,
249
+ sampleRate,
250
+ description: (0, description_1.getAudioDescription)(track),
251
+ trakBox: null,
252
+ codecPrivate,
253
+ codecWithoutConfig: (0, exports.getMatroskaAudioCodecWithoutConfigString)({
254
+ track,
255
+ }),
256
+ };
257
+ }
258
+ return null;
259
+ };
260
+ exports.getTrack = getTrack;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.postprocessEbml = exports.parseEbml = void 0;
4
4
  const add_new_matroska_tracks_1 = require("../../add-new-matroska-tracks");
5
5
  const get_sample_from_block_1 = require("./get-sample-from-block");
6
- const get_track_1 = require("./get-track");
6
+ const make_track_1 = require("./make-track");
7
7
  const all_segments_1 = require("./segments/all-segments");
8
8
  const parseEbml = async (iterator, parserContext) => {
9
9
  const hex = iterator.getMatroskaSegmentId();
@@ -110,7 +110,7 @@ const postprocessEbml = async ({ offset, ebml, parserContext, }) => {
110
110
  }
111
111
  if (ebml.type === 'TrackEntry') {
112
112
  parserContext.parserState.onTrackEntrySegment(ebml);
113
- const track = (0, get_track_1.getTrack)({
113
+ const track = (0, make_track_1.getTrack)({
114
114
  track: ebml,
115
115
  timescale: parserContext.parserState.getTimescale(),
116
116
  });
@@ -456,11 +456,11 @@ export declare const color: {
456
456
  readonly name: "Colour";
457
457
  readonly type: "children";
458
458
  };
459
- export declare const transfer: {
459
+ export declare const transferCharacteristics: {
460
460
  readonly name: "TransferCharacteristics";
461
461
  readonly type: "uint";
462
462
  };
463
- export declare const matrix: {
463
+ export declare const matrixCoefficients: {
464
464
  readonly name: "MatrixCoefficients";
465
465
  readonly type: "uint";
466
466
  };
@@ -561,6 +561,11 @@ export declare const cluster: {
561
561
  readonly type: "children";
562
562
  };
563
563
  export type CodecIdSegment = EbmlParsed<typeof codecID>;
564
+ export type ColourSegment = EbmlParsed<typeof color>;
565
+ export type TransferCharacteristicsSegment = EbmlParsed<typeof transferCharacteristics>;
566
+ export type PrimariesSegment = EbmlParsed<typeof primaries>;
567
+ export type RangeSegment = EbmlParsed<typeof range>;
568
+ export type MatrixCoefficientsSegment = EbmlParsed<typeof matrixCoefficients>;
564
569
  export type TrackTypeSegment = EbmlParsed<typeof trackType>;
565
570
  export type WidthSegment = EbmlParsed<typeof widthType>;
566
571
  export type HeightSegment = EbmlParsed<typeof heightType>;
@@ -636,7 +641,35 @@ export declare const ebmlMap: {
636
641
  };
637
642
  readonly "0x1c53bb6b": {
638
643
  readonly name: "Cues";
639
- readonly type: "uint8array";
644
+ readonly type: "children";
645
+ };
646
+ readonly "0xbb": {
647
+ readonly name: "CuePoint";
648
+ readonly type: "children";
649
+ };
650
+ readonly "0xb3": {
651
+ readonly name: "CueTime";
652
+ readonly type: "uint";
653
+ };
654
+ readonly "0xb7": {
655
+ readonly name: "CueTrackPositions";
656
+ readonly type: "children";
657
+ };
658
+ readonly "0xf1": {
659
+ readonly name: "CueClusterPosition";
660
+ readonly type: "uint";
661
+ };
662
+ readonly "0xf0": {
663
+ readonly name: "CueRelativePosition";
664
+ readonly type: "uint";
665
+ };
666
+ readonly "0x5378": {
667
+ readonly name: "CueBlockNumber";
668
+ readonly type: "uint";
669
+ };
670
+ readonly "0xf7": {
671
+ readonly name: "CueTrack";
672
+ readonly type: "uint";
640
673
  };
641
674
  readonly "0x4461": {
642
675
  readonly name: "DateUTC";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.defaultDuration = exports.language = exports.ChromaSitingVert = exports.ChromaSitingHorz = exports.range = exports.primaries = exports.matrix = exports.transfer = exports.color = exports.trackUID = exports.trackNumber = exports.tags = exports.tagSegment = exports.flagLacing = exports.displayHeight = exports.displayWidth = exports.bitDepth = exports.interlaced = exports.alphaMode = exports.channels = exports.samplingFrequency = exports.titleType = exports.infoType = exports.writingApp = exports.timestampScale = exports.duration = exports.muxingApp = exports.heightType = exports.widthType = exports.trackType = exports.codecID = exports.voidHeader = exports.seekHead = exports.seek = exports.seekPosition = exports.seekId = exports.matroskaHeader = exports.docTypeReadVersion = exports.docTypeVersion = exports.docType = exports.ebmlMaxSizeLength = exports.ebmlMaxIdLength = exports.ebmlReadVersion = exports.ebmlVersion = exports.getIdForName = exports.getSegmentName = exports.knownIdsWithThreeLength = exports.knownIdsWithTwoLength = exports.knownIdsWithOneLength = exports.matroskaElements = void 0;
3
+ exports.defaultDuration = exports.language = exports.ChromaSitingVert = exports.ChromaSitingHorz = exports.range = exports.primaries = exports.matrixCoefficients = exports.transferCharacteristics = exports.color = exports.trackUID = exports.trackNumber = exports.tags = exports.tagSegment = exports.flagLacing = exports.displayHeight = exports.displayWidth = exports.bitDepth = exports.interlaced = exports.alphaMode = exports.channels = exports.samplingFrequency = exports.titleType = exports.infoType = exports.writingApp = exports.timestampScale = exports.duration = exports.muxingApp = exports.heightType = exports.widthType = exports.trackType = exports.codecID = exports.voidHeader = exports.seekHead = exports.seek = exports.seekPosition = exports.seekId = exports.matroskaHeader = exports.docTypeReadVersion = exports.docTypeVersion = exports.docType = exports.ebmlMaxSizeLength = exports.ebmlMaxIdLength = exports.ebmlReadVersion = exports.ebmlVersion = exports.getIdForName = exports.getSegmentName = exports.knownIdsWithThreeLength = exports.knownIdsWithTwoLength = exports.knownIdsWithOneLength = exports.matroskaElements = void 0;
4
4
  exports.incrementOffsetAndChildren = exports.ebmlMap = exports.cluster = exports.segment = exports.blockGroup = exports.simpleBlock = exports.block = exports.timestampEntry = exports.tracks = exports.trackEntry = exports.trackTimestampScale = exports.codecName = exports.blockElement = exports.referenceBlock = exports.flagDefault = exports.videoSegment = exports.audioSegment = exports.maxBlockAdditionIdSegment = exports.blockAdditionsSegment = exports.codecPrivate = void 0;
5
5
  exports.matroskaElements = {
6
6
  Header: '0x1a45dfa3',
@@ -439,11 +439,11 @@ exports.color = {
439
439
  name: 'Colour',
440
440
  type: 'children',
441
441
  };
442
- exports.transfer = {
442
+ exports.transferCharacteristics = {
443
443
  name: 'TransferCharacteristics',
444
444
  type: 'uint',
445
445
  };
446
- exports.matrix = {
446
+ exports.matrixCoefficients = {
447
447
  name: 'MatrixCoefficients',
448
448
  type: 'uint',
449
449
  };
@@ -555,7 +555,35 @@ exports.ebmlMap = {
555
555
  [exports.matroskaElements.Void]: voidEbml,
556
556
  [exports.matroskaElements.Cues]: {
557
557
  name: 'Cues',
558
- type: 'uint8array',
558
+ type: 'children',
559
+ },
560
+ [exports.matroskaElements.CuePoint]: {
561
+ name: 'CuePoint',
562
+ type: 'children',
563
+ },
564
+ [exports.matroskaElements.CueTime]: {
565
+ name: 'CueTime',
566
+ type: 'uint',
567
+ },
568
+ [exports.matroskaElements.CueTrackPositions]: {
569
+ name: 'CueTrackPositions',
570
+ type: 'children',
571
+ },
572
+ [exports.matroskaElements.CueClusterPosition]: {
573
+ name: 'CueClusterPosition',
574
+ type: 'uint',
575
+ },
576
+ [exports.matroskaElements.CueRelativePosition]: {
577
+ name: 'CueRelativePosition',
578
+ type: 'uint',
579
+ },
580
+ [exports.matroskaElements.CueBlockNumber]: {
581
+ name: 'CueBlockNumber',
582
+ type: 'uint',
583
+ },
584
+ [exports.matroskaElements.CueTrack]: {
585
+ name: 'CueTrack',
586
+ type: 'uint',
559
587
  },
560
588
  [exports.matroskaElements.DateUTC]: {
561
589
  name: 'DateUTC',
@@ -654,8 +682,8 @@ exports.ebmlMap = {
654
682
  name: 'Cluster',
655
683
  type: 'children',
656
684
  },
657
- [exports.matroskaElements.TransferCharacteristics]: exports.transfer,
658
- [exports.matroskaElements.MatrixCoefficients]: exports.matrix,
685
+ [exports.matroskaElements.TransferCharacteristics]: exports.transferCharacteristics,
686
+ [exports.matroskaElements.MatrixCoefficients]: exports.matrixCoefficients,
659
687
  [exports.matroskaElements.Primaries]: exports.primaries,
660
688
  [exports.matroskaElements.Range]: exports.range,
661
689
  [exports.matroskaElements.ChromaSitingHorz]: exports.ChromaSitingHorz,
@@ -34,6 +34,9 @@ const continueParsingfunction = ({ result, iterator, children, wrap, parserConte
34
34
  const offset = iterator.counter.getOffset();
35
35
  const continued = await result.continueParsing();
36
36
  if (continued.status === 'incomplete') {
37
+ if (!parserContext.supportsContentRange) {
38
+ throw new Error('Content-Range header is not supported by the reader, but was asked to seek');
39
+ }
37
40
  return {
38
41
  status: 'incomplete',
39
42
  continueParsing: continueParsingfunction({
@@ -70,6 +73,9 @@ const expectChildren = async ({ iterator, length, initialChildren, wrap, parserC
70
73
  wrap,
71
74
  });
72
75
  if (child.status === 'incomplete') {
76
+ if (!parserContext.supportsContentRange) {
77
+ throw new Error('Content-Range header is not supported by the reader, but was asked to seek');
78
+ }
73
79
  return {
74
80
  status: 'incomplete',
75
81
  continueParsing: continueParsingfunction({
@@ -1,7 +1,32 @@
1
1
  import type { AnySegment } from '../../parse-result';
2
- import type { CodecIdSegment, MainSegment, TrackEntry } from './segments/all-segments';
2
+ import type { AudioSegment, ClusterSegment, CodecIdSegment, ColourSegment, DisplayHeightSegment, DisplayWidthSegment, HeightSegment, MainSegment, MatrixCoefficientsSegment, PrimariesSegment, RangeSegment, TimestampScaleSegment, TrackEntry, TrackTypeSegment, TransferCharacteristicsSegment, VideoSegment, WidthSegment } from './segments/all-segments';
3
3
  export declare const getMainSegment: (segments: AnySegment[]) => MainSegment | null;
4
4
  export declare const getTrackNumber: (track: TrackEntry) => import("./segments/all-segments").UintWithSize | null;
5
5
  export declare const getTrackCodec: (track: TrackEntry) => CodecIdSegment | null;
6
6
  export declare const getTrackTimestampScale: (track: TrackEntry) => import("./segments/all-segments").FloatWithSize | null;
7
7
  export declare const getTrackByNumber: (tracks: TrackEntry[], id: number) => TrackEntry | undefined;
8
+ export declare const getTrackId: (track: TrackEntry) => number;
9
+ export declare const getCodecSegment: (track: TrackEntry) => CodecIdSegment | null;
10
+ export declare const getColourSegment: (track: TrackEntry) => ColourSegment | null;
11
+ export declare const getTransferCharacteristicsSegment: (color: ColourSegment) => TransferCharacteristicsSegment | null;
12
+ export declare const getMatrixCoefficientsSegment: (color: ColourSegment) => MatrixCoefficientsSegment | null;
13
+ export declare const getPrimariesSegment: (color: ColourSegment) => PrimariesSegment | null;
14
+ export declare const getRangeSegment: (color: ColourSegment) => RangeSegment | null;
15
+ export declare const getDisplayHeightSegment: (track: TrackEntry) => DisplayHeightSegment | null;
16
+ export declare const getTrackTypeSegment: (track: TrackEntry) => TrackTypeSegment | null;
17
+ export declare const getWidthSegment: (track: TrackEntry) => WidthSegment | null;
18
+ export declare const getHeightSegment: (track: TrackEntry) => HeightSegment | null;
19
+ export declare const getDisplayWidthSegment: (track: TrackEntry) => DisplayWidthSegment | null;
20
+ export declare const getTracksSegment: (segment: MainSegment) => {
21
+ type: "Tracks";
22
+ value: import("./segments/all-segments").PossibleEbml[];
23
+ minVintWidth: number | null;
24
+ } | null;
25
+ export declare const getTimescaleSegment: (segment: MainSegment) => TimestampScaleSegment | null;
26
+ export declare const getVideoSegment: (track: TrackEntry) => VideoSegment | null;
27
+ export declare const getAudioSegment: (track: TrackEntry) => AudioSegment | null;
28
+ export declare const getSampleRate: (track: TrackEntry) => number | null;
29
+ export declare const getNumberOfChannels: (track: TrackEntry) => number;
30
+ export declare const getBitDepth: (track: TrackEntry) => number | null;
31
+ export declare const getPrivateData: (track: TrackEntry) => Uint8Array | null;
32
+ export declare const getClusterSegment: (segment: MainSegment) => ClusterSegment | null;