@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 @@
1
+ export declare const createCmt: (comment: string) => Uint8Array;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCmt = void 0;
4
+ const matroska_utils_1 = require("../../matroska/matroska-utils");
5
+ const primitives_1 = require("../primitives");
6
+ const createCmt = (comment) => {
7
+ return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
8
+ // ©cmt
9
+ new Uint8Array([0xa9, 0x63, 0x6d, 0x74]),
10
+ (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
11
+ // data
12
+ (0, primitives_1.stringsToUint8Array)('data'),
13
+ // type indicator
14
+ new Uint8Array([0, 0]),
15
+ // well-known type
16
+ new Uint8Array([0, 1]),
17
+ // country indicator
18
+ new Uint8Array([0, 0]),
19
+ // language indicator
20
+ new Uint8Array([0, 0]),
21
+ // value
22
+ (0, primitives_1.stringsToUint8Array)(comment),
23
+ ])),
24
+ ]));
25
+ };
26
+ exports.createCmt = createCmt;
@@ -0,0 +1 @@
1
+ export declare const createToo: (value: string) => Uint8Array;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createToo = void 0;
4
+ const matroska_utils_1 = require("../../matroska/matroska-utils");
5
+ const primitives_1 = require("../primitives");
6
+ const createToo = (value) => {
7
+ return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
8
+ // type: ©too
9
+ new Uint8Array([0xa9, 0x74, 0x6f, 0x6f]),
10
+ // data
11
+ (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
12
+ // data
13
+ new Uint8Array([0x64, 0x61, 0x74, 0x61]),
14
+ // type indicator
15
+ new Uint8Array([0, 0]),
16
+ // well-known type
17
+ new Uint8Array([0, 1]),
18
+ // country indicator
19
+ new Uint8Array([0, 0]),
20
+ // language indicator
21
+ new Uint8Array([0, 0]),
22
+ // value
23
+ (0, primitives_1.stringsToUint8Array)(value),
24
+ ])),
25
+ ]));
26
+ };
27
+ exports.createToo = createToo;
@@ -0,0 +1,6 @@
1
+ export declare const createMdhd: ({ creationTime, modificationTime, timescale, duration, }: {
2
+ creationTime: number | null;
3
+ modificationTime: number | null;
4
+ timescale: number;
5
+ duration: number;
6
+ }) => Uint8Array;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMdhd = void 0;
4
+ const from_unix_timestamp_1 = require("../../../from-unix-timestamp");
5
+ const matroska_utils_1 = require("../../matroska/matroska-utils");
6
+ const primitives_1 = require("../primitives");
7
+ const createMdhd = ({ creationTime, modificationTime, timescale, duration, }) => {
8
+ return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
9
+ // type
10
+ (0, primitives_1.stringsToUint8Array)('mdhd'),
11
+ // version
12
+ new Uint8Array([0]),
13
+ // flags
14
+ new Uint8Array([0, 0, 0]),
15
+ // creation time
16
+ creationTime === null
17
+ ? (0, primitives_1.numberTo32BitUIntOrInt)(0)
18
+ : (0, primitives_1.numberTo32BitUIntOrInt)((0, from_unix_timestamp_1.fromUnixTimestamp)(creationTime)),
19
+ // modification time
20
+ modificationTime === null
21
+ ? (0, primitives_1.numberTo32BitUIntOrInt)(0)
22
+ : (0, primitives_1.numberTo32BitUIntOrInt)((0, from_unix_timestamp_1.fromUnixTimestamp)(modificationTime)),
23
+ // timescale
24
+ (0, primitives_1.numberTo32BitUIntOrInt)(timescale),
25
+ // duration
26
+ (0, primitives_1.numberTo32BitUIntOrInt)(Math.round((duration / 1000) * timescale)),
27
+ // language: unspecified
28
+ new Uint8Array([0x55, 0xc4]),
29
+ // quality
30
+ new Uint8Array([0, 0]),
31
+ ]));
32
+ };
33
+ exports.createMdhd = createMdhd;
@@ -0,0 +1,6 @@
1
+ import type { IsoBaseMediaTrackData } from './serialize-track';
2
+ export declare const createPaddedMoovAtom: ({ durationInUnits, trackInfo, timescale, }: {
3
+ durationInUnits: number;
4
+ trackInfo: IsoBaseMediaTrackData[];
5
+ timescale: number;
6
+ }) => Uint8Array;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPaddedMoovAtom = void 0;
4
+ const media_parser_1 = require("@remotion/media-parser");
5
+ const create_ilst_1 = require("./create-ilst");
6
+ const create_moov_1 = require("./create-moov");
7
+ const create_mvhd_1 = require("./create-mvhd");
8
+ const create_udta_1 = require("./create-udta");
9
+ const create_cmt_1 = require("./ilst/create-cmt");
10
+ const create_too_1 = require("./ilst/create-too");
11
+ const primitives_1 = require("./primitives");
12
+ const serialize_track_1 = require("./serialize-track");
13
+ const create_meta_1 = require("./udta/create-meta");
14
+ const create_hdlr_1 = require("./udta/meta/create-hdlr");
15
+ // TODO: Creates a header that is way too large
16
+ const HEADER_LENGTH = 1024000;
17
+ const createPaddedMoovAtom = ({ durationInUnits, trackInfo, timescale, }) => {
18
+ return (0, primitives_1.padIsoBaseMediaBytes)((0, create_moov_1.createMoov)({
19
+ mvhd: (0, create_mvhd_1.createMvhd)({
20
+ timescale,
21
+ durationInUnits,
22
+ matrix: primitives_1.IDENTITY_MATRIX,
23
+ nextTrackId: trackInfo
24
+ .map((t) => t.track.trackNumber)
25
+ .reduce((a, b) => Math.max(a, b), 0) + 1,
26
+ rate: 1,
27
+ volume: 1,
28
+ creationTime: Date.now(),
29
+ modificationTime: Date.now(),
30
+ }),
31
+ traks: trackInfo.map((track) => {
32
+ return (0, serialize_track_1.serializeTrack)({
33
+ timescale,
34
+ track: track.track,
35
+ durationInUnits,
36
+ samplePositions: track.samplePositions,
37
+ });
38
+ }),
39
+ udta: (0, create_udta_1.createUdta)((0, create_meta_1.createMeta)({
40
+ hdlr: (0, create_hdlr_1.createHdlr)('mdir'),
41
+ ilst: (0, create_ilst_1.createIlst)([
42
+ (0, create_too_1.createToo)('WebCodecs'),
43
+ (0, create_cmt_1.createCmt)(`Made with @remotion/webcodecs ${media_parser_1.VERSION}`),
44
+ ]),
45
+ })),
46
+ }), HEADER_LENGTH);
47
+ };
48
+ exports.createPaddedMoovAtom = createPaddedMoovAtom;
@@ -0,0 +1,26 @@
1
+ export declare const stringsToUint8Array: (str: string) => Uint8Array;
2
+ export declare const numberTo32BitUIntOrInt: (num: number) => Uint8Array;
3
+ export declare const numberTo32BitUIntOrIntLeading128: (num: number) => Uint8Array;
4
+ export declare const numberTo16BitUIntOrInt: (num: number) => Uint8Array;
5
+ export declare const setFixedPointSignedOrUnsigned1616Number: (num: number) => Uint8Array;
6
+ export declare const setFixedPointSigned230Number: (num: number) => Uint8Array;
7
+ export declare const addSize: (arr: Uint8Array) => Uint8Array;
8
+ export declare const addLeading128Size: (arr: Uint8Array) => Uint8Array;
9
+ export declare const floatTo16Point1632Bit: (number: number) => Uint8Array;
10
+ export declare const floatTo16Point16_16Bit: (number: number) => Uint8Array;
11
+ export declare const serializeMatrix: (matrix: number[]) => Uint8Array;
12
+ export declare const stringToPascalString: (str: string) => Uint8Array;
13
+ export declare const padIsoBaseMediaBytes: (data: Uint8Array, totalLength: number) => Uint8Array;
14
+ type ThreeDMatrix = [
15
+ number,
16
+ number,
17
+ number,
18
+ number,
19
+ number,
20
+ number,
21
+ number,
22
+ number,
23
+ number
24
+ ];
25
+ export declare const IDENTITY_MATRIX: ThreeDMatrix;
26
+ export {};
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IDENTITY_MATRIX = exports.padIsoBaseMediaBytes = exports.stringToPascalString = exports.serializeMatrix = exports.floatTo16Point16_16Bit = exports.floatTo16Point1632Bit = exports.addLeading128Size = exports.addSize = exports.setFixedPointSigned230Number = exports.setFixedPointSignedOrUnsigned1616Number = exports.numberTo16BitUIntOrInt = exports.numberTo32BitUIntOrIntLeading128 = exports.numberTo32BitUIntOrInt = exports.stringsToUint8Array = void 0;
4
+ const matroska_utils_1 = require("../matroska/matroska-utils");
5
+ const stringsToUint8Array = (str) => {
6
+ return new TextEncoder().encode(str);
7
+ };
8
+ exports.stringsToUint8Array = stringsToUint8Array;
9
+ const numberTo32BitUIntOrInt = (num) => {
10
+ return new Uint8Array([
11
+ (num >> 24) & 0xff,
12
+ (num >> 16) & 0xff,
13
+ (num >> 8) & 0xff,
14
+ num & 0xff,
15
+ ]);
16
+ };
17
+ exports.numberTo32BitUIntOrInt = numberTo32BitUIntOrInt;
18
+ const numberTo32BitUIntOrIntLeading128 = (num) => {
19
+ const arr = [
20
+ (num >> 24) & 0xff,
21
+ (num >> 16) & 0xff,
22
+ (num >> 8) & 0xff,
23
+ num & 0xff,
24
+ ];
25
+ for (const i in arr) {
26
+ if (arr[i] === 0) {
27
+ arr[i] = 128;
28
+ }
29
+ else {
30
+ break;
31
+ }
32
+ }
33
+ return new Uint8Array(arr);
34
+ };
35
+ exports.numberTo32BitUIntOrIntLeading128 = numberTo32BitUIntOrIntLeading128;
36
+ const numberTo16BitUIntOrInt = (num) => {
37
+ return new Uint8Array([(num >> 8) & 0xff, num & 0xff]);
38
+ };
39
+ exports.numberTo16BitUIntOrInt = numberTo16BitUIntOrInt;
40
+ const setFixedPointSignedOrUnsigned1616Number = (num) => {
41
+ const val = Math.round(num * 2 ** 16);
42
+ return (0, exports.numberTo32BitUIntOrInt)(val);
43
+ };
44
+ exports.setFixedPointSignedOrUnsigned1616Number = setFixedPointSignedOrUnsigned1616Number;
45
+ const setFixedPointSigned230Number = (num) => {
46
+ const val = Math.round(num * 2 ** 30);
47
+ return (0, exports.numberTo32BitUIntOrInt)(val);
48
+ };
49
+ exports.setFixedPointSigned230Number = setFixedPointSigned230Number;
50
+ const addSize = (arr) => {
51
+ return (0, matroska_utils_1.combineUint8Arrays)([(0, exports.numberTo32BitUIntOrInt)(arr.length + 4), arr]);
52
+ };
53
+ exports.addSize = addSize;
54
+ const addLeading128Size = (arr) => {
55
+ return (0, matroska_utils_1.combineUint8Arrays)([
56
+ (0, exports.numberTo32BitUIntOrIntLeading128)(arr.length),
57
+ arr,
58
+ ]);
59
+ };
60
+ exports.addLeading128Size = addLeading128Size;
61
+ const floatTo16Point1632Bit = (number) => {
62
+ // Ensure the number has exactly 2 decimal places
63
+ const fixedNumber = Number(number.toFixed(2));
64
+ // Create a new Uint8Array of 4 bytes
65
+ const result = new Uint8Array(4);
66
+ // Extract digits
67
+ const tens = Math.floor(fixedNumber / 10);
68
+ const ones = Math.floor(fixedNumber % 10);
69
+ const tenths = Math.floor((fixedNumber * 10) % 10);
70
+ const hundredths = Math.floor((fixedNumber * 100) % 10);
71
+ // Assign to array
72
+ result[0] = tens;
73
+ result[1] = ones;
74
+ result[2] = tenths;
75
+ result[3] = hundredths;
76
+ return result;
77
+ };
78
+ exports.floatTo16Point1632Bit = floatTo16Point1632Bit;
79
+ const floatTo16Point16_16Bit = (number) => {
80
+ // Ensure the number has exactly 2 decimal places
81
+ const fixedNumber = Number(number.toFixed(2));
82
+ // Create a new Uint8Array of 4 bytes
83
+ const result = new Uint8Array(2);
84
+ // Extract digits
85
+ const ones = Math.floor(fixedNumber % 10);
86
+ const tenths = Math.floor((fixedNumber * 10) % 10);
87
+ // Assign to array
88
+ result[0] = ones;
89
+ result[1] = tenths;
90
+ return result;
91
+ };
92
+ exports.floatTo16Point16_16Bit = floatTo16Point16_16Bit;
93
+ const serializeMatrix = (matrix) => {
94
+ return (0, matroska_utils_1.combineUint8Arrays)([
95
+ (0, exports.setFixedPointSignedOrUnsigned1616Number)(matrix[0]),
96
+ (0, exports.setFixedPointSignedOrUnsigned1616Number)(matrix[1]),
97
+ (0, exports.setFixedPointSigned230Number)(matrix[2]),
98
+ (0, exports.setFixedPointSignedOrUnsigned1616Number)(matrix[3]),
99
+ (0, exports.setFixedPointSignedOrUnsigned1616Number)(matrix[4]),
100
+ (0, exports.setFixedPointSigned230Number)(matrix[5]),
101
+ (0, exports.setFixedPointSignedOrUnsigned1616Number)(matrix[6]),
102
+ (0, exports.setFixedPointSignedOrUnsigned1616Number)(matrix[7]),
103
+ (0, exports.setFixedPointSigned230Number)(matrix[8]),
104
+ ]);
105
+ };
106
+ exports.serializeMatrix = serializeMatrix;
107
+ const stringToPascalString = (str) => {
108
+ // Create a fixed 32-byte Uint8Array
109
+ const buffer = new Uint8Array(32);
110
+ // Convert the string characters to bytes
111
+ for (let i = 0; i < Math.min(str.length, 32); i++) {
112
+ buffer[i] = str.charCodeAt(i);
113
+ }
114
+ return buffer;
115
+ };
116
+ exports.stringToPascalString = stringToPascalString;
117
+ const padIsoBaseMediaBytes = (data, totalLength) => {
118
+ if (data.length - 8 > totalLength) {
119
+ throw new Error(`Data is longer than the total length: ${data.length - 8} > ${totalLength}`);
120
+ }
121
+ if (data.length - 8 === totalLength) {
122
+ return data;
123
+ }
124
+ return (0, matroska_utils_1.combineUint8Arrays)([
125
+ data,
126
+ (0, exports.addSize)((0, matroska_utils_1.combineUint8Arrays)([
127
+ (0, exports.stringsToUint8Array)('free'),
128
+ new Uint8Array(totalLength - (data.length - 8)),
129
+ ])),
130
+ ]);
131
+ };
132
+ exports.padIsoBaseMediaBytes = padIsoBaseMediaBytes;
133
+ exports.IDENTITY_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1];
@@ -0,0 +1,9 @@
1
+ import type { SamplePosition } from '@remotion/media-parser';
2
+ import type { MakeTrackAudio, MakeTrackVideo } from '../make-track-info';
3
+ export type IsoBaseMediaTrackData = {
4
+ track: MakeTrackVideo | MakeTrackAudio;
5
+ durationInUnits: number;
6
+ samplePositions: SamplePosition[];
7
+ timescale: number;
8
+ };
9
+ export declare const serializeTrack: ({ track, durationInUnits, samplePositions, timescale, }: IsoBaseMediaTrackData) => Uint8Array;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serializeTrack = void 0;
4
+ const create_codec_specific_data_1 = require("./codec-specific/create-codec-specific-data");
5
+ const create_mdia_1 = require("./create-mdia");
6
+ const create_trak_1 = require("./create-trak");
7
+ const create_mdhd_1 = require("./mdia/create-mdhd");
8
+ const primitives_1 = require("./primitives");
9
+ const create_tkhd_1 = require("./trak/create-tkhd");
10
+ const create_minf_1 = require("./trak/mdia/create-minf");
11
+ const create_smhd_1 = require("./trak/mdia/minf/create-smhd");
12
+ const create_stbl_1 = require("./trak/mdia/minf/create-stbl");
13
+ const create_vmhd_1 = require("./trak/mdia/minf/create-vmhd");
14
+ const create_hdlr_1 = require("./udta/meta/create-hdlr");
15
+ const serializeTrack = ({ track, durationInUnits, samplePositions, timescale, }) => {
16
+ if (track.codec !== 'h264' && track.codec !== 'aac') {
17
+ throw new Error('Currently only H.264 and AAC is supported');
18
+ }
19
+ return (0, create_trak_1.createTrak)({
20
+ tkhd: track.codec === 'aac'
21
+ ? (0, create_tkhd_1.createTkhdForAudio)({
22
+ creationTime: Date.now(),
23
+ flags: create_tkhd_1.TKHD_FLAGS.TRACK_ENABLED | create_tkhd_1.TKHD_FLAGS.TRACK_IN_MOVIE,
24
+ modificationTime: Date.now(),
25
+ duration: durationInUnits,
26
+ trackId: track.trackNumber,
27
+ volume: 1,
28
+ timescale,
29
+ })
30
+ : track.type === 'video'
31
+ ? (0, create_tkhd_1.createTkhdForVideo)({
32
+ creationTime: Date.now(),
33
+ modificationTime: Date.now(),
34
+ duration: durationInUnits,
35
+ flags: create_tkhd_1.TKHD_FLAGS.TRACK_ENABLED | create_tkhd_1.TKHD_FLAGS.TRACK_IN_MOVIE,
36
+ height: track.height,
37
+ width: track.width,
38
+ matrix: primitives_1.IDENTITY_MATRIX,
39
+ trackId: track.trackNumber,
40
+ volume: 0,
41
+ timescale,
42
+ })
43
+ : new Uint8Array((0, primitives_1.stringsToUint8Array)('wrong')),
44
+ mdia: (0, create_mdia_1.createMdia)({
45
+ mdhd: (0, create_mdhd_1.createMdhd)({
46
+ creationTime: null,
47
+ modificationTime: null,
48
+ duration: durationInUnits,
49
+ timescale: track.timescale,
50
+ }),
51
+ hdlr: track.type === 'video' ? (0, create_hdlr_1.createHdlr)('video') : (0, create_hdlr_1.createHdlr)('audio'),
52
+ minf: (0, create_minf_1.createMinf)({
53
+ stblAtom: (0, create_stbl_1.createStbl)({
54
+ samplePositions,
55
+ isVideo: track.type === 'video',
56
+ codecSpecificData: (0, create_codec_specific_data_1.createCodecSpecificData)(track),
57
+ }),
58
+ vmhdAtom: track.type === 'audio' ? (0, create_smhd_1.createSmhd)() : (0, create_vmhd_1.createVmhd)(),
59
+ }),
60
+ }),
61
+ });
62
+ };
63
+ exports.serializeTrack = serializeTrack;
@@ -0,0 +1,27 @@
1
+ export declare const TKHD_FLAGS: {
2
+ TRACK_ENABLED: number;
3
+ TRACK_IN_MOVIE: number;
4
+ TRACK_IN_PREVIEW: number;
5
+ TRACK_IN_POSTER: number;
6
+ };
7
+ export declare const createTkhdForAudio: ({ creationTime, modificationTime, flags, trackId, duration, volume, timescale, }: {
8
+ creationTime: number | null;
9
+ modificationTime: number | null;
10
+ flags: number;
11
+ trackId: number;
12
+ duration: number;
13
+ volume: number;
14
+ timescale: number;
15
+ }) => Uint8Array;
16
+ export declare const createTkhdForVideo: ({ creationTime, modificationTime, duration, trackId, volume, matrix, width, height, flags, timescale, }: {
17
+ creationTime: number | null;
18
+ modificationTime: number | null;
19
+ trackId: number;
20
+ duration: number;
21
+ volume: number;
22
+ matrix: number[];
23
+ width: number;
24
+ height: number;
25
+ flags: number;
26
+ timescale: number;
27
+ }) => Uint8Array;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTkhdForVideo = exports.createTkhdForAudio = exports.TKHD_FLAGS = void 0;
4
+ const from_unix_timestamp_1 = require("../../../from-unix-timestamp");
5
+ const matroska_utils_1 = require("../../matroska/matroska-utils");
6
+ const primitives_1 = require("../primitives");
7
+ exports.TKHD_FLAGS = {
8
+ TRACK_ENABLED: 0x000001,
9
+ TRACK_IN_MOVIE: 0x000002,
10
+ TRACK_IN_PREVIEW: 0x000004,
11
+ TRACK_IN_POSTER: 0x000008,
12
+ };
13
+ const createTkhdForAudio = ({ creationTime, modificationTime, flags, trackId, duration, volume, timescale, }) => {
14
+ return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
15
+ // name
16
+ (0, primitives_1.stringsToUint8Array)('tkhd'),
17
+ // version
18
+ new Uint8Array([0]),
19
+ // flags
20
+ new Uint8Array([0, 0, flags]),
21
+ // creation time
22
+ creationTime === null
23
+ ? (0, primitives_1.numberTo32BitUIntOrInt)(0)
24
+ : (0, primitives_1.numberTo32BitUIntOrInt)((0, from_unix_timestamp_1.fromUnixTimestamp)(creationTime)),
25
+ // modification time
26
+ modificationTime === null
27
+ ? (0, primitives_1.numberTo32BitUIntOrInt)(0)
28
+ : (0, primitives_1.numberTo32BitUIntOrInt)((0, from_unix_timestamp_1.fromUnixTimestamp)(modificationTime)),
29
+ // trackId
30
+ (0, primitives_1.numberTo32BitUIntOrInt)(trackId),
31
+ // reserved
32
+ new Uint8Array([0, 0, 0, 0]),
33
+ // duration
34
+ (0, primitives_1.numberTo32BitUIntOrInt)(Math.round((duration / 1000) * timescale)),
35
+ // reserved
36
+ new Uint8Array([0, 0, 0, 0]),
37
+ new Uint8Array([0, 0, 0, 0]),
38
+ // layer
39
+ new Uint8Array([0, 0]),
40
+ // alternate group, 1 = 'sound'
41
+ new Uint8Array([0, 1]),
42
+ // volume
43
+ (0, primitives_1.floatTo16Point16_16Bit)(volume),
44
+ // reserved
45
+ new Uint8Array([0, 0]),
46
+ // matrix
47
+ (0, primitives_1.serializeMatrix)(primitives_1.IDENTITY_MATRIX),
48
+ // width
49
+ (0, primitives_1.setFixedPointSignedOrUnsigned1616Number)(0),
50
+ // height
51
+ (0, primitives_1.setFixedPointSignedOrUnsigned1616Number)(0),
52
+ ]));
53
+ };
54
+ exports.createTkhdForAudio = createTkhdForAudio;
55
+ const createTkhdForVideo = ({ creationTime, modificationTime, duration, trackId, volume, matrix, width, height, flags, timescale, }) => {
56
+ const content = (0, matroska_utils_1.combineUint8Arrays)([
57
+ // name
58
+ (0, primitives_1.stringsToUint8Array)('tkhd'),
59
+ // version
60
+ new Uint8Array([0]),
61
+ // flags
62
+ new Uint8Array([0, 0, flags]),
63
+ // creation time
64
+ creationTime === null
65
+ ? (0, primitives_1.numberTo32BitUIntOrInt)(0)
66
+ : (0, primitives_1.numberTo32BitUIntOrInt)((0, from_unix_timestamp_1.fromUnixTimestamp)(creationTime)),
67
+ // modification time
68
+ modificationTime === null
69
+ ? (0, primitives_1.numberTo32BitUIntOrInt)(0)
70
+ : (0, primitives_1.numberTo32BitUIntOrInt)((0, from_unix_timestamp_1.fromUnixTimestamp)(modificationTime)),
71
+ // trackId
72
+ (0, primitives_1.numberTo32BitUIntOrInt)(trackId),
73
+ // reserved
74
+ new Uint8Array([0, 0, 0, 0]),
75
+ // duration
76
+ (0, primitives_1.numberTo32BitUIntOrInt)((duration / 1000) * timescale),
77
+ // reserved
78
+ new Uint8Array([0, 0, 0, 0]),
79
+ new Uint8Array([0, 0, 0, 0]),
80
+ // layer
81
+ new Uint8Array([0, 0]),
82
+ // alternate group, 0 = 'video'
83
+ new Uint8Array([0, 0]),
84
+ // volume
85
+ (0, primitives_1.floatTo16Point16_16Bit)(volume),
86
+ // reserved
87
+ new Uint8Array([0, 0]),
88
+ // matrix
89
+ (0, primitives_1.serializeMatrix)(matrix),
90
+ // width
91
+ (0, primitives_1.setFixedPointSignedOrUnsigned1616Number)(width),
92
+ // height
93
+ (0, primitives_1.setFixedPointSignedOrUnsigned1616Number)(height),
94
+ ]);
95
+ return (0, primitives_1.addSize)(content);
96
+ };
97
+ exports.createTkhdForVideo = createTkhdForVideo;
@@ -0,0 +1,4 @@
1
+ export declare const createMinf: ({ vmhdAtom, stblAtom, }: {
2
+ vmhdAtom: Uint8Array;
3
+ stblAtom: Uint8Array;
4
+ }) => Uint8Array;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMinf = void 0;
4
+ const matroska_utils_1 = require("../../../matroska/matroska-utils");
5
+ const primitives_1 = require("../../primitives");
6
+ const create_dinf_1 = require("./minf/create-dinf");
7
+ const createMinf = ({ vmhdAtom, stblAtom, }) => {
8
+ return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
9
+ // type
10
+ (0, primitives_1.stringsToUint8Array)('minf'),
11
+ // vmhd
12
+ vmhdAtom,
13
+ // dinf
14
+ (0, create_dinf_1.createDinf)(),
15
+ // stbl
16
+ stblAtom,
17
+ ]));
18
+ };
19
+ exports.createMinf = createMinf;
@@ -0,0 +1 @@
1
+ export declare const createDinf: () => Uint8Array;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDinf = void 0;
4
+ const matroska_utils_1 = require("../../../../matroska/matroska-utils");
5
+ const primitives_1 = require("../../../primitives");
6
+ const createDinf = () => {
7
+ return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
8
+ (0, primitives_1.stringsToUint8Array)('dinf'),
9
+ (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
10
+ (0, primitives_1.stringsToUint8Array)('dref'),
11
+ new Uint8Array([0]), // version
12
+ new Uint8Array([0, 0, 0]), // flags
13
+ new Uint8Array([0, 0, 0, 1]), // entry count
14
+ (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
15
+ (0, primitives_1.stringsToUint8Array)('url '),
16
+ new Uint8Array([0]), // version
17
+ new Uint8Array([0, 0, 1]), // flags
18
+ ])),
19
+ ])),
20
+ ]));
21
+ };
22
+ exports.createDinf = createDinf;
@@ -0,0 +1 @@
1
+ export declare const createSmhd: () => Uint8Array;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSmhd = void 0;
4
+ const matroska_utils_1 = require("../../../../matroska/matroska-utils");
5
+ const primitives_1 = require("../../../primitives");
6
+ const createSmhd = () => {
7
+ return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
8
+ // type
9
+ (0, primitives_1.stringsToUint8Array)('smhd'),
10
+ // version
11
+ new Uint8Array([0]),
12
+ // flags
13
+ new Uint8Array([0, 0, 0]),
14
+ // balance
15
+ new Uint8Array([0, 0]),
16
+ // reserved
17
+ new Uint8Array([0, 0]),
18
+ ]));
19
+ };
20
+ exports.createSmhd = createSmhd;
@@ -0,0 +1,6 @@
1
+ import type { SamplePosition } from '@remotion/media-parser';
2
+ export declare const createStbl: ({ samplePositions, codecSpecificData, isVideo, }: {
3
+ samplePositions: SamplePosition[];
4
+ codecSpecificData: Uint8Array;
5
+ isVideo: boolean;
6
+ }) => Uint8Array;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createStbl = void 0;
4
+ const truthy_1 = require("../../../../../truthy");
5
+ const matroska_utils_1 = require("../../../../matroska/matroska-utils");
6
+ const primitives_1 = require("../../../primitives");
7
+ const create_ctts_1 = require("./stbl/create-ctts");
8
+ const create_stco_1 = require("./stbl/create-stco");
9
+ const create_stsc_1 = require("./stbl/create-stsc");
10
+ const create_stss_1 = require("./stbl/create-stss");
11
+ const create_stsz_1 = require("./stbl/create-stsz");
12
+ const create_stts_1 = require("./stbl/create-stts");
13
+ const create_avc1_1 = require("./stbl/stsd/create-avc1");
14
+ const createStbl = ({ samplePositions, codecSpecificData, isVideo, }) => {
15
+ // For stts:
16
+ // https://developer.apple.com/documentation/quicktime-file-format/time-to-sample_atom
17
+ // The sample entries are ordered by time stamps; therefore, the deltas are all nonnegative.
18
+ // For the other tables, there doesn't seem to be a requirement for them to be sorted
19
+ // -> ordering the sample positions by dts
20
+ const sorted = samplePositions.slice().sort((a, b) => a.dts - b.dts);
21
+ return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
22
+ (0, primitives_1.stringsToUint8Array)('stbl'),
23
+ (0, create_avc1_1.createStsdData)(codecSpecificData),
24
+ (0, create_stts_1.createSttsAtom)(sorted),
25
+ isVideo ? (0, create_stss_1.createStss)(samplePositions) : null,
26
+ (0, create_ctts_1.createCttsBox)(samplePositions),
27
+ (0, create_stsc_1.createStsc)(samplePositions),
28
+ (0, create_stsz_1.createStsz)(samplePositions),
29
+ (0, create_stco_1.createStcoAtom)(samplePositions),
30
+ isVideo
31
+ ? null
32
+ : new Uint8Array([
33
+ 0x00, 0x00, 0x00, 0x1a, 0x73, 0x67, 0x70, 0x64, 0x01, 0x00, 0x00,
34
+ 0x00, 0x72, 0x6f, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
35
+ 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1c, 0x73, 0x62, 0x67,
36
+ 0x70, 0x00, 0x00, 0x00, 0x00, 0x72, 0x6f, 0x6c, 0x6c, 0x00, 0x00,
37
+ 0x00, 0x01, 0x00, 0x00, 0x0a, 0x19, 0x00, 0x00, 0x00, 0x01,
38
+ ]),
39
+ ].filter(truthy_1.truthy)));
40
+ };
41
+ exports.createStbl = createStbl;
@@ -0,0 +1 @@
1
+ export declare const createVmhd: () => Uint8Array;