@remotion/media-parser 4.0.245 → 4.0.246

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 (145) hide show
  1. package/dist/boxes/avc/create-sps-pps-data.js +10 -4
  2. package/dist/boxes/iso-base-media/to-date.d.ts +0 -1
  3. package/dist/boxes/iso-base-media/to-date.js +1 -9
  4. package/dist/boxes/transport-stream/parse-stream-packet.js +4 -4
  5. package/dist/boxes/webm/color.d.ts +0 -1
  6. package/dist/boxes/webm/color.js +1 -83
  7. package/dist/boxes/webm/parse-ebml.js +8 -10
  8. package/dist/boxes/webm/segments/all-segments.d.ts +8 -21
  9. package/dist/boxes/webm/segments/all-segments.js +7 -19
  10. package/dist/combine-uint8-arrays.d.ts +1 -0
  11. package/dist/combine-uint8-arrays.js +23 -0
  12. package/dist/esm/index.mjs +6683 -8998
  13. package/dist/file-types/detect-file-type.js +2 -2
  14. package/dist/index.d.ts +787 -27
  15. package/dist/index.js +19 -13
  16. package/dist/parse-media.js +0 -3
  17. package/dist/state/parser-state.d.ts +1 -3
  18. package/dist/state/parser-state.js +1 -2
  19. package/dist/version.d.ts +1 -1
  20. package/dist/version.js +1 -1
  21. package/package.json +3 -15
  22. package/buffer.js +0 -2
  23. package/dist/boxes/webm/ebml.d.ts +0 -2
  24. package/dist/boxes/webm/ebml.js +0 -94
  25. package/dist/boxes/webm/make-header.d.ts +0 -8
  26. package/dist/boxes/webm/make-header.js +0 -187
  27. package/dist/create/event-emitter.d.ts +0 -31
  28. package/dist/create/event-emitter.js +0 -25
  29. package/dist/create/iso-base-media/codec-specific/avc1.d.ts +0 -2
  30. package/dist/create/iso-base-media/codec-specific/avc1.js +0 -48
  31. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +0 -22
  32. package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +0 -36
  33. package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +0 -2
  34. package/dist/create/iso-base-media/codec-specific/mp4a.js +0 -74
  35. package/dist/create/iso-base-media/create-colr.d.ts +0 -6
  36. package/dist/create/iso-base-media/create-colr.js +0 -26
  37. package/dist/create/iso-base-media/create-ftyp.d.ts +0 -10
  38. package/dist/create/iso-base-media/create-ftyp.js +0 -22
  39. package/dist/create/iso-base-media/create-ilst.d.ts +0 -1
  40. package/dist/create/iso-base-media/create-ilst.js +0 -14
  41. package/dist/create/iso-base-media/create-iso-base-media.d.ts +0 -2
  42. package/dist/create/iso-base-media/create-iso-base-media.js +0 -184
  43. package/dist/create/iso-base-media/create-mdia.d.ts +0 -5
  44. package/dist/create/iso-base-media/create-mdia.js +0 -18
  45. package/dist/create/iso-base-media/create-moov.d.ts +0 -5
  46. package/dist/create/iso-base-media/create-moov.js +0 -18
  47. package/dist/create/iso-base-media/create-mvhd.d.ts +0 -10
  48. package/dist/create/iso-base-media/create-mvhd.js +0 -48
  49. package/dist/create/iso-base-media/create-trak.d.ts +0 -4
  50. package/dist/create/iso-base-media/create-trak.js +0 -17
  51. package/dist/create/iso-base-media/create-udta.d.ts +0 -1
  52. package/dist/create/iso-base-media/create-udta.js +0 -14
  53. package/dist/create/iso-base-media/create-url.d.ts +0 -1
  54. package/dist/create/iso-base-media/create-url.js +0 -16
  55. package/dist/create/iso-base-media/example-stts.d.ts +0 -3
  56. package/dist/create/iso-base-media/example-stts.js +0 -2797
  57. package/dist/create/iso-base-media/ilst/create-cmt.d.ts +0 -1
  58. package/dist/create/iso-base-media/ilst/create-cmt.js +0 -26
  59. package/dist/create/iso-base-media/ilst/create-too.d.ts +0 -1
  60. package/dist/create/iso-base-media/ilst/create-too.js +0 -27
  61. package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +0 -6
  62. package/dist/create/iso-base-media/mdia/create-mdhd.js +0 -33
  63. package/dist/create/iso-base-media/mp4-header.d.ts +0 -6
  64. package/dist/create/iso-base-media/mp4-header.js +0 -48
  65. package/dist/create/iso-base-media/primitives.d.ts +0 -15
  66. package/dist/create/iso-base-media/primitives.js +0 -133
  67. package/dist/create/iso-base-media/serialize-track.d.ts +0 -9
  68. package/dist/create/iso-base-media/serialize-track.js +0 -63
  69. package/dist/create/iso-base-media/trak/create-tkhd.d.ts +0 -27
  70. package/dist/create/iso-base-media/trak/create-tkhd.js +0 -97
  71. package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +0 -4
  72. package/dist/create/iso-base-media/trak/mdia/create-minf.js +0 -19
  73. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +0 -1
  74. package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.js +0 -22
  75. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +0 -1
  76. package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.js +0 -20
  77. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +0 -6
  78. package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +0 -41
  79. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +0 -1
  80. package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.js +0 -20
  81. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +0 -2
  82. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +0 -45
  83. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +0 -2
  84. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.js +0 -28
  85. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +0 -2
  86. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.js +0 -56
  87. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +0 -2
  88. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.js +0 -23
  89. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +0 -2
  90. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.js +0 -25
  91. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +0 -2
  92. package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +0 -51
  93. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +0 -1
  94. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.js +0 -20
  95. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +0 -1
  96. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.js +0 -16
  97. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +0 -1
  98. package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.js +0 -13
  99. package/dist/create/iso-base-media/udta/create-meta.d.ts +0 -4
  100. package/dist/create/iso-base-media/udta/create-meta.js +0 -20
  101. package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +0 -1
  102. package/dist/create/iso-base-media/udta/meta/create-hdlr.js +0 -32
  103. package/dist/create/make-track-info.d.ts +0 -20
  104. package/dist/create/make-track-info.js +0 -2
  105. package/dist/create/matroska/cluster-segment.d.ts +0 -10
  106. package/dist/create/matroska/cluster-segment.js +0 -39
  107. package/dist/create/matroska/cluster.d.ts +0 -25
  108. package/dist/create/matroska/cluster.js +0 -77
  109. package/dist/create/matroska/create-matroska-media.d.ts +0 -2
  110. package/dist/create/matroska/create-matroska-media.js +0 -189
  111. package/dist/create/matroska/make-duration-with-padding.d.ts +0 -1
  112. package/dist/create/matroska/make-duration-with-padding.js +0 -15
  113. package/dist/create/matroska/matroska-cues.d.ts +0 -6
  114. package/dist/create/matroska/matroska-cues.js +0 -49
  115. package/dist/create/matroska/matroska-header.d.ts +0 -1
  116. package/dist/create/matroska/matroska-header.js +0 -66
  117. package/dist/create/matroska/matroska-info.d.ts +0 -3
  118. package/dist/create/matroska/matroska-info.js +0 -33
  119. package/dist/create/matroska/matroska-seek.d.ts +0 -6
  120. package/dist/create/matroska/matroska-seek.js +0 -32
  121. package/dist/create/matroska/matroska-segment.d.ts +0 -3
  122. package/dist/create/matroska/matroska-segment.js +0 -13
  123. package/dist/create/matroska/matroska-trackentry.d.ts +0 -10
  124. package/dist/create/matroska/matroska-trackentry.js +0 -249
  125. package/dist/create/media-fn.d.ts +0 -32
  126. package/dist/create/media-fn.js +0 -2
  127. package/dist/create/progress-tracker.d.ts +0 -9
  128. package/dist/create/progress-tracker.js +0 -67
  129. package/dist/create/timescale.d.ts +0 -1
  130. package/dist/create/timescale.js +0 -4
  131. package/dist/create/wav/create-wav.d.ts +0 -2
  132. package/dist/create/wav/create-wav.js +0 -110
  133. package/dist/create/with-resolvers.d.ts +0 -10
  134. package/dist/create/with-resolvers.js +0 -28
  135. package/dist/esm/buffer.mjs +0 -56
  136. package/dist/esm/web-fs.mjs +0 -74
  137. package/dist/writers/buffer-implementation/writer.d.ts +0 -2
  138. package/dist/writers/buffer-implementation/writer.js +0 -54
  139. package/dist/writers/buffer.d.ts +0 -2
  140. package/dist/writers/buffer.js +0 -7
  141. package/dist/writers/web-fs.d.ts +0 -3
  142. package/dist/writers/web-fs.js +0 -75
  143. package/dist/writers/writer.d.ts +0 -15
  144. package/dist/writers/writer.js +0 -2
  145. package/web-fs.js +0 -2
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMp4a = void 0;
4
- const make_header_1 = require("../../../boxes/webm/make-header");
5
- const primitives_1 = require("../primitives");
6
- const createMp4a = ({ sampleRate, channelCount, avgBitrate, maxBitrate, codecPrivate, }) => {
7
- if (!codecPrivate) {
8
- throw new Error('Need codecPrivate for mp4a');
9
- }
10
- const esdsAtom = (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
11
- // type
12
- (0, primitives_1.stringsToUint8Array)('esds'),
13
- // version
14
- new Uint8Array([0]),
15
- // flags
16
- new Uint8Array([0, 0, 0]),
17
- // tag = 'ES_DescrTag'
18
- new Uint8Array([3]),
19
- (0, primitives_1.addLeading128Size)((0, make_header_1.combineUint8Arrays)([
20
- // ES_ID
21
- (0, primitives_1.numberTo16BitUIntOrInt)(2),
22
- // streamDependenceFlag, URL_Flag, OCRstreamFlag
23
- new Uint8Array([0]),
24
- // DecoderConfigDescrTag
25
- new Uint8Array([4]),
26
- (0, primitives_1.addLeading128Size)((0, make_header_1.combineUint8Arrays)([
27
- // objectTypeIndication
28
- new Uint8Array([0x40]),
29
- // streamType, upStream
30
- new Uint8Array([21]),
31
- // reserved
32
- new Uint8Array([0, 0, 0]),
33
- // maxBitrate
34
- (0, primitives_1.numberTo32BitUIntOrInt)(maxBitrate),
35
- // avgBitrate
36
- (0, primitives_1.numberTo32BitUIntOrInt)(avgBitrate),
37
- // DecoderSpecificInfoTag
38
- new Uint8Array([5]),
39
- // see create-aac-codecprivate.ts
40
- (0, primitives_1.addLeading128Size)(codecPrivate),
41
- ])),
42
- // SLConfigDescrTag
43
- new Uint8Array([6]),
44
- (0, primitives_1.addLeading128Size)(new Uint8Array([2])),
45
- ])),
46
- ]));
47
- return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
48
- // type
49
- (0, primitives_1.stringsToUint8Array)('mp4a'),
50
- // reserved
51
- new Uint8Array([0, 0, 0, 0, 0, 0]),
52
- // data_reference_index
53
- (0, primitives_1.numberTo16BitUIntOrInt)(1),
54
- // version
55
- (0, primitives_1.numberTo16BitUIntOrInt)(0),
56
- // revision level
57
- (0, primitives_1.numberTo16BitUIntOrInt)(0),
58
- // vendor
59
- new Uint8Array([0, 0, 0, 0]),
60
- // channelCount
61
- (0, primitives_1.numberTo16BitUIntOrInt)(channelCount),
62
- // sampleSize
63
- (0, primitives_1.numberTo16BitUIntOrInt)(16),
64
- // compressionId
65
- (0, primitives_1.numberTo16BitUIntOrInt)(0),
66
- // packet size
67
- (0, primitives_1.numberTo16BitUIntOrInt)(0),
68
- // sample rate
69
- (0, primitives_1.setFixedPointSignedOrUnsigned1616Number)(sampleRate),
70
- // esds atom
71
- esdsAtom,
72
- ]));
73
- };
74
- exports.createMp4a = createMp4a;
@@ -1,6 +0,0 @@
1
- export declare const createColr: ({ fullRange, matrixIndex, primaries, transferFunction, }: {
2
- fullRange: boolean;
3
- matrixIndex: number;
4
- primaries: number;
5
- transferFunction: number;
6
- }) => Uint8Array;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createColr = void 0;
4
- const make_header_1 = require("../../boxes/webm/make-header");
5
- const primitives_1 = require("./primitives");
6
- // TODO: Not used in creation of MP4 yet
7
- const createColr = ({ fullRange, matrixIndex, primaries, transferFunction, }) => {
8
- return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
9
- // type
10
- (0, primitives_1.stringsToUint8Array)('colr'),
11
- // colour_type
12
- (0, primitives_1.stringsToUint8Array)('nclx'),
13
- // primaries
14
- // 1 = 'ITU-R BT.7090
15
- new Uint8Array([0, primaries]),
16
- // transfer_function
17
- // 1 = 'ITU-R BT.7090
18
- new Uint8Array([0, transferFunction]),
19
- // matrix_index
20
- // 1 = 'ITU-R BT.7090
21
- new Uint8Array([0, matrixIndex]),
22
- // full_range_flag
23
- new Uint8Array([fullRange ? 1 : 0]),
24
- ]));
25
- };
26
- exports.createColr = createColr;
@@ -1,10 +0,0 @@
1
- export declare const createFtyp: ({ majorBrand, minorBrand, compatibleBrands, }: {
2
- majorBrand: string;
3
- minorBrand: number;
4
- compatibleBrands: string[];
5
- }) => Uint8Array;
6
- export declare const createIsoBaseMediaFtyp: ({ majorBrand, minorBrand, compatibleBrands, }: {
7
- majorBrand: string;
8
- minorBrand: number;
9
- compatibleBrands: string[];
10
- }) => Uint8Array;
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createIsoBaseMediaFtyp = exports.createFtyp = void 0;
4
- const make_header_1 = require("../../boxes/webm/make-header");
5
- const primitives_1 = require("./primitives");
6
- const createFtyp = ({ majorBrand, minorBrand, compatibleBrands, }) => {
7
- const type = (0, primitives_1.stringsToUint8Array)('ftyp');
8
- const majorBrandArr = (0, primitives_1.stringsToUint8Array)(majorBrand);
9
- const minorBrandArr = (0, primitives_1.numberTo32BitUIntOrInt)(minorBrand);
10
- const compatibleBrandsArr = (0, make_header_1.combineUint8Arrays)(compatibleBrands.map((b) => (0, primitives_1.stringsToUint8Array)(b)));
11
- return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
12
- type,
13
- majorBrandArr,
14
- minorBrandArr,
15
- compatibleBrandsArr,
16
- ]));
17
- };
18
- exports.createFtyp = createFtyp;
19
- const createIsoBaseMediaFtyp = ({ majorBrand, minorBrand, compatibleBrands, }) => {
20
- return (0, exports.createFtyp)({ compatibleBrands, majorBrand, minorBrand });
21
- };
22
- exports.createIsoBaseMediaFtyp = createIsoBaseMediaFtyp;
@@ -1 +0,0 @@
1
- export declare const createIlst: (items: Uint8Array[]) => Uint8Array;
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createIlst = void 0;
4
- const make_header_1 = require("../../boxes/webm/make-header");
5
- const primitives_1 = require("./primitives");
6
- const createIlst = (items) => {
7
- return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
8
- // name
9
- (0, primitives_1.stringsToUint8Array)('ilst'),
10
- // items
11
- ...items,
12
- ]));
13
- };
14
- exports.createIlst = createIlst;
@@ -1,2 +0,0 @@
1
- import type { MediaFn, MediaFnGeneratorInput } from '../media-fn';
2
- export declare const createIsoBaseMedia: ({ writer, onBytesProgress, onMillisecondsProgress, logLevel, filename, progressTracker, }: MediaFnGeneratorInput) => Promise<MediaFn>;
@@ -1,184 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createIsoBaseMedia = void 0;
4
- const make_header_1 = require("../../boxes/webm/make-header");
5
- const log_1 = require("../../log");
6
- const create_ftyp_1 = require("./create-ftyp");
7
- const mp4_header_1 = require("./mp4-header");
8
- const primitives_1 = require("./primitives");
9
- const CONTAINER_TIMESCALE = 1000;
10
- const createIsoBaseMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, logLevel, filename, progressTracker, }) => {
11
- const header = (0, create_ftyp_1.createIsoBaseMediaFtyp)({
12
- compatibleBrands: ['isom', 'iso2', 'avc1', 'mp42'],
13
- majorBrand: 'isom',
14
- minorBrand: 512,
15
- });
16
- const w = await writer.createContent({ filename, mimeType: 'video/mp4' });
17
- await w.write(header);
18
- let globalDurationInUnits = 0;
19
- const lowestTrackTimestamps = {};
20
- const trackDurations = {};
21
- const currentTracks = [];
22
- const samplePositions = [];
23
- const sampleChunkIndices = [];
24
- const moovOffset = w.getWrittenByteCount();
25
- const getPaddedMoovAtom = () => {
26
- return (0, mp4_header_1.createPaddedMoovAtom)({
27
- durationInUnits: globalDurationInUnits,
28
- trackInfo: currentTracks.map((track) => {
29
- var _a, _b;
30
- return {
31
- track,
32
- durationInUnits: (_a = trackDurations[track.trackNumber]) !== null && _a !== void 0 ? _a : 0,
33
- samplePositions: (_b = samplePositions[track.trackNumber]) !== null && _b !== void 0 ? _b : [],
34
- timescale: track.timescale,
35
- };
36
- }),
37
- timescale: CONTAINER_TIMESCALE,
38
- });
39
- };
40
- await w.write(getPaddedMoovAtom());
41
- let mdatSize = 8;
42
- const mdatSizeOffset = w.getWrittenByteCount();
43
- await w.write((0, make_header_1.combineUint8Arrays)([
44
- // size
45
- (0, primitives_1.numberTo32BitUIntOrInt)(mdatSize),
46
- // type
47
- (0, primitives_1.stringsToUint8Array)('mdat'),
48
- ]));
49
- const updateMdatSize = async () => {
50
- await w.updateDataAt(mdatSizeOffset, (0, primitives_1.numberTo32BitUIntOrInt)(mdatSize));
51
- onBytesProgress(w.getWrittenByteCount());
52
- };
53
- const operationProm = { current: Promise.resolve() };
54
- const updateMoov = async () => {
55
- await w.updateDataAt(moovOffset, getPaddedMoovAtom());
56
- onBytesProgress(w.getWrittenByteCount());
57
- };
58
- const addCodecPrivateToTrack = ({ trackNumber, codecPrivate, }) => {
59
- currentTracks.forEach((track) => {
60
- if (track.trackNumber === trackNumber) {
61
- track.codecPrivate = codecPrivate;
62
- }
63
- });
64
- };
65
- let lastChunkWasVideo = false;
66
- const addSample = async ({ chunk, trackNumber, isVideo, codecPrivate, }) => {
67
- var _a, _b, _c, _d;
68
- const position = w.getWrittenByteCount();
69
- await w.write(chunk.data);
70
- mdatSize += chunk.data.length;
71
- onBytesProgress(w.getWrittenByteCount());
72
- progressTracker.setPossibleLowestTimestamp(Math.min(chunk.timestamp, (_a = chunk.cts) !== null && _a !== void 0 ? _a : Infinity, (_b = chunk.dts) !== null && _b !== void 0 ? _b : Infinity));
73
- progressTracker.updateTrackProgress(trackNumber, chunk.timestamp);
74
- if (codecPrivate) {
75
- addCodecPrivateToTrack({ trackNumber, codecPrivate });
76
- }
77
- const currentTrack = currentTracks.find((t) => t.trackNumber === trackNumber);
78
- if (!currentTrack) {
79
- throw new Error(`Tried to add sample to track ${trackNumber}, but it doesn't exist`);
80
- }
81
- if (!lowestTrackTimestamps[trackNumber] ||
82
- chunk.timestamp < lowestTrackTimestamps[trackNumber]) {
83
- lowestTrackTimestamps[trackNumber] = chunk.timestamp;
84
- }
85
- if (typeof lowestTrackTimestamps[trackNumber] !== 'number') {
86
- throw new Error(`Tried to add sample to track ${trackNumber}, but it has no timestamp`);
87
- }
88
- const newDurationInMicroSeconds = chunk.timestamp +
89
- ((_c = chunk.duration) !== null && _c !== void 0 ? _c : 0) -
90
- lowestTrackTimestamps[trackNumber];
91
- const newDurationInTrackTimeUnits = Math.round(newDurationInMicroSeconds / (1000000 / currentTrack.timescale));
92
- trackDurations[trackNumber] = newDurationInTrackTimeUnits;
93
- // webcodecs returns frame duration in microseconds
94
- const newDurationInMilliseconds = Math.round((newDurationInMicroSeconds / 1000000) * CONTAINER_TIMESCALE);
95
- if (newDurationInMilliseconds > globalDurationInUnits) {
96
- globalDurationInUnits = newDurationInMilliseconds;
97
- onMillisecondsProgress(newDurationInMilliseconds);
98
- }
99
- if (!samplePositions[trackNumber]) {
100
- samplePositions[trackNumber] = [];
101
- }
102
- if (typeof sampleChunkIndices[trackNumber] === 'undefined') {
103
- sampleChunkIndices[trackNumber] = 0;
104
- }
105
- // For video, make a new chunk if it's a keyframe
106
- if (isVideo && chunk.type === 'key') {
107
- sampleChunkIndices[trackNumber]++;
108
- } // For audio, make a new chunk every 22 samples, that's how bbb.mp4 is encoded
109
- else if (!isVideo && samplePositions[trackNumber].length % 22 === 0) {
110
- sampleChunkIndices[trackNumber]++;
111
- }
112
- // Need to create a new chunk if the last chunk was a different type
113
- else if (lastChunkWasVideo !== isVideo) {
114
- sampleChunkIndices[trackNumber]++;
115
- }
116
- // media parser and EncodedVideoChunk returns timestamps in microseconds
117
- // need to normalize the timestamps to milliseconds
118
- const samplePositionToAdd = {
119
- isKeyframe: chunk.type === 'key',
120
- offset: position,
121
- chunk: sampleChunkIndices[trackNumber],
122
- cts: Math.round((chunk.cts / 1000000) * currentTrack.timescale),
123
- dts: Math.round((chunk.dts / 1000000) * currentTrack.timescale),
124
- duration: Math.round((((_d = chunk.duration) !== null && _d !== void 0 ? _d : 0) / 1000000) * currentTrack.timescale),
125
- size: chunk.data.length,
126
- };
127
- lastChunkWasVideo = isVideo;
128
- samplePositions[trackNumber].push(samplePositionToAdd);
129
- };
130
- const addTrack = (track) => {
131
- const trackNumber = currentTracks.length + 1;
132
- currentTracks.push({ ...track, trackNumber });
133
- progressTracker.registerTrack(trackNumber);
134
- return Promise.resolve({ trackNumber });
135
- };
136
- const waitForFinishPromises = [];
137
- return {
138
- save: () => {
139
- return w.save();
140
- },
141
- remove: async () => {
142
- await w.remove();
143
- },
144
- addSample: ({ chunk, trackNumber, isVideo, codecPrivate }) => {
145
- operationProm.current = operationProm.current.then(() => {
146
- return addSample({
147
- chunk,
148
- trackNumber,
149
- isVideo,
150
- codecPrivate,
151
- });
152
- });
153
- return operationProm.current;
154
- },
155
- addTrack: (track) => {
156
- operationProm.current = operationProm.current.then(() => addTrack(track));
157
- return operationProm.current;
158
- },
159
- updateTrackSampleRate: ({ sampleRate, trackNumber }) => {
160
- currentTracks.forEach((track) => {
161
- if (track.trackNumber === trackNumber) {
162
- if (track.type !== 'audio') {
163
- throw new Error(`Tried to update sample rate of track ${trackNumber}, but it's not an audio track`);
164
- }
165
- track.sampleRate = sampleRate;
166
- }
167
- });
168
- },
169
- addWaitForFinishPromise: (promise) => {
170
- waitForFinishPromises.push(promise);
171
- },
172
- async waitForFinish() {
173
- log_1.Log.verbose(logLevel, 'All write operations queued. Waiting for finish...');
174
- await Promise.all(waitForFinishPromises.map((p) => p()));
175
- log_1.Log.verbose(logLevel, 'Cleanup tasks executed');
176
- await operationProm.current;
177
- await updateMoov();
178
- await updateMdatSize();
179
- log_1.Log.verbose(logLevel, 'All write operations done. Waiting for finish...');
180
- await w.waitForFinish();
181
- },
182
- };
183
- };
184
- exports.createIsoBaseMedia = createIsoBaseMedia;
@@ -1,5 +0,0 @@
1
- export declare const createMdia: ({ mdhd, hdlr, minf, }: {
2
- mdhd: Uint8Array;
3
- hdlr: Uint8Array;
4
- minf: Uint8Array;
5
- }) => Uint8Array;
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMdia = void 0;
4
- const make_header_1 = require("../../boxes/webm/make-header");
5
- const primitives_1 = require("./primitives");
6
- const createMdia = ({ mdhd, hdlr, minf, }) => {
7
- return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
8
- // type
9
- (0, primitives_1.stringsToUint8Array)('mdia'),
10
- // mdhd
11
- mdhd,
12
- // hdlr
13
- hdlr,
14
- // minf
15
- minf,
16
- ]));
17
- };
18
- exports.createMdia = createMdia;
@@ -1,5 +0,0 @@
1
- export declare const createMoov: ({ mvhd, traks, udta, }: {
2
- mvhd: Uint8Array;
3
- traks: Uint8Array[];
4
- udta: Uint8Array;
5
- }) => Uint8Array;
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMoov = void 0;
4
- const make_header_1 = require("../../boxes/webm/make-header");
5
- const primitives_1 = require("./primitives");
6
- const createMoov = ({ mvhd, traks, udta, }) => {
7
- return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
8
- // type
9
- (0, primitives_1.stringsToUint8Array)('moov'),
10
- // moov atom
11
- mvhd,
12
- // traks
13
- ...traks,
14
- // udta
15
- udta,
16
- ]));
17
- };
18
- exports.createMoov = createMoov;
@@ -1,10 +0,0 @@
1
- export declare const createMvhd: ({ timescale, durationInUnits, rate, volume, nextTrackId, matrix, creationTime, modificationTime, }: {
2
- timescale: number;
3
- durationInUnits: number;
4
- rate: number;
5
- volume: number;
6
- nextTrackId: number;
7
- matrix: number[];
8
- creationTime: number | null;
9
- modificationTime: number | null;
10
- }) => Uint8Array;
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMvhd = void 0;
4
- const to_date_1 = require("../../boxes/iso-base-media/to-date");
5
- const make_header_1 = require("../../boxes/webm/make-header");
6
- const primitives_1 = require("./primitives");
7
- const createMvhd = ({ timescale, durationInUnits, rate, volume, nextTrackId, matrix, creationTime, modificationTime, }) => {
8
- if (matrix.length !== 9) {
9
- throw new Error('Matrix must be 9 elements long');
10
- }
11
- const content = (0, make_header_1.combineUint8Arrays)([
12
- // type
13
- (0, primitives_1.stringsToUint8Array)('mvhd'),
14
- // version
15
- new Uint8Array([0]),
16
- // flags
17
- new Uint8Array([0, 0, 0]),
18
- // creation time
19
- creationTime === null
20
- ? (0, primitives_1.numberTo32BitUIntOrInt)(0)
21
- : (0, primitives_1.numberTo32BitUIntOrInt)((0, to_date_1.fromUnixTimestamp)(creationTime)),
22
- // modification time
23
- modificationTime === null
24
- ? (0, primitives_1.numberTo32BitUIntOrInt)(0)
25
- : (0, primitives_1.numberTo32BitUIntOrInt)((0, to_date_1.fromUnixTimestamp)(modificationTime)),
26
- // timescale
27
- (0, primitives_1.numberTo32BitUIntOrInt)(timescale),
28
- // duration in units, 32bit for version 0
29
- (0, primitives_1.numberTo32BitUIntOrInt)(durationInUnits),
30
- // rate
31
- (0, primitives_1.floatTo16Point1632Bit)(rate),
32
- // volume
33
- (0, primitives_1.floatTo16Point16_16Bit)(volume),
34
- // reserved
35
- new Uint8Array([0, 0]),
36
- // reserved
37
- new Uint8Array([0, 0, 0, 0]),
38
- // reserved
39
- new Uint8Array([0, 0, 0, 0]),
40
- (0, primitives_1.serializeMatrix)(matrix),
41
- // predefined
42
- (0, make_header_1.combineUint8Arrays)(new Array(6).fill(new Uint8Array([0, 0, 0, 0]))),
43
- // next track id
44
- (0, primitives_1.numberTo32BitUIntOrInt)(nextTrackId),
45
- ]);
46
- return (0, primitives_1.addSize)(content);
47
- };
48
- exports.createMvhd = createMvhd;
@@ -1,4 +0,0 @@
1
- export declare const createTrak: ({ tkhd, mdia, }: {
2
- tkhd: Uint8Array;
3
- mdia: Uint8Array;
4
- }) => Uint8Array;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createTrak = void 0;
4
- const make_header_1 = require("../../boxes/webm/make-header");
5
- const truthy_1 = require("../../truthy");
6
- const primitives_1 = require("./primitives");
7
- const createTrak = ({ tkhd, mdia, }) => {
8
- return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
9
- // name
10
- (0, primitives_1.stringsToUint8Array)('trak'),
11
- // tkhd
12
- tkhd,
13
- // mdia
14
- mdia,
15
- ].filter(truthy_1.truthy)));
16
- };
17
- exports.createTrak = createTrak;
@@ -1 +0,0 @@
1
- export declare const createUdta: (children: Uint8Array) => Uint8Array;
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createUdta = void 0;
4
- const make_header_1 = require("../../boxes/webm/make-header");
5
- const primitives_1 = require("./primitives");
6
- const createUdta = (children) => {
7
- return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
8
- // type
9
- (0, primitives_1.stringsToUint8Array)('udta'),
10
- // children
11
- children,
12
- ]));
13
- };
14
- exports.createUdta = createUdta;
@@ -1 +0,0 @@
1
- export declare const createUrlAtom: () => Uint8Array;
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createUrlAtom = void 0;
4
- const make_header_1 = require("../../boxes/webm/make-header");
5
- const primitives_1 = require("./primitives");
6
- const createUrlAtom = () => {
7
- return (0, primitives_1.addSize)((0, make_header_1.combineUint8Arrays)([
8
- // type
9
- (0, primitives_1.stringsToUint8Array)('url '),
10
- // version
11
- new Uint8Array([0]),
12
- // flags
13
- new Uint8Array([0, 0, 1]),
14
- ]));
15
- };
16
- exports.createUrlAtom = createUrlAtom;
@@ -1,3 +0,0 @@
1
- import type { SamplePosition } from '../../get-sample-positions';
2
- export declare const exampleVideoSamplePositions: SamplePosition[];
3
- export declare const exampleAudioSamplePositions: SamplePosition[];