@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.
- package/dist/audio-decoder.d.ts +2 -1
- package/dist/audio-encoder.d.ts +2 -1
- package/dist/auto-select-writer.d.ts +1 -1
- package/dist/auto-select-writer.js +4 -4
- package/dist/convert-encoded-chunk.d.ts +0 -1
- package/dist/convert-encoded-chunk.js +1 -21
- package/dist/convert-media.d.ts +2 -1
- package/dist/convert-media.js +4 -2
- package/dist/create/event-emitter.d.ts +31 -0
- package/dist/create/event-emitter.js +25 -0
- package/dist/create/iso-base-media/codec-specific/avc1.d.ts +2 -0
- package/dist/create/iso-base-media/codec-specific/avc1.js +48 -0
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +22 -0
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +36 -0
- package/dist/create/iso-base-media/codec-specific/mp4a.d.ts +2 -0
- package/dist/create/iso-base-media/codec-specific/mp4a.js +74 -0
- package/dist/create/iso-base-media/create-colr.d.ts +6 -0
- package/dist/create/iso-base-media/create-colr.js +26 -0
- package/dist/create/iso-base-media/create-ftyp.d.ts +10 -0
- package/dist/create/iso-base-media/create-ftyp.js +22 -0
- package/dist/create/iso-base-media/create-ilst.d.ts +1 -0
- package/dist/create/iso-base-media/create-ilst.js +14 -0
- package/dist/create/iso-base-media/create-iso-base-media.d.ts +2 -0
- package/dist/create/iso-base-media/create-iso-base-media.js +184 -0
- package/dist/create/iso-base-media/create-mdia.d.ts +5 -0
- package/dist/create/iso-base-media/create-mdia.js +18 -0
- package/dist/create/iso-base-media/create-moov.d.ts +5 -0
- package/dist/create/iso-base-media/create-moov.js +18 -0
- package/dist/create/iso-base-media/create-mvhd.d.ts +10 -0
- package/dist/create/iso-base-media/create-mvhd.js +48 -0
- package/dist/create/iso-base-media/create-trak.d.ts +4 -0
- package/dist/create/iso-base-media/create-trak.js +17 -0
- package/dist/create/iso-base-media/create-udta.d.ts +1 -0
- package/dist/create/iso-base-media/create-udta.js +14 -0
- package/dist/create/iso-base-media/create-url.d.ts +1 -0
- package/dist/create/iso-base-media/create-url.js +16 -0
- package/dist/create/iso-base-media/example-stts.d.ts +3 -0
- package/dist/create/iso-base-media/example-stts.js +2797 -0
- package/dist/create/iso-base-media/ilst/create-cmt.d.ts +1 -0
- package/dist/create/iso-base-media/ilst/create-cmt.js +26 -0
- package/dist/create/iso-base-media/ilst/create-too.d.ts +1 -0
- package/dist/create/iso-base-media/ilst/create-too.js +27 -0
- package/dist/create/iso-base-media/mdia/create-mdhd.d.ts +6 -0
- package/dist/create/iso-base-media/mdia/create-mdhd.js +33 -0
- package/dist/create/iso-base-media/mp4-header.d.ts +6 -0
- package/dist/create/iso-base-media/mp4-header.js +48 -0
- package/dist/create/iso-base-media/primitives.d.ts +26 -0
- package/dist/create/iso-base-media/primitives.js +133 -0
- package/dist/create/iso-base-media/serialize-track.d.ts +9 -0
- package/dist/create/iso-base-media/serialize-track.js +63 -0
- package/dist/create/iso-base-media/trak/create-tkhd.d.ts +27 -0
- package/dist/create/iso-base-media/trak/create-tkhd.js +97 -0
- package/dist/create/iso-base-media/trak/mdia/create-minf.d.ts +4 -0
- package/dist/create/iso-base-media/trak/mdia/create-minf.js +19 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-dinf.js +22 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-smhd.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +6 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.js +41 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/create-vmhd.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.js +45 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.js +28 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.js +56 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.js +23 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.js +25 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +2 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.js +51 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avc1.js +20 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-avcc.js +16 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-pasp.js +13 -0
- package/dist/create/iso-base-media/udta/create-meta.d.ts +4 -0
- package/dist/create/iso-base-media/udta/create-meta.js +20 -0
- package/dist/create/iso-base-media/udta/meta/create-hdlr.d.ts +1 -0
- package/dist/create/iso-base-media/udta/meta/create-hdlr.js +32 -0
- package/dist/create/make-track-info.d.ts +20 -0
- package/dist/create/matroska/cluster-segment.d.ts +10 -0
- package/dist/create/matroska/cluster-segment.js +38 -0
- package/dist/create/matroska/cluster.d.ts +25 -0
- package/dist/create/matroska/cluster.js +76 -0
- package/dist/create/matroska/color.d.ts +2 -0
- package/dist/create/matroska/color.js +85 -0
- package/dist/create/matroska/create-matroska-media.d.ts +2 -0
- package/dist/create/matroska/create-matroska-media.js +189 -0
- package/dist/create/matroska/make-duration-with-padding.d.ts +1 -0
- package/dist/create/matroska/make-duration-with-padding.js +15 -0
- package/dist/create/matroska/matroska-cues.d.ts +6 -0
- package/dist/create/matroska/matroska-cues.js +49 -0
- package/dist/create/matroska/matroska-header.d.ts +1 -0
- package/dist/create/matroska/matroska-header.js +66 -0
- package/dist/create/matroska/matroska-info.d.ts +3 -0
- package/dist/create/matroska/matroska-info.js +33 -0
- package/dist/create/matroska/matroska-seek.d.ts +6 -0
- package/dist/create/matroska/matroska-seek.js +32 -0
- package/dist/create/matroska/matroska-segment.d.ts +3 -0
- package/dist/create/matroska/matroska-segment.js +13 -0
- package/dist/create/matroska/matroska-trackentry.d.ts +10 -0
- package/dist/create/matroska/matroska-trackentry.js +249 -0
- package/dist/create/matroska/matroska-utils.d.ts +30 -0
- package/dist/create/matroska/matroska-utils.js +292 -0
- package/dist/create/media-fn.d.ts +32 -0
- package/dist/create/progress-tracker.d.ts +9 -0
- package/dist/create/progress-tracker.js +67 -0
- package/dist/create/timescale.d.ts +1 -0
- package/dist/create/timescale.js +4 -0
- package/dist/create/wav/create-wav.d.ts +2 -0
- package/dist/create/wav/create-wav.js +110 -0
- package/dist/create/with-resolvers.d.ts +10 -0
- package/dist/create/with-resolvers.js +28 -0
- package/dist/esm/buffer.mjs +74 -0
- package/dist/esm/index.mjs +2518 -40
- package/dist/esm/web-fs.mjs +92 -0
- package/dist/from-unix-timestamp.d.ts +1 -0
- package/dist/from-unix-timestamp.js +11 -0
- package/dist/index.d.ts +1 -0
- package/dist/io-manager/io-synchronizer.d.ts +1 -1
- package/dist/io-manager/io-synchronizer.js +5 -4
- package/dist/io-manager/make-timeout-promise.js +2 -2
- package/dist/on-audio-track.d.ts +3 -1
- package/dist/on-video-track.d.ts +3 -1
- package/dist/select-container-creator.d.ts +1 -1
- package/dist/select-container-creator.js +6 -4
- package/dist/test/avc1.test.d.ts +1 -0
- package/dist/test/avc1.test.js +39 -0
- package/dist/test/avcc.test.d.ts +1 -0
- package/dist/test/avcc.test.js +15 -0
- package/dist/test/cmt.test.d.ts +1 -0
- package/dist/test/cmt.test.js +13 -0
- package/dist/test/colr.test.d.ts +1 -0
- package/dist/test/colr.test.js +16 -0
- package/dist/test/create-ftyp.test.d.ts +1 -0
- package/dist/test/create-ftyp.test.js +47 -0
- package/dist/test/create-matroska.test.d.ts +1 -0
- package/dist/test/create-matroska.test.js +101 -0
- package/dist/test/create-mvhd.test.d.ts +1 -0
- package/dist/test/create-mvhd.test.js +108 -0
- package/dist/test/ctts.test.d.ts +1 -0
- package/dist/test/ctts.test.js +49 -0
- package/dist/test/dinf.test.d.ts +1 -0
- package/dist/test/dinf.test.js +12 -0
- package/dist/test/ilst.test.d.ts +1 -0
- package/dist/test/ilst.test.js +22 -0
- package/dist/test/mdhd.test.d.ts +1 -0
- package/dist/test/mdhd.test.js +17 -0
- package/dist/test/meta.test.d.ts +1 -0
- package/dist/test/meta.test.js +26 -0
- package/dist/test/mp4a.test.d.ts +1 -0
- package/dist/test/mp4a.test.js +24 -0
- package/dist/test/pasp.test.d.ts +1 -0
- package/dist/test/pasp.test.js +12 -0
- package/dist/test/stbl.test.js +166 -0
- package/dist/test/stco.test.d.ts +1 -0
- package/dist/test/stco.test.js +34 -0
- package/dist/test/stsc.test.d.ts +1 -0
- package/dist/test/stsc.test.js +63 -0
- package/dist/test/stsd.test.d.ts +1 -0
- package/dist/test/stsd.test.js +264 -0
- package/dist/test/stss.test.d.ts +1 -0
- package/dist/test/stss.test.js +14 -0
- package/dist/test/stsz.test.d.ts +1 -0
- package/dist/test/stsz.test.js +43 -0
- package/dist/test/stts.test.d.ts +1 -0
- package/dist/test/stts.test.js +12 -0
- package/dist/test/tkhd.test.d.ts +1 -0
- package/dist/test/tkhd.test.js +175 -0
- package/dist/test/too.test.d.ts +1 -0
- package/dist/test/too.test.js +12 -0
- package/dist/test/url.test.d.ts +1 -0
- package/dist/test/url.test.js +11 -0
- package/dist/truthy.d.ts +3 -0
- package/dist/truthy.js +6 -0
- package/dist/video-decoder.d.ts +2 -1
- package/dist/video-encoder.d.ts +2 -1
- package/dist/writers/buffer-implementation/writer.d.ts +2 -0
- package/dist/writers/buffer-implementation/writer.js +54 -0
- package/dist/writers/buffer.d.ts +2 -0
- package/dist/writers/buffer.js +7 -0
- package/dist/writers/web-fs.d.ts +3 -0
- package/dist/writers/web-fs.js +75 -0
- package/dist/writers/writer.d.ts +15 -0
- package/package.json +36 -5
- package/dist/get-operation-id.js +0 -1
- package/dist/resizing/resizing.d.ts +0 -13
- package/dist/resizing.d.ts +0 -13
- package/dist/rotate-video-frame.d.ts +0 -9
- package/dist/rotate-video-frame.js +0 -53
- package/dist/scaling.d.ts +0 -13
- /package/dist/{resizing.js → create/make-track-info.js} +0 -0
- /package/dist/{resizing/resizing.js → create/media-fn.js} +0 -0
- /package/dist/{get-operation-id.d.ts → test/stbl.test.d.ts} +0 -0
- /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,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,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,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,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;
|