@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,136 +0,0 @@
1
- import {combineUint8Arrays} from '../boxes/webm/make-header';
2
- import type {BytesAndOffset} from '../boxes/webm/segments/all-segments';
3
- import type {WriterInterface} from '../writers/writer';
4
- import {makeCluster} from './cluster';
5
- import {makeDurationWithPadding} from './make-duration-with-padding';
6
- import {makeMatroskaHeader} from './matroska-header';
7
- import {makeMatroskaInfo} from './matroska-info';
8
- import {createMatroskaSegment} from './matroska-segment';
9
- import type {MakeTrackAudio, MakeTrackVideo} from './matroska-trackentry';
10
- import {
11
- makeMatroskaAudioTrackEntryBytes,
12
- makeMatroskaTracks,
13
- makeMatroskaVideoTrackEntryBytes,
14
- } from './matroska-trackentry';
15
- import {CREATE_TIME_SCALE} from './timescale';
16
-
17
- export type MediaFn = {
18
- save: () => Promise<void>;
19
- addSample: (chunk: EncodedVideoChunk, trackNumber: number) => Promise<void>;
20
- updateDuration: (duration: number) => Promise<void>;
21
- addTrack: (
22
- track:
23
- | Omit<MakeTrackAudio, 'trackNumber'>
24
- | Omit<MakeTrackVideo, 'trackNumber'>,
25
- ) => Promise<{trackNumber: number}>;
26
- addWaitForFinishPromise: (promise: () => Promise<void>) => void;
27
- waitForFinish: () => Promise<void>;
28
- };
29
-
30
- export const createMedia = async (
31
- writer: WriterInterface,
32
- ): Promise<MediaFn> => {
33
- const header = makeMatroskaHeader();
34
-
35
- const w = await writer.createContent();
36
- await w.write(header.bytes);
37
- const matroskaInfo = makeMatroskaInfo({
38
- timescale: CREATE_TIME_SCALE,
39
- });
40
-
41
- const currentTracks: BytesAndOffset[] = [];
42
-
43
- const matroskaTracks = makeMatroskaTracks(currentTracks);
44
- const matroskaSegment = createMatroskaSegment([
45
- matroskaInfo,
46
- ...matroskaTracks,
47
- ]);
48
-
49
- const durationOffset =
50
- (matroskaSegment.offsets.children[0].children.find(
51
- (c) => c.field === 'Duration',
52
- )?.offset ?? 0) + w.getWrittenByteCount();
53
- const tracksOffset =
54
- (matroskaSegment.offsets.children.find((o) => o.field === 'Tracks')
55
- ?.offset ?? 0) + w.getWrittenByteCount();
56
-
57
- if (!durationOffset) {
58
- throw new Error('could not get duration offset');
59
- }
60
-
61
- if (!tracksOffset) {
62
- throw new Error('could not get tracks offset');
63
- }
64
-
65
- await w.write(matroskaSegment.bytes);
66
-
67
- let currentCluster = await makeCluster(w, 0);
68
-
69
- const getClusterOrMakeNew = async (chunk: EncodedVideoChunk) => {
70
- if (!currentCluster.shouldMakeNewCluster(chunk)) {
71
- return currentCluster;
72
- }
73
-
74
- currentCluster = await makeCluster(w, chunk.timestamp);
75
- return currentCluster;
76
- };
77
-
78
- const addSample = async (chunk: EncodedVideoChunk, trackNumber: number) => {
79
- const cluster = await getClusterOrMakeNew(chunk);
80
- return cluster.addSample(chunk, trackNumber);
81
- };
82
-
83
- const updateDuration = async (newDuration: number) => {
84
- const blocks = makeDurationWithPadding(newDuration);
85
- await w.updateDataAt(
86
- durationOffset,
87
- combineUint8Arrays(blocks.map((b) => b.bytes)),
88
- );
89
- };
90
-
91
- const addTrack = async (track: BytesAndOffset) => {
92
- currentTracks.push(track);
93
- const newTracks = makeMatroskaTracks(currentTracks);
94
-
95
- await w.updateDataAt(
96
- tracksOffset,
97
- combineUint8Arrays(newTracks.map((b) => b.bytes)),
98
- );
99
- };
100
-
101
- let operationProm = Promise.resolve();
102
-
103
- const waitForFinishPromises: (() => Promise<void>)[] = [];
104
-
105
- return {
106
- save: async () => {
107
- await w.save();
108
- },
109
- addSample: (chunk, trackNumber) => {
110
- operationProm = operationProm.then(() => addSample(chunk, trackNumber));
111
- return operationProm;
112
- },
113
- updateDuration: (duration) => {
114
- operationProm = operationProm.then(() => updateDuration(duration));
115
- return operationProm;
116
- },
117
- addTrack: (track) => {
118
- const trackNumber = currentTracks.length + 1;
119
-
120
- const bytes =
121
- track.type === 'video'
122
- ? makeMatroskaVideoTrackEntryBytes({...track, trackNumber})
123
- : makeMatroskaAudioTrackEntryBytes({...track, trackNumber});
124
-
125
- operationProm = operationProm.then(() => addTrack(bytes));
126
-
127
- return operationProm.then(() => ({trackNumber}));
128
- },
129
- addWaitForFinishPromise: (promise) => {
130
- waitForFinishPromises.push(promise);
131
- },
132
- async waitForFinish() {
133
- await Promise.all(waitForFinishPromises.map((p) => p()));
134
- },
135
- };
136
- };
@@ -1,15 +0,0 @@
1
- import {padMatroskaBytes} from '../boxes/webm/make-header';
2
-
3
- export const makeDurationWithPadding = (newDuration: number) => {
4
- return padMatroskaBytes(
5
- {
6
- type: 'Duration',
7
- value: {
8
- value: newDuration,
9
- size: '64',
10
- },
11
- minVintWidth: null,
12
- },
13
- 100,
14
- );
15
- };
@@ -1,63 +0,0 @@
1
- import {makeMatroskaBytes} from '../boxes/webm/make-header';
2
-
3
- export const makeMatroskaHeader = () => {
4
- return makeMatroskaBytes({
5
- type: 'Header',
6
- value: [
7
- {
8
- minVintWidth: null,
9
- type: 'EBMLVersion',
10
- value: {
11
- value: 1,
12
- byteLength: null,
13
- },
14
- },
15
- {
16
- minVintWidth: null,
17
- type: 'EBMLReadVersion',
18
- value: {
19
- value: 1,
20
- byteLength: null,
21
- },
22
- },
23
- {
24
- type: 'EBMLMaxIDLength',
25
- value: {
26
- byteLength: null,
27
- value: 4,
28
- },
29
- minVintWidth: null,
30
- },
31
- {
32
- type: 'EBMLMaxSizeLength',
33
- value: {
34
- byteLength: null,
35
- value: 8,
36
- },
37
- minVintWidth: null,
38
- },
39
- {
40
- type: 'DocType',
41
- value: 'webm',
42
- minVintWidth: null,
43
- },
44
- {
45
- type: 'DocTypeVersion',
46
- value: {
47
- byteLength: null,
48
- value: 4,
49
- },
50
- minVintWidth: null,
51
- },
52
- {
53
- type: 'DocTypeReadVersion',
54
- value: {
55
- byteLength: null,
56
- value: 2,
57
- },
58
- minVintWidth: null,
59
- },
60
- ],
61
- minVintWidth: null,
62
- });
63
- };
@@ -1,30 +0,0 @@
1
- import {makeMatroskaBytes} from '../boxes/webm/make-header';
2
- import {makeDurationWithPadding} from './make-duration-with-padding';
3
-
4
- export const makeMatroskaInfo = ({timescale}: {timescale: number}) => {
5
- return makeMatroskaBytes({
6
- type: 'Info',
7
- value: [
8
- {
9
- type: 'TimestampScale',
10
- value: {
11
- value: timescale,
12
- byteLength: null,
13
- },
14
- minVintWidth: null,
15
- },
16
- {
17
- type: 'MuxingApp',
18
- value: '@remotion/media-parser',
19
- minVintWidth: null,
20
- },
21
- {
22
- type: 'WritingApp',
23
- value: '@remotion/media-parser',
24
- minVintWidth: null,
25
- },
26
- ...makeDurationWithPadding(0),
27
- ],
28
- minVintWidth: null,
29
- });
30
- };
@@ -1,10 +0,0 @@
1
- import {makeMatroskaBytes} from '../boxes/webm/make-header';
2
- import type {BytesAndOffset} from '../boxes/webm/segments/all-segments';
3
-
4
- export const createMatroskaSegment = (children: BytesAndOffset[]) => {
5
- return makeMatroskaBytes({
6
- type: 'Segment',
7
- value: children,
8
- minVintWidth: 8,
9
- });
10
- };
@@ -1,325 +0,0 @@
1
- import {makeMatroskaBytes, padMatroskaBytes} from '../boxes/webm/make-header';
2
- import type {BytesAndOffset} from '../boxes/webm/segments/all-segments';
3
-
4
- export type MatroskaColorParams = {
5
- transferChracteristics: 'bt709' | 'smpte170m' | 'iec61966-2-1' | null;
6
- matrixCoefficients: 'bt709' | 'bt470bg' | 'rgb' | 'smpte170m' | null;
7
- primaries: 'bt709' | 'smpte170m' | 'bt470bg' | null;
8
- fullRange: boolean | null;
9
- };
10
-
11
- export const makeMatroskaColorBytes = ({
12
- transferChracteristics,
13
- matrixCoefficients,
14
- primaries,
15
- fullRange,
16
- }: MatroskaColorParams) => {
17
- const rangeValue =
18
- transferChracteristics && matrixCoefficients
19
- ? 3
20
- : fullRange === true
21
- ? 2
22
- : fullRange === false
23
- ? 1
24
- : 0;
25
-
26
- // https://datatracker.ietf.org/doc/draft-ietf-cellar-matroska/
27
- // 5.1.4.1.28.27
28
- const primariesValue =
29
- primaries === 'bt709'
30
- ? 1
31
- : primaries === 'smpte170m'
32
- ? 6
33
- : primaries === 'bt470bg'
34
- ? 5
35
- : 2;
36
-
37
- const transferChracteristicsValue =
38
- transferChracteristics === 'bt709'
39
- ? 1
40
- : transferChracteristics === 'smpte170m'
41
- ? 6
42
- : transferChracteristics === 'iec61966-2-1'
43
- ? 13
44
- : 2;
45
-
46
- if (matrixCoefficients === 'rgb') {
47
- throw new Error('Cannot encode Matroska in RGB');
48
- }
49
-
50
- const matrixCoefficientsValue =
51
- matrixCoefficients === 'bt709'
52
- ? 1
53
- : matrixCoefficients === 'bt470bg'
54
- ? 5
55
- : matrixCoefficients === 'smpte170m'
56
- ? 6
57
- : 2;
58
-
59
- return makeMatroskaBytes({
60
- type: 'Colour',
61
- minVintWidth: null,
62
- value: [
63
- {
64
- type: 'TransferCharacteristics',
65
- value: {
66
- value: transferChracteristicsValue,
67
- byteLength: null,
68
- },
69
- minVintWidth: null,
70
- },
71
- {
72
- type: 'MatrixCoefficients',
73
- value: {
74
- value: matrixCoefficientsValue,
75
- byteLength: null,
76
- },
77
- minVintWidth: null,
78
- },
79
- {
80
- type: 'Primaries',
81
- value: {
82
- value: primariesValue,
83
- byteLength: null,
84
- },
85
- minVintWidth: null,
86
- },
87
- {
88
- type: 'Range',
89
- value: {
90
- value: rangeValue,
91
- byteLength: null,
92
- },
93
- minVintWidth: null,
94
- },
95
- ],
96
- });
97
- };
98
-
99
- export const makeMatroskaVideoBytes = ({
100
- color,
101
- width,
102
- height,
103
- }: {
104
- color: MatroskaColorParams;
105
- width: number;
106
- height: number;
107
- }) => {
108
- return makeMatroskaBytes({
109
- type: 'Video',
110
- value: [
111
- {
112
- type: 'PixelWidth',
113
- value: {
114
- value: width,
115
- byteLength: null,
116
- },
117
- minVintWidth: null,
118
- },
119
- {
120
- type: 'PixelHeight',
121
- value: {
122
- value: height,
123
- byteLength: null,
124
- },
125
- minVintWidth: null,
126
- },
127
- {
128
- type: 'FlagInterlaced',
129
- value: {
130
- // https://datatracker.ietf.org/doc/draft-ietf-cellar-matroska/
131
- // 5.1.4.1.28.1.
132
- value: 2, // 2 - progressive, no interlaced
133
- byteLength: null,
134
- },
135
- minVintWidth: null,
136
- },
137
- makeMatroskaColorBytes(color),
138
- ],
139
- minVintWidth: null,
140
- });
141
- };
142
-
143
- export type MakeTrackAudio = {
144
- trackNumber: number;
145
- codecId: string;
146
- numberOfChannels: number;
147
- sampleRate: number;
148
- type: 'audio';
149
- };
150
-
151
- export type MakeTrackVideo = {
152
- color: MatroskaColorParams;
153
- width: number;
154
- height: number;
155
- defaultDuration: number;
156
- trackNumber: number;
157
- codecId: string;
158
- type: 'video';
159
- };
160
-
161
- export const makeMatroskaAudioTrackEntryBytes = ({
162
- trackNumber,
163
- codecId,
164
- numberOfChannels: audioChannels,
165
- sampleRate,
166
- }: MakeTrackAudio) => {
167
- return makeMatroskaBytes({
168
- type: 'TrackEntry',
169
- minVintWidth: null,
170
- value: [
171
- {
172
- type: 'TrackNumber',
173
- value: {
174
- value: trackNumber,
175
- byteLength: null,
176
- },
177
- minVintWidth: null,
178
- },
179
- {
180
- type: 'TrackUID',
181
- value: '0x188FEB95C8EFABA',
182
- minVintWidth: null,
183
- },
184
- {
185
- type: 'TrackType',
186
- value: {
187
- value: 2,
188
- byteLength: null,
189
- },
190
- minVintWidth: null,
191
- },
192
- {
193
- type: 'TrackTimestampScale',
194
- value: {
195
- value: 1,
196
- size: '64',
197
- },
198
- minVintWidth: null,
199
- },
200
- {
201
- type: 'CodecID',
202
- value: codecId,
203
- minVintWidth: null,
204
- },
205
- {
206
- type: 'Audio',
207
- value: [
208
- {
209
- type: 'Channels',
210
- minVintWidth: null,
211
- value: {
212
- value: audioChannels,
213
- byteLength: null,
214
- },
215
- },
216
- {
217
- type: 'SamplingFrequency',
218
- minVintWidth: null,
219
- value: {
220
- value: sampleRate,
221
- size: '64',
222
- },
223
- },
224
- {
225
- type: 'BitDepth',
226
- minVintWidth: null,
227
- value: {
228
- value: 32,
229
- byteLength: null,
230
- },
231
- },
232
- ],
233
- minVintWidth: null,
234
- },
235
- ],
236
- });
237
- };
238
-
239
- export const makeMatroskaVideoTrackEntryBytes = ({
240
- color,
241
- width,
242
- height,
243
- defaultDuration,
244
- trackNumber,
245
- codecId,
246
- }: MakeTrackVideo) => {
247
- return makeMatroskaBytes({
248
- type: 'TrackEntry',
249
- minVintWidth: null,
250
- value: [
251
- {
252
- type: 'TrackNumber',
253
- value: {
254
- value: trackNumber,
255
- byteLength: null,
256
- },
257
- minVintWidth: null,
258
- },
259
- {
260
- type: 'TrackUID',
261
- value: '0xab2171012bb9020a',
262
- minVintWidth: null,
263
- },
264
- {
265
- type: 'FlagLacing',
266
- value: {
267
- value: 0,
268
- byteLength: null,
269
- },
270
- minVintWidth: null,
271
- },
272
- {
273
- type: 'Language',
274
- value: 'und',
275
- minVintWidth: null,
276
- },
277
- {
278
- type: 'FlagDefault',
279
- value: {
280
- value: 0,
281
- byteLength: null,
282
- },
283
- minVintWidth: null,
284
- },
285
- {
286
- type: 'CodecID',
287
- value: codecId,
288
- minVintWidth: null,
289
- },
290
- {
291
- type: 'TrackType',
292
- value: {
293
- value: 1, // 'video'
294
- byteLength: null,
295
- },
296
- minVintWidth: null,
297
- },
298
- {
299
- type: 'DefaultDuration',
300
- value: {
301
- value: defaultDuration,
302
- byteLength: null,
303
- },
304
- minVintWidth: null,
305
- },
306
- makeMatroskaVideoBytes({
307
- color,
308
- width,
309
- height,
310
- }),
311
- ],
312
- });
313
- };
314
-
315
- export const makeMatroskaTracks = (tracks: BytesAndOffset[]) => {
316
- return padMatroskaBytes(
317
- makeMatroskaBytes({
318
- type: 'Tracks',
319
- value: tracks,
320
- minVintWidth: null,
321
- }),
322
- // TODO: That's too much padding
323
- 1000,
324
- );
325
- };
@@ -1 +0,0 @@
1
- export const CREATE_TIME_SCALE = 1_000_000;