@remotion/webcodecs 4.0.245 → 4.0.247

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 (200) hide show
  1. package/dist/audio-decoder.d.ts +2 -1
  2. package/dist/audio-encoder.d.ts +2 -1
  3. package/dist/auto-select-writer.d.ts +1 -1
  4. package/dist/auto-select-writer.js +4 -4
  5. package/dist/convert-encoded-chunk.d.ts +0 -1
  6. package/dist/convert-encoded-chunk.js +1 -21
  7. package/dist/convert-media.d.ts +2 -1
  8. package/dist/convert-media.js +4 -2
  9. package/dist/create/event-emitter.d.ts +31 -0
  10. package/dist/create/event-emitter.js +25 -0
  11. package/dist/create/iso-base-media/codec-specific/avc1.d.ts +2 -0
  12. package/dist/create/iso-base-media/codec-specific/avc1.js +48 -0
  13. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +22 -0
  14. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +36 -0
  15. package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +2 -0
  16. package/dist/create/iso-base-media/codec-specific/mp4a.js +74 -0
  17. package/dist/create/iso-base-media/create-colr.d.ts +6 -0
  18. package/dist/create/iso-base-media/create-colr.js +26 -0
  19. package/dist/create/iso-base-media/create-ftyp.d.ts +10 -0
  20. package/dist/create/iso-base-media/create-ftyp.js +22 -0
  21. package/dist/create/iso-base-media/create-ilst.d.ts +1 -0
  22. package/dist/create/iso-base-media/create-ilst.js +14 -0
  23. package/dist/create/iso-base-media/create-iso-base-media.d.ts +2 -0
  24. package/dist/create/iso-base-media/create-iso-base-media.js +184 -0
  25. package/dist/create/iso-base-media/create-mdia.d.ts +5 -0
  26. package/dist/create/iso-base-media/create-mdia.js +18 -0
  27. package/dist/create/iso-base-media/create-moov.d.ts +5 -0
  28. package/dist/create/iso-base-media/create-moov.js +18 -0
  29. package/dist/create/iso-base-media/create-mvhd.d.ts +10 -0
  30. package/dist/create/iso-base-media/create-mvhd.js +48 -0
  31. package/dist/create/iso-base-media/create-trak.d.ts +4 -0
  32. package/dist/create/iso-base-media/create-trak.js +17 -0
  33. package/dist/create/iso-base-media/create-udta.d.ts +1 -0
  34. package/dist/create/iso-base-media/create-udta.js +14 -0
  35. package/dist/create/iso-base-media/create-url.d.ts +1 -0
  36. package/dist/create/iso-base-media/create-url.js +16 -0
  37. package/dist/create/iso-base-media/example-stts.d.ts +3 -0
  38. package/dist/create/iso-base-media/example-stts.js +2797 -0
  39. package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -0
  40. package/dist/create/iso-base-media/ilst/create-cmt.js +26 -0
  41. package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -0
  42. package/dist/create/iso-base-media/ilst/create-too.js +27 -0
  43. package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +6 -0
  44. package/dist/create/iso-base-media/mdia/create-mdhd.js +33 -0
  45. package/dist/create/iso-base-media/mp4-header.d.ts +6 -0
  46. package/dist/create/iso-base-media/mp4-header.js +48 -0
  47. package/dist/create/iso-base-media/primitives.d.ts +26 -0
  48. package/dist/create/iso-base-media/primitives.js +133 -0
  49. package/dist/create/iso-base-media/serialize-track.d.ts +9 -0
  50. package/dist/create/iso-base-media/serialize-track.js +63 -0
  51. package/dist/create/iso-base-media/trak/create-tkhd.d.ts +27 -0
  52. package/dist/create/iso-base-media/trak/create-tkhd.js +97 -0
  53. package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +4 -0
  54. package/dist/create/iso-base-media/trak/mdia/create-minf.js +19 -0
  55. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -0
  56. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.js +22 -0
  57. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -0
  58. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.js +20 -0
  59. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +6 -0
  60. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +41 -0
  61. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -0
  62. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.js +20 -0
  63. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +2 -0
  64. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +45 -0
  65. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +2 -0
  66. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.js +28 -0
  67. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +2 -0
  68. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.js +56 -0
  69. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +2 -0
  70. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.js +23 -0
  71. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +2 -0
  72. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.js +25 -0
  73. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +2 -0
  74. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +51 -0
  75. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -0
  76. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.js +20 -0
  77. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -0
  78. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.js +16 -0
  79. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -0
  80. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.js +13 -0
  81. package/dist/create/iso-base-media/udta/create-meta.d.ts +4 -0
  82. package/dist/create/iso-base-media/udta/create-meta.js +20 -0
  83. package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -0
  84. package/dist/create/iso-base-media/udta/meta/create-hdlr.js +32 -0
  85. package/dist/create/make-track-info.d.ts +20 -0
  86. package/dist/create/matroska/cluster-segment.d.ts +10 -0
  87. package/dist/create/matroska/cluster-segment.js +38 -0
  88. package/dist/create/matroska/cluster.d.ts +25 -0
  89. package/dist/create/matroska/cluster.js +76 -0
  90. package/dist/create/matroska/color.d.ts +2 -0
  91. package/dist/create/matroska/color.js +85 -0
  92. package/dist/create/matroska/create-matroska-media.d.ts +2 -0
  93. package/dist/create/matroska/create-matroska-media.js +189 -0
  94. package/dist/create/matroska/make-duration-with-padding.d.ts +1 -0
  95. package/dist/create/matroska/make-duration-with-padding.js +15 -0
  96. package/dist/create/matroska/matroska-cues.d.ts +6 -0
  97. package/dist/create/matroska/matroska-cues.js +49 -0
  98. package/dist/create/matroska/matroska-header.d.ts +1 -0
  99. package/dist/create/matroska/matroska-header.js +66 -0
  100. package/dist/create/matroska/matroska-info.d.ts +3 -0
  101. package/dist/create/matroska/matroska-info.js +33 -0
  102. package/dist/create/matroska/matroska-seek.d.ts +6 -0
  103. package/dist/create/matroska/matroska-seek.js +32 -0
  104. package/dist/create/matroska/matroska-segment.d.ts +3 -0
  105. package/dist/create/matroska/matroska-segment.js +13 -0
  106. package/dist/create/matroska/matroska-trackentry.d.ts +10 -0
  107. package/dist/create/matroska/matroska-trackentry.js +249 -0
  108. package/dist/create/matroska/matroska-utils.d.ts +30 -0
  109. package/dist/create/matroska/matroska-utils.js +292 -0
  110. package/dist/create/media-fn.d.ts +32 -0
  111. package/dist/create/progress-tracker.d.ts +9 -0
  112. package/dist/create/progress-tracker.js +67 -0
  113. package/dist/create/timescale.d.ts +1 -0
  114. package/dist/create/timescale.js +4 -0
  115. package/dist/create/wav/create-wav.d.ts +2 -0
  116. package/dist/create/wav/create-wav.js +110 -0
  117. package/dist/create/with-resolvers.d.ts +10 -0
  118. package/dist/create/with-resolvers.js +28 -0
  119. package/dist/esm/buffer.mjs +74 -0
  120. package/dist/esm/index.mjs +2518 -40
  121. package/dist/esm/web-fs.mjs +92 -0
  122. package/dist/from-unix-timestamp.d.ts +1 -0
  123. package/dist/from-unix-timestamp.js +11 -0
  124. package/dist/index.d.ts +1 -0
  125. package/dist/io-manager/io-synchronizer.d.ts +1 -1
  126. package/dist/io-manager/io-synchronizer.js +5 -4
  127. package/dist/io-manager/make-timeout-promise.js +2 -2
  128. package/dist/on-audio-track.d.ts +3 -1
  129. package/dist/on-video-track.d.ts +3 -1
  130. package/dist/select-container-creator.d.ts +1 -1
  131. package/dist/select-container-creator.js +6 -4
  132. package/dist/test/avc1.test.d.ts +1 -0
  133. package/dist/test/avc1.test.js +39 -0
  134. package/dist/test/avcc.test.d.ts +1 -0
  135. package/dist/test/avcc.test.js +15 -0
  136. package/dist/test/cmt.test.d.ts +1 -0
  137. package/dist/test/cmt.test.js +13 -0
  138. package/dist/test/colr.test.d.ts +1 -0
  139. package/dist/test/colr.test.js +16 -0
  140. package/dist/test/create-ftyp.test.d.ts +1 -0
  141. package/dist/test/create-ftyp.test.js +47 -0
  142. package/dist/test/create-matroska.test.d.ts +1 -0
  143. package/dist/test/create-matroska.test.js +101 -0
  144. package/dist/test/create-mvhd.test.d.ts +1 -0
  145. package/dist/test/create-mvhd.test.js +108 -0
  146. package/dist/test/ctts.test.d.ts +1 -0
  147. package/dist/test/ctts.test.js +49 -0
  148. package/dist/test/dinf.test.d.ts +1 -0
  149. package/dist/test/dinf.test.js +12 -0
  150. package/dist/test/ilst.test.d.ts +1 -0
  151. package/dist/test/ilst.test.js +22 -0
  152. package/dist/test/mdhd.test.d.ts +1 -0
  153. package/dist/test/mdhd.test.js +17 -0
  154. package/dist/test/meta.test.d.ts +1 -0
  155. package/dist/test/meta.test.js +26 -0
  156. package/dist/test/mp4a.test.d.ts +1 -0
  157. package/dist/test/mp4a.test.js +24 -0
  158. package/dist/test/pasp.test.d.ts +1 -0
  159. package/dist/test/pasp.test.js +12 -0
  160. package/dist/test/stbl.test.js +166 -0
  161. package/dist/test/stco.test.d.ts +1 -0
  162. package/dist/test/stco.test.js +34 -0
  163. package/dist/test/stsc.test.d.ts +1 -0
  164. package/dist/test/stsc.test.js +63 -0
  165. package/dist/test/stsd.test.d.ts +1 -0
  166. package/dist/test/stsd.test.js +264 -0
  167. package/dist/test/stss.test.d.ts +1 -0
  168. package/dist/test/stss.test.js +14 -0
  169. package/dist/test/stsz.test.d.ts +1 -0
  170. package/dist/test/stsz.test.js +43 -0
  171. package/dist/test/stts.test.d.ts +1 -0
  172. package/dist/test/stts.test.js +12 -0
  173. package/dist/test/tkhd.test.d.ts +1 -0
  174. package/dist/test/tkhd.test.js +175 -0
  175. package/dist/test/too.test.d.ts +1 -0
  176. package/dist/test/too.test.js +12 -0
  177. package/dist/test/url.test.d.ts +1 -0
  178. package/dist/test/url.test.js +11 -0
  179. package/dist/truthy.d.ts +3 -0
  180. package/dist/truthy.js +6 -0
  181. package/dist/video-decoder.d.ts +2 -1
  182. package/dist/video-encoder.d.ts +2 -1
  183. package/dist/writers/buffer-implementation/writer.d.ts +2 -0
  184. package/dist/writers/buffer-implementation/writer.js +54 -0
  185. package/dist/writers/buffer.d.ts +2 -0
  186. package/dist/writers/buffer.js +7 -0
  187. package/dist/writers/web-fs.d.ts +3 -0
  188. package/dist/writers/web-fs.js +75 -0
  189. package/dist/writers/writer.d.ts +15 -0
  190. package/package.json +36 -5
  191. package/dist/get-operation-id.js +0 -1
  192. package/dist/resizing/resizing.d.ts +0 -13
  193. package/dist/resizing.d.ts +0 -13
  194. package/dist/rotate-video-frame.d.ts +0 -9
  195. package/dist/rotate-video-frame.js +0 -53
  196. package/dist/scaling.d.ts +0 -13
  197. /package/dist/{resizing.js → create/make-track-info.js} +0 -0
  198. /package/dist/{resizing/resizing.js → create/media-fn.js} +0 -0
  199. /package/dist/{get-operation-id.d.ts → test/stbl.test.d.ts} +0 -0
  200. /package/dist/{scaling.js → writers/writer.js} +0 -0
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeMatroskaColorBytes = void 0;
4
+ const truthy_1 = require("../../truthy");
5
+ const matroska_utils_1 = require("./matroska-utils");
6
+ const makeMatroskaColorBytes = ({ transferCharacteristics, matrixCoefficients, primaries, fullRange, }) => {
7
+ const rangeValue = transferCharacteristics && matrixCoefficients
8
+ ? 3
9
+ : fullRange === true
10
+ ? 2
11
+ : fullRange === false
12
+ ? 1
13
+ : 0;
14
+ // https://datatracker.ietf.org/doc/draft-ietf-cellar-matroska/
15
+ // 5.1.4.1.28.27
16
+ const primariesValue = primaries === 'bt709'
17
+ ? 1
18
+ : primaries === 'smpte170m'
19
+ ? 6
20
+ : primaries === 'bt470bg'
21
+ ? 5
22
+ : 2;
23
+ const transferChracteristicsValue = transferCharacteristics === 'bt709'
24
+ ? 1
25
+ : transferCharacteristics === 'smpte170m'
26
+ ? 6
27
+ : transferCharacteristics === 'iec61966-2-1'
28
+ ? 13
29
+ : 2;
30
+ if (matrixCoefficients === 'rgb') {
31
+ throw new Error('Cannot encode Matroska in RGB');
32
+ }
33
+ const matrixCoefficientsValue = matrixCoefficients === 'bt709'
34
+ ? 1
35
+ : matrixCoefficients === 'bt470bg'
36
+ ? 5
37
+ : matrixCoefficients === 'smpte170m'
38
+ ? 6
39
+ : 2;
40
+ return (0, matroska_utils_1.makeMatroskaBytes)({
41
+ type: 'Colour',
42
+ minVintWidth: null,
43
+ value: [
44
+ transferChracteristicsValue === 2
45
+ ? null
46
+ : {
47
+ type: 'TransferCharacteristics',
48
+ value: {
49
+ value: transferChracteristicsValue,
50
+ byteLength: null,
51
+ },
52
+ minVintWidth: null,
53
+ },
54
+ matrixCoefficientsValue === 2
55
+ ? null
56
+ : {
57
+ type: 'MatrixCoefficients',
58
+ value: {
59
+ value: matrixCoefficientsValue,
60
+ byteLength: null,
61
+ },
62
+ minVintWidth: null,
63
+ },
64
+ primariesValue === 2
65
+ ? null
66
+ : {
67
+ type: 'Primaries',
68
+ value: {
69
+ value: primariesValue,
70
+ byteLength: null,
71
+ },
72
+ minVintWidth: null,
73
+ },
74
+ {
75
+ type: 'Range',
76
+ value: {
77
+ value: rangeValue,
78
+ byteLength: null,
79
+ },
80
+ minVintWidth: null,
81
+ },
82
+ ].filter(truthy_1.truthy),
83
+ });
84
+ };
85
+ exports.makeMatroskaColorBytes = makeMatroskaColorBytes;
@@ -0,0 +1,2 @@
1
+ import type { MediaFn, MediaFnGeneratorInput } from '../media-fn';
2
+ export declare const createMatroskaMedia: ({ writer, onBytesProgress, onMillisecondsProgress, filename, logLevel, progressTracker, }: MediaFnGeneratorInput) => Promise<MediaFn>;
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMatroskaMedia = void 0;
4
+ const media_parser_1 = require("@remotion/media-parser");
5
+ const cluster_1 = require("./cluster");
6
+ const make_duration_with_padding_1 = require("./make-duration-with-padding");
7
+ const matroska_cues_1 = require("./matroska-cues");
8
+ const matroska_header_1 = require("./matroska-header");
9
+ const matroska_info_1 = require("./matroska-info");
10
+ const matroska_seek_1 = require("./matroska-seek");
11
+ const matroska_segment_1 = require("./matroska-segment");
12
+ const matroska_trackentry_1 = require("./matroska-trackentry");
13
+ const matroska_utils_1 = require("./matroska-utils");
14
+ const { matroskaElements } = media_parser_1.MediaParserInternals;
15
+ const timescale = 1000000;
16
+ const createMatroskaMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, filename, logLevel, progressTracker, }) => {
17
+ var _a, _b, _c, _d, _e, _f, _g;
18
+ const header = (0, matroska_header_1.makeMatroskaHeader)();
19
+ const w = await writer.createContent({ filename, mimeType: 'video/webm' });
20
+ await w.write(header.bytes);
21
+ const matroskaInfo = (0, matroska_info_1.makeMatroskaInfo)({
22
+ timescale,
23
+ });
24
+ const currentTracks = [];
25
+ const seeks = [];
26
+ const cues = [];
27
+ const trackNumbers = [];
28
+ const matroskaSegment = (0, matroska_segment_1.createMatroskaSegment)([
29
+ ...(0, matroska_seek_1.createMatroskaSeekHead)(seeks),
30
+ matroskaInfo,
31
+ ...(0, matroska_trackentry_1.makeMatroskaTracks)(currentTracks),
32
+ ]);
33
+ const infoSegment = matroskaSegment.offsets.children.find((o) => o.field === 'Info');
34
+ const durationOffset = ((_b = (_a = infoSegment === null || infoSegment === void 0 ? void 0 : infoSegment.children.find((c) => c.field === 'Duration')) === null || _a === void 0 ? void 0 : _a.offset) !== null && _b !== void 0 ? _b : 0) +
35
+ w.getWrittenByteCount();
36
+ const tracksOffset = ((_d = (_c = matroskaSegment.offsets.children.find((o) => o.field === 'Tracks')) === null || _c === void 0 ? void 0 : _c.offset) !== null && _d !== void 0 ? _d : 0) + w.getWrittenByteCount();
37
+ const seekHeadOffset = ((_f = (_e = matroskaSegment.offsets.children.find((o) => o.field === 'SeekHead')) === null || _e === void 0 ? void 0 : _e.offset) !== null && _f !== void 0 ? _f : 0) + w.getWrittenByteCount();
38
+ const infoOffset = ((_g = infoSegment === null || infoSegment === void 0 ? void 0 : infoSegment.offset) !== null && _g !== void 0 ? _g : 0) + w.getWrittenByteCount();
39
+ if (!seekHeadOffset) {
40
+ throw new Error('could not get seek offset');
41
+ }
42
+ if (!durationOffset) {
43
+ throw new Error('could not get duration offset');
44
+ }
45
+ if (!tracksOffset) {
46
+ throw new Error('could not get tracks offset');
47
+ }
48
+ if (!infoOffset) {
49
+ throw new Error('could not get tracks offset');
50
+ }
51
+ seeks.push({
52
+ hexString: matroskaElements.Info,
53
+ byte: infoOffset - seekHeadOffset,
54
+ });
55
+ seeks.push({
56
+ hexString: matroskaElements.Tracks,
57
+ byte: tracksOffset - seekHeadOffset,
58
+ });
59
+ const updateSeekWrite = async () => {
60
+ const updatedSeek = (0, matroska_seek_1.createMatroskaSeekHead)(seeks);
61
+ await w.updateDataAt(seekHeadOffset, (0, matroska_utils_1.combineUint8Arrays)(updatedSeek.map((b) => b.bytes)));
62
+ onBytesProgress(w.getWrittenByteCount());
63
+ };
64
+ const segmentOffset = w.getWrittenByteCount();
65
+ const updateSegmentSize = async (size) => {
66
+ const data = (0, matroska_utils_1.getVariableInt)(size, matroska_segment_1.MATROSKA_SEGMENT_MIN_VINT_WIDTH);
67
+ await w.updateDataAt(segmentOffset + (0, matroska_utils_1.matroskaToHex)(matroskaElements.Segment).byteLength, data);
68
+ onBytesProgress(w.getWrittenByteCount());
69
+ };
70
+ await w.write(matroskaSegment.bytes);
71
+ const clusterOffset = w.getWrittenByteCount();
72
+ let currentCluster = await (0, cluster_1.makeCluster)({
73
+ writer: w,
74
+ clusterStartTimestamp: 0,
75
+ timescale,
76
+ logLevel,
77
+ });
78
+ seeks.push({
79
+ hexString: matroskaElements.Cluster,
80
+ byte: clusterOffset - seekHeadOffset,
81
+ });
82
+ const getClusterOrMakeNew = async ({ chunk, isVideo, }) => {
83
+ // In Safari, samples can arrive out of order, e.g public/bigbuckbunny.mp4
84
+ // Therefore, only updating track number progress if it is a keyframe
85
+ // to allow for timestamps to be lower than the previous one
86
+ var _a, _b;
87
+ progressTracker.setPossibleLowestTimestamp(Math.min(chunk.timestamp, (_a = chunk.cts) !== null && _a !== void 0 ? _a : Infinity, (_b = chunk.dts) !== null && _b !== void 0 ? _b : Infinity));
88
+ const smallestProgress = progressTracker.getSmallestProgress();
89
+ if (!currentCluster.shouldMakeNewCluster({
90
+ newT: smallestProgress,
91
+ isVideo,
92
+ chunk,
93
+ })) {
94
+ return { cluster: currentCluster, isNew: false, smallestProgress };
95
+ }
96
+ currentCluster = await (0, cluster_1.makeCluster)({
97
+ writer: w,
98
+ clusterStartTimestamp: smallestProgress,
99
+ timescale,
100
+ logLevel,
101
+ });
102
+ return { cluster: currentCluster, isNew: true, smallestProgress };
103
+ };
104
+ const updateDuration = async (newDuration) => {
105
+ const blocks = (0, make_duration_with_padding_1.makeDurationWithPadding)(newDuration);
106
+ await w.updateDataAt(durationOffset, blocks.bytes);
107
+ onBytesProgress(w.getWrittenByteCount());
108
+ };
109
+ const addSample = async ({ chunk, trackNumber, isVideo, }) => {
110
+ var _a;
111
+ const { cluster, isNew, smallestProgress } = await getClusterOrMakeNew({
112
+ chunk,
113
+ isVideo,
114
+ });
115
+ const newDuration = Math.round((chunk.timestamp + ((_a = chunk.duration) !== null && _a !== void 0 ? _a : 0)) / 1000);
116
+ await updateDuration(newDuration);
117
+ const { timecodeRelativeToCluster } = await cluster.addSample(chunk, trackNumber);
118
+ if (isNew) {
119
+ const newCluster = w.getWrittenByteCount();
120
+ cues.push({
121
+ time: (0, cluster_1.timestampToClusterTimestamp)(smallestProgress, timescale) +
122
+ timecodeRelativeToCluster,
123
+ clusterPosition: newCluster - seekHeadOffset,
124
+ trackNumber,
125
+ });
126
+ }
127
+ if (chunk.type === 'key') {
128
+ progressTracker.updateTrackProgress(trackNumber, chunk.timestamp);
129
+ }
130
+ onBytesProgress(w.getWrittenByteCount());
131
+ onMillisecondsProgress(newDuration);
132
+ };
133
+ const addTrack = async (track) => {
134
+ currentTracks.push(track);
135
+ const newTracks = (0, matroska_trackentry_1.makeMatroskaTracks)(currentTracks);
136
+ progressTracker.registerTrack(track.trackNumber);
137
+ await w.updateDataAt(tracksOffset, (0, matroska_utils_1.combineUint8Arrays)(newTracks.map((b) => b.bytes)));
138
+ };
139
+ const operationProm = { current: Promise.resolve() };
140
+ const waitForFinishPromises = [];
141
+ return {
142
+ updateTrackSampleRate: ({ sampleRate, trackNumber }) => {
143
+ currentTracks.forEach((track) => {
144
+ if (track.trackNumber === trackNumber) {
145
+ if (track.type !== 'audio') {
146
+ throw new Error('track is not audio');
147
+ }
148
+ track.sampleRate = sampleRate;
149
+ }
150
+ });
151
+ },
152
+ save: () => {
153
+ return w.save();
154
+ },
155
+ remove: async () => {
156
+ await w.remove();
157
+ },
158
+ addSample: ({ chunk, trackNumber, isVideo }) => {
159
+ operationProm.current = operationProm.current.then(() => addSample({ chunk, trackNumber, isVideo }));
160
+ return operationProm.current;
161
+ },
162
+ addTrack: (track) => {
163
+ const trackNumber = currentTracks.length + 1;
164
+ operationProm.current = operationProm.current.then(() => addTrack({ ...track, trackNumber }));
165
+ trackNumbers.push(trackNumber);
166
+ return operationProm.current.then(() => ({ trackNumber }));
167
+ },
168
+ addWaitForFinishPromise: (promise) => {
169
+ waitForFinishPromises.push(promise);
170
+ },
171
+ async waitForFinish() {
172
+ await Promise.all(waitForFinishPromises.map((p) => p()));
173
+ await operationProm.current;
174
+ seeks.push({
175
+ hexString: matroskaElements.Cues,
176
+ byte: w.getWrittenByteCount() - seekHeadOffset,
177
+ });
178
+ await updateSeekWrite();
179
+ await w.write((0, matroska_cues_1.createMatroskaCues)(cues).bytes);
180
+ await w.waitForFinish();
181
+ const segmentSize = w.getWrittenByteCount() -
182
+ segmentOffset -
183
+ (0, matroska_utils_1.matroskaToHex)(matroskaElements.Segment).byteLength -
184
+ matroska_segment_1.MATROSKA_SEGMENT_MIN_VINT_WIDTH;
185
+ await updateSegmentSize(segmentSize);
186
+ },
187
+ };
188
+ };
189
+ exports.createMatroskaMedia = createMatroskaMedia;
@@ -0,0 +1 @@
1
+ export declare const makeDurationWithPadding: (newDuration: number) => import("./matroska-utils").BytesAndOffset;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeDurationWithPadding = void 0;
4
+ const matroska_utils_1 = require("./matroska-utils");
5
+ const makeDurationWithPadding = (newDuration) => {
6
+ return (0, matroska_utils_1.makeMatroskaBytes)({
7
+ type: 'Duration',
8
+ value: {
9
+ value: newDuration,
10
+ size: '64',
11
+ },
12
+ minVintWidth: 8,
13
+ });
14
+ };
15
+ exports.makeDurationWithPadding = makeDurationWithPadding;
@@ -0,0 +1,6 @@
1
+ export type Cue = {
2
+ time: number;
3
+ clusterPosition: number;
4
+ trackNumber: number;
5
+ };
6
+ export declare const createMatroskaCues: (cues: Cue[]) => import("./matroska-utils").BytesAndOffset;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMatroskaCues = void 0;
4
+ const matroska_utils_1 = require("./matroska-utils");
5
+ const createMatroskaCues = (cues) => {
6
+ return (0, matroska_utils_1.makeMatroskaBytes)({
7
+ type: 'Cues',
8
+ minVintWidth: null,
9
+ value: cues.map((cue) => {
10
+ return {
11
+ type: 'CuePoint',
12
+ value: [
13
+ {
14
+ type: 'CueTime',
15
+ minVintWidth: null,
16
+ value: {
17
+ value: cue.time,
18
+ byteLength: null,
19
+ },
20
+ },
21
+ {
22
+ type: 'CueTrackPositions',
23
+ value: [
24
+ {
25
+ type: 'CueTrack',
26
+ minVintWidth: null,
27
+ value: {
28
+ value: cue.trackNumber,
29
+ byteLength: null,
30
+ },
31
+ },
32
+ {
33
+ type: 'CueClusterPosition',
34
+ minVintWidth: null,
35
+ value: {
36
+ value: cue.clusterPosition,
37
+ byteLength: null,
38
+ },
39
+ },
40
+ ],
41
+ minVintWidth: null,
42
+ },
43
+ ],
44
+ minVintWidth: null,
45
+ };
46
+ }),
47
+ });
48
+ };
49
+ exports.createMatroskaCues = createMatroskaCues;
@@ -0,0 +1 @@
1
+ export declare const makeMatroskaHeader: () => import("./matroska-utils").BytesAndOffset;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeMatroskaHeader = void 0;
4
+ const matroska_utils_1 = require("./matroska-utils");
5
+ const makeMatroskaHeader = () => {
6
+ return (0, matroska_utils_1.makeMatroskaBytes)({
7
+ type: 'Header',
8
+ value: [
9
+ {
10
+ minVintWidth: null,
11
+ type: 'EBMLVersion',
12
+ value: {
13
+ value: 1,
14
+ byteLength: null,
15
+ },
16
+ },
17
+ {
18
+ minVintWidth: null,
19
+ type: 'EBMLReadVersion',
20
+ value: {
21
+ value: 1,
22
+ byteLength: null,
23
+ },
24
+ },
25
+ {
26
+ type: 'EBMLMaxIDLength',
27
+ value: {
28
+ byteLength: null,
29
+ value: 4,
30
+ },
31
+ minVintWidth: null,
32
+ },
33
+ {
34
+ type: 'EBMLMaxSizeLength',
35
+ value: {
36
+ byteLength: null,
37
+ value: 8,
38
+ },
39
+ minVintWidth: null,
40
+ },
41
+ {
42
+ type: 'DocType',
43
+ value: 'webm',
44
+ minVintWidth: null,
45
+ },
46
+ {
47
+ type: 'DocTypeVersion',
48
+ value: {
49
+ byteLength: null,
50
+ value: 4,
51
+ },
52
+ minVintWidth: null,
53
+ },
54
+ {
55
+ type: 'DocTypeReadVersion',
56
+ value: {
57
+ byteLength: null,
58
+ value: 2,
59
+ },
60
+ minVintWidth: null,
61
+ },
62
+ ],
63
+ minVintWidth: null,
64
+ });
65
+ };
66
+ exports.makeMatroskaHeader = makeMatroskaHeader;
@@ -0,0 +1,3 @@
1
+ export declare const makeMatroskaInfo: ({ timescale }: {
2
+ timescale: number;
3
+ }) => import("./matroska-utils").BytesAndOffset;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeMatroskaInfo = void 0;
4
+ const make_duration_with_padding_1 = require("./make-duration-with-padding");
5
+ const matroska_utils_1 = require("./matroska-utils");
6
+ const makeMatroskaInfo = ({ timescale }) => {
7
+ return (0, matroska_utils_1.makeMatroskaBytes)({
8
+ type: 'Info',
9
+ value: [
10
+ {
11
+ type: 'TimestampScale',
12
+ value: {
13
+ value: timescale,
14
+ byteLength: null,
15
+ },
16
+ minVintWidth: null,
17
+ },
18
+ {
19
+ type: 'MuxingApp',
20
+ value: '@remotion/media-parser',
21
+ minVintWidth: null,
22
+ },
23
+ {
24
+ type: 'WritingApp',
25
+ value: '@remotion/media-parser',
26
+ minVintWidth: null,
27
+ },
28
+ (0, make_duration_with_padding_1.makeDurationWithPadding)(0),
29
+ ],
30
+ minVintWidth: null,
31
+ });
32
+ };
33
+ exports.makeMatroskaInfo = makeMatroskaInfo;
@@ -0,0 +1,6 @@
1
+ import type { MatroskaElement } from '@remotion/media-parser';
2
+ export type Seek = {
3
+ hexString: MatroskaElement;
4
+ byte: number;
5
+ };
6
+ export declare const createMatroskaSeekHead: (seeks: Seek[]) => import("./matroska-utils").BytesAndOffset[];
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMatroskaSeekHead = void 0;
4
+ const matroska_utils_1 = require("./matroska-utils");
5
+ const createMatroskaSeekHead = (seeks) => {
6
+ return (0, matroska_utils_1.padMatroskaBytes)((0, matroska_utils_1.makeMatroskaBytes)({
7
+ type: 'SeekHead',
8
+ minVintWidth: null,
9
+ value: seeks.map((seek) => {
10
+ return {
11
+ type: 'Seek',
12
+ minVintWidth: null,
13
+ value: [
14
+ {
15
+ type: 'SeekID',
16
+ minVintWidth: null,
17
+ value: seek.hexString,
18
+ },
19
+ {
20
+ type: 'SeekPosition',
21
+ minVintWidth: null,
22
+ value: {
23
+ value: seek.byte,
24
+ byteLength: null,
25
+ },
26
+ },
27
+ ],
28
+ };
29
+ }),
30
+ }), 200);
31
+ };
32
+ exports.createMatroskaSeekHead = createMatroskaSeekHead;
@@ -0,0 +1,3 @@
1
+ import type { BytesAndOffset } from './matroska-utils';
2
+ export declare const MATROSKA_SEGMENT_MIN_VINT_WIDTH = 8;
3
+ export declare const createMatroskaSegment: (children: BytesAndOffset[]) => BytesAndOffset;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMatroskaSegment = exports.MATROSKA_SEGMENT_MIN_VINT_WIDTH = void 0;
4
+ const matroska_utils_1 = require("./matroska-utils");
5
+ exports.MATROSKA_SEGMENT_MIN_VINT_WIDTH = 8;
6
+ const createMatroskaSegment = (children) => {
7
+ return (0, matroska_utils_1.makeMatroskaBytes)({
8
+ type: 'Segment',
9
+ value: children,
10
+ minVintWidth: exports.MATROSKA_SEGMENT_MIN_VINT_WIDTH,
11
+ });
12
+ };
13
+ exports.createMatroskaSegment = createMatroskaSegment;
@@ -0,0 +1,10 @@
1
+ import type { VideoTrackColorParams } from '@remotion/media-parser';
2
+ import type { MakeTrackAudio, MakeTrackVideo } from '../make-track-info';
3
+ export declare const makeMatroskaVideoBytes: ({ color, width, height, }: {
4
+ color: VideoTrackColorParams;
5
+ width: number;
6
+ height: number;
7
+ }) => import("./matroska-utils").BytesAndOffset;
8
+ export declare const makeMatroskaAudioTrackEntryBytes: ({ trackNumber, codec, numberOfChannels, sampleRate, codecPrivate, }: MakeTrackAudio) => import("./matroska-utils").BytesAndOffset;
9
+ export declare const makeMatroskaVideoTrackEntryBytes: ({ color, width, height, trackNumber, codec, codecPrivate, }: MakeTrackVideo) => import("./matroska-utils").BytesAndOffset;
10
+ export declare const makeMatroskaTracks: (tracks: (MakeTrackAudio | MakeTrackVideo)[]) => import("./matroska-utils").BytesAndOffset[];