@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
@@ -1,52 +0,0 @@
1
- import type {BufferIterator} from '../../../buffer-iterator';
2
- import {matroskaElements} from './all-segments';
3
-
4
- type BlockFlags = {
5
- invisible: boolean;
6
- lacing: number;
7
- keyframe: boolean | null;
8
- };
9
-
10
- export const parseBlockFlags = (
11
- iterator: BufferIterator,
12
- type:
13
- | (typeof matroskaElements)['Block']
14
- | (typeof matroskaElements)['SimpleBlock'],
15
- ): BlockFlags => {
16
- if (type === matroskaElements.Block) {
17
- iterator.startReadingBits();
18
- // Reserved
19
- iterator.getBits(4);
20
- const invisible = Boolean(iterator.getBits(1));
21
- const lacing = iterator.getBits(2);
22
- // unused
23
- iterator.getBits(1);
24
- iterator.stopReadingBits();
25
- return {
26
- invisible,
27
- lacing,
28
- keyframe: null,
29
- };
30
- }
31
-
32
- if (type === matroskaElements.SimpleBlock) {
33
- iterator.startReadingBits();
34
-
35
- const keyframe = Boolean(iterator.getBits(1));
36
- // Reserved
37
- iterator.getBits(3);
38
- const invisible = Boolean(iterator.getBits(1));
39
- const lacing = iterator.getBits(2);
40
- iterator.getBits(1);
41
-
42
- iterator.stopReadingBits();
43
-
44
- return {
45
- invisible,
46
- lacing,
47
- keyframe,
48
- };
49
- }
50
-
51
- throw new Error('Unexpected type');
52
- };
@@ -1,144 +0,0 @@
1
- import type {BufferIterator} from '../../../buffer-iterator';
2
- import type {ParseResult} from '../../../parse-result';
3
- import type {ParserContext} from '../../../parser-context';
4
- import type {MatroskaSegment} from '../segments';
5
- import {expectSegment} from '../segments';
6
-
7
- type WrapChildren = (segments: MatroskaSegment[]) => MatroskaSegment;
8
-
9
- const processParseResult = ({
10
- parseResult,
11
- children,
12
- wrap,
13
- }: {
14
- children: MatroskaSegment[];
15
- parseResult: ParseResult;
16
- wrap: WrapChildren | null;
17
- }): ParseResult => {
18
- if (parseResult.status === 'incomplete') {
19
- // No need to decrement because expectSegment already does it
20
- return {
21
- status: 'incomplete',
22
- segments: [],
23
- continueParsing: async () => {
24
- const newParseResult = await parseResult.continueParsing();
25
- return processParseResult({
26
- children,
27
- parseResult: newParseResult,
28
- wrap,
29
- });
30
- },
31
- skipTo: null,
32
- };
33
- }
34
-
35
- for (const segment of parseResult.segments) {
36
- children.push(segment as MatroskaSegment);
37
- }
38
-
39
- return {
40
- status: 'done',
41
- segments: wrap ? [wrap(children)] : children,
42
- };
43
- };
44
-
45
- const continueParsingfunction =
46
- ({
47
- result,
48
- iterator,
49
- children,
50
- wrap,
51
- parserContext,
52
- length,
53
- }: {
54
- result: ParseResult;
55
- iterator: BufferIterator;
56
- children: MatroskaSegment[];
57
- wrap: WrapChildren | null;
58
- parserContext: ParserContext;
59
- length: number;
60
- }) =>
61
- async (): Promise<ParseResult> => {
62
- if (result.status !== 'incomplete') {
63
- throw new Error('expected incomplete');
64
- }
65
-
66
- const offset = iterator.counter.getOffset();
67
-
68
- const continued = await result.continueParsing();
69
- if (continued.status === 'incomplete') {
70
- return {
71
- status: 'incomplete',
72
- continueParsing: continueParsingfunction({
73
- result: continued,
74
- iterator,
75
- children,
76
- wrap,
77
- parserContext,
78
- length: length - (iterator.counter.getOffset() - offset),
79
- }),
80
- skipTo: continued.skipTo,
81
- segments: wrap ? [wrap(children)] : children,
82
- };
83
- }
84
-
85
- return expectChildren({
86
- iterator,
87
- length: length - (iterator.counter.getOffset() - offset),
88
- initialChildren: children,
89
- wrap,
90
- parserContext,
91
- });
92
- };
93
-
94
- export const expectChildren = async ({
95
- iterator,
96
- length,
97
- initialChildren,
98
- wrap,
99
- parserContext,
100
- }: {
101
- iterator: BufferIterator;
102
- length: number;
103
- initialChildren: MatroskaSegment[];
104
- wrap: WrapChildren | null;
105
- parserContext: ParserContext;
106
- }): Promise<ParseResult> => {
107
- const children: MatroskaSegment[] = [...initialChildren];
108
- const startOffset = iterator.counter.getOffset();
109
-
110
- while (iterator.counter.getOffset() < startOffset + length) {
111
- if (iterator.bytesRemaining() === 0) {
112
- break;
113
- }
114
-
115
- const parseResult = await expectSegment(iterator, parserContext);
116
-
117
- const child = processParseResult({
118
- children,
119
- parseResult,
120
- wrap,
121
- });
122
-
123
- if (child.status === 'incomplete') {
124
- return {
125
- status: 'incomplete',
126
- continueParsing: continueParsingfunction({
127
- result: child,
128
- iterator,
129
- children,
130
- wrap,
131
- parserContext,
132
- length: length - (iterator.counter.getOffset() - startOffset),
133
- }),
134
- skipTo: child.skipTo,
135
- segments: wrap ? [wrap(children)] : children,
136
- };
137
- }
138
- }
139
-
140
- return {
141
- status: 'done',
142
- segments: wrap ? [wrap(children)] : children,
143
- };
144
- };
@@ -1,38 +0,0 @@
1
- import type {TrackEntry} from './all-segments';
2
-
3
- export type TrackInfo = {
4
- codec: string;
5
- trackTimescale: number | null;
6
- };
7
-
8
- type TrackType =
9
- | 'video'
10
- | 'audio'
11
- | 'complex'
12
- | 'subtitle'
13
- | 'button'
14
- | 'control'
15
- | 'metadata';
16
-
17
- export const trackTypeToString = (trackType: number): TrackType => {
18
- switch (trackType) {
19
- case 1:
20
- return 'video';
21
- case 2:
22
- return 'audio';
23
- case 3:
24
- return 'complex';
25
- case 4:
26
- return 'subtitle';
27
- case 5:
28
- return 'button';
29
- case 6:
30
- return 'control';
31
- case 7:
32
- return 'metadata';
33
- default:
34
- throw new Error(`Unknown track type: ${trackType}`);
35
- }
36
- };
37
-
38
- export type GetTracks = () => TrackEntry[];
@@ -1,147 +0,0 @@
1
- import type {BufferIterator} from '../../buffer-iterator';
2
- import type {ParseResult} from '../../parse-result';
3
- import type {ParserContext} from '../../parser-context';
4
- import {parseEbml, postprocessEbml} from './parse-ebml';
5
- import type {PossibleEbml, TrackEntry} from './segments/all-segments';
6
- import {expectChildren} from './segments/parse-children';
7
-
8
- export type MatroskaSegment = PossibleEbml;
9
-
10
- export type OnTrackEntrySegment = (trackEntry: TrackEntry) => void;
11
-
12
- const parseSegment = async ({
13
- segmentId,
14
- iterator,
15
- length,
16
- parserContext,
17
- headerReadSoFar,
18
- }: {
19
- segmentId: string;
20
- iterator: BufferIterator;
21
- length: number;
22
- parserContext: ParserContext;
23
- headerReadSoFar: number;
24
- }): Promise<Promise<MatroskaSegment> | MatroskaSegment> => {
25
- if (length < 0) {
26
- throw new Error(`Expected length of ${segmentId} to be greater or equal 0`);
27
- }
28
-
29
- iterator.counter.decrement(headerReadSoFar);
30
-
31
- const offset = iterator.counter.getOffset();
32
- const ebml = await parseEbml(iterator, parserContext);
33
- const remapped = await postprocessEbml({offset, ebml, parserContext});
34
-
35
- return remapped;
36
- };
37
-
38
- export const expectSegment = async (
39
- iterator: BufferIterator,
40
- parserContext: ParserContext,
41
- ): Promise<ParseResult> => {
42
- const offset = iterator.counter.getOffset();
43
- if (iterator.bytesRemaining() === 0) {
44
- return {
45
- status: 'incomplete',
46
- segments: [],
47
- continueParsing: () => {
48
- return Promise.resolve(expectSegment(iterator, parserContext));
49
- },
50
- skipTo: null,
51
- };
52
- }
53
-
54
- const segmentId = iterator.getMatroskaSegmentId();
55
-
56
- if (segmentId === null) {
57
- iterator.counter.decrement(iterator.counter.getOffset() - offset);
58
- return {
59
- status: 'incomplete',
60
- segments: [],
61
- continueParsing: () => {
62
- return Promise.resolve(expectSegment(iterator, parserContext));
63
- },
64
- skipTo: null,
65
- };
66
- }
67
-
68
- const offsetBeforeVInt = iterator.counter.getOffset();
69
- const length = iterator.getVint();
70
- const offsetAfterVInt = iterator.counter.getOffset();
71
-
72
- if (length === null) {
73
- iterator.counter.decrement(iterator.counter.getOffset() - offset);
74
- return {
75
- status: 'incomplete',
76
- segments: [],
77
- continueParsing: () => {
78
- return Promise.resolve(expectSegment(iterator, parserContext));
79
- },
80
- skipTo: null,
81
- };
82
- }
83
-
84
- const bytesRemainingNow =
85
- iterator.byteLength() - iterator.counter.getOffset();
86
-
87
- if (segmentId === '0x18538067' || segmentId === '0x1f43b675') {
88
- const main = await expectChildren({
89
- iterator,
90
- length,
91
- initialChildren: [],
92
- wrap:
93
- segmentId === '0x18538067'
94
- ? (s) => ({
95
- type: 'Segment',
96
- value: s,
97
- minVintWidth: offsetAfterVInt - offsetBeforeVInt,
98
- })
99
- : (s) => ({
100
- type: 'Cluster',
101
- value: s,
102
- minVintWidth: offsetAfterVInt - offsetBeforeVInt,
103
- }),
104
- parserContext,
105
- });
106
-
107
- if (main.status === 'incomplete') {
108
- return {
109
- status: 'incomplete',
110
- segments: main.segments,
111
- skipTo: null,
112
- continueParsing: main.continueParsing,
113
- };
114
- }
115
-
116
- return {
117
- status: 'done',
118
- segments: main.segments,
119
- };
120
- }
121
-
122
- if (bytesRemainingNow < length) {
123
- const bytesRead = iterator.counter.getOffset() - offset;
124
- iterator.counter.decrement(bytesRead);
125
- return {
126
- status: 'incomplete',
127
- segments: [],
128
- continueParsing: () => {
129
- return Promise.resolve(expectSegment(iterator, parserContext));
130
- },
131
- skipTo: null,
132
- };
133
- }
134
-
135
- const segment = await parseSegment({
136
- segmentId,
137
- iterator,
138
- length,
139
- parserContext,
140
- headerReadSoFar: iterator.counter.getOffset() - offset,
141
- });
142
-
143
- return {
144
- status: 'done',
145
- segments: [segment],
146
- };
147
- };
@@ -1,45 +0,0 @@
1
- import type {AnySegment} from '../../parse-result';
2
- import type {
3
- CodecIdSegment,
4
- MainSegment,
5
- TrackEntry,
6
- TrackNumberSegment,
7
- } from './segments/all-segments';
8
-
9
- export const getMainSegment = (segments: AnySegment[]): MainSegment | null => {
10
- return segments.find((s) => s.type === 'Segment') as MainSegment | null;
11
- };
12
-
13
- export const getTrackNumber = (track: TrackEntry) => {
14
- const child = track.value.find(
15
- (b) => b.type === 'TrackNumber',
16
- ) as TrackNumberSegment | null;
17
- return child?.value ?? null;
18
- };
19
-
20
- export const getTrackCodec = (track: TrackEntry) => {
21
- const child = track.value.find(
22
- (b) => b.type === 'CodecID',
23
- ) as CodecIdSegment | null;
24
- return child ?? null;
25
- };
26
-
27
- export const getTrackTimestampScale = (track: TrackEntry) => {
28
- const child = track.value.find((b) => b.type === 'TrackTimestampScale');
29
- if (!child) {
30
- return null;
31
- }
32
-
33
- if (child.type !== 'TrackTimestampScale') {
34
- throw new Error('Expected TrackTimestampScale');
35
- }
36
-
37
- return child.value;
38
- };
39
-
40
- export const getTrackByNumber = (tracks: TrackEntry[], id: number) => {
41
- return tracks.find((track) => {
42
- const trackNumber = getTrackNumber(track);
43
- return trackNumber?.value === id;
44
- });
45
- };