@remotion/webcodecs 4.0.244 → 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.
- package/LICENSE.md +1 -1
- 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 +3 -2
- package/dist/convert-media.js +5 -3
- 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
package/LICENSE.md
CHANGED
package/dist/audio-decoder.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { AudioOrVideoSample, AudioTrack, LogLevel
|
|
1
|
+
import type { AudioOrVideoSample, AudioTrack, LogLevel } from '@remotion/media-parser';
|
|
2
|
+
import type { ProgressTracker } from './create/progress-tracker';
|
|
2
3
|
export type WebCodecsAudioDecoder = {
|
|
3
4
|
processSample: (audioSample: AudioOrVideoSample) => Promise<void>;
|
|
4
5
|
waitForFinish: () => Promise<void>;
|
package/dist/audio-encoder.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { LogLevel
|
|
1
|
+
import type { LogLevel } from '@remotion/media-parser';
|
|
2
|
+
import type { ProgressTracker } from './create/progress-tracker';
|
|
2
3
|
import type { ConvertMediaAudioCodec } from './get-available-audio-codecs';
|
|
3
4
|
export type WebCodecsAudioEncoder = {
|
|
4
5
|
encodeFrame: (audioData: AudioData) => Promise<void>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type WriterInterface } from '@remotion/media-parser';
|
|
2
1
|
import type { LogLevel } from './log';
|
|
2
|
+
import type { WriterInterface } from './writers/writer';
|
|
3
3
|
export declare const autoSelectWriter: (writer: WriterInterface | undefined, logLevel: LogLevel) => Promise<WriterInterface>;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.autoSelectWriter = void 0;
|
|
4
|
-
const web_fs_1 = require("
|
|
5
|
-
const
|
|
6
|
-
const buffer_1 = require("@remotion/media-parser/buffer");
|
|
4
|
+
const web_fs_1 = require("./writers/web-fs");
|
|
5
|
+
const with_resolvers_1 = require("./create/with-resolvers");
|
|
7
6
|
const log_1 = require("./log");
|
|
7
|
+
const buffer_1 = require("./writers/buffer");
|
|
8
8
|
const autoSelectWriter = async (writer, logLevel) => {
|
|
9
9
|
if (writer) {
|
|
10
10
|
log_1.Log.verbose(logLevel, 'Using writer provided by user');
|
|
@@ -18,7 +18,7 @@ const autoSelectWriter = async (writer, logLevel) => {
|
|
|
18
18
|
return buffer_1.bufferWriter;
|
|
19
19
|
}
|
|
20
20
|
try {
|
|
21
|
-
const { promise: timeout, reject, resolve
|
|
21
|
+
const { promise: timeout, reject, resolve } = (0, with_resolvers_1.withResolvers)();
|
|
22
22
|
const time = setTimeout(() => reject(new Error('WebFS check timeout')), 2000);
|
|
23
23
|
const webFsSupported = await Promise.race([(0, web_fs_1.canUseWebFsWriter)(), timeout]);
|
|
24
24
|
resolve();
|
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
import type { AudioOrVideoSample } from '@remotion/media-parser';
|
|
2
|
-
export declare const combineUint8Arrays: (arrays: Uint8Array[]) => Uint8Array;
|
|
3
2
|
export declare const convertEncodedChunk: (chunk: EncodedAudioChunk | EncodedVideoChunk, trackId: number) => AudioOrVideoSample;
|
|
@@ -1,26 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.convertEncodedChunk =
|
|
4
|
-
const combineUint8Arrays = (arrays) => {
|
|
5
|
-
if (arrays.length === 0) {
|
|
6
|
-
return new Uint8Array([]);
|
|
7
|
-
}
|
|
8
|
-
if (arrays.length === 1) {
|
|
9
|
-
return arrays[0];
|
|
10
|
-
}
|
|
11
|
-
let totalLength = 0;
|
|
12
|
-
for (const array of arrays) {
|
|
13
|
-
totalLength += array.length;
|
|
14
|
-
}
|
|
15
|
-
const result = new Uint8Array(totalLength);
|
|
16
|
-
let offset = 0;
|
|
17
|
-
for (const array of arrays) {
|
|
18
|
-
result.set(array, offset);
|
|
19
|
-
offset += array.length;
|
|
20
|
-
}
|
|
21
|
-
return result;
|
|
22
|
-
};
|
|
23
|
-
exports.combineUint8Arrays = combineUint8Arrays;
|
|
3
|
+
exports.convertEncodedChunk = void 0;
|
|
24
4
|
const convertEncodedChunk = (chunk, trackId) => {
|
|
25
5
|
var _a;
|
|
26
6
|
const arr = new Uint8Array(chunk.byteLength);
|
package/dist/convert-media.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 2025 Remotion AG
|
|
3
3
|
* For licensing, see: https://remotion.dev/docs/webcodecs#license
|
|
4
4
|
*/
|
|
5
|
-
import type { LogLevel, Options, ParseMediaDynamicOptions, ParseMediaFields, ParseMediaOptions, VideoTrack
|
|
5
|
+
import type { LogLevel, Options, ParseMediaDynamicOptions, ParseMediaFields, ParseMediaOptions, VideoTrack } from '@remotion/media-parser';
|
|
6
6
|
import type { ConvertMediaAudioCodec } from './get-available-audio-codecs';
|
|
7
7
|
import type { ConvertMediaContainer } from './get-available-containers';
|
|
8
8
|
import type { ConvertMediaVideoCodec } from './get-available-video-codecs';
|
|
9
9
|
import { type ConvertMediaOnAudioTrackHandler } from './on-audio-track-handler';
|
|
10
10
|
import { type ConvertMediaOnVideoTrackHandler } from './on-video-track-handler';
|
|
11
11
|
import type { ResizeOperation } from './resizing/mode';
|
|
12
|
+
import type { WriterInterface } from './writers/writer';
|
|
12
13
|
export type ConvertMediaProgress = {
|
|
13
14
|
decodedVideoFrames: number;
|
|
14
15
|
decodedAudioFrames: number;
|
package/dist/convert-media.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Copyright (c)
|
|
3
|
+
* Copyright (c) 2025 Remotion AG
|
|
4
4
|
* For licensing, see: https://remotion.dev/docs/webcodecs#license
|
|
5
5
|
*/
|
|
6
6
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
@@ -11,6 +11,8 @@ exports.convertMedia = void 0;
|
|
|
11
11
|
const media_parser_1 = require("@remotion/media-parser");
|
|
12
12
|
const auto_select_writer_1 = require("./auto-select-writer");
|
|
13
13
|
const calculate_progress_1 = require("./calculate-progress");
|
|
14
|
+
const progress_tracker_1 = require("./create/progress-tracker");
|
|
15
|
+
const with_resolvers_1 = require("./create/with-resolvers");
|
|
14
16
|
const error_cause_1 = __importDefault(require("./error-cause"));
|
|
15
17
|
const generate_output_filename_1 = require("./generate-output-filename");
|
|
16
18
|
const log_1 = require("./log");
|
|
@@ -30,7 +32,7 @@ const convertMedia = async function ({ src, onVideoFrame, onProgress: onProgress
|
|
|
30
32
|
if (videoCodec && videoCodec !== 'vp8' && videoCodec !== 'vp9') {
|
|
31
33
|
return Promise.reject(new TypeError('Only `videoCodec: "vp8"` and `videoCodec: "vp9"` are supported currently'));
|
|
32
34
|
}
|
|
33
|
-
const { resolve, reject, getPromiseToImmediatelyReturn } =
|
|
35
|
+
const { resolve, reject, getPromiseToImmediatelyReturn } = (0, with_resolvers_1.withResolversAndWaitForReturn)();
|
|
34
36
|
const controller = new AbortController();
|
|
35
37
|
const abortConversion = (errCause) => {
|
|
36
38
|
reject(errCause);
|
|
@@ -48,7 +50,7 @@ const convertMedia = async function ({ src, onVideoFrame, onProgress: onProgress
|
|
|
48
50
|
everyMilliseconds: progressIntervalInMs !== null && progressIntervalInMs !== void 0 ? progressIntervalInMs : 100,
|
|
49
51
|
signal: controller.signal,
|
|
50
52
|
});
|
|
51
|
-
const progressTracker =
|
|
53
|
+
const progressTracker = (0, progress_tracker_1.makeProgressTracker)();
|
|
52
54
|
const state = await creator({
|
|
53
55
|
filename: (0, generate_output_filename_1.generateOutputFilename)(src, container),
|
|
54
56
|
writer: await (0, auto_select_writer_1.autoSelectWriter)(writer, logLevel),
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
type Input = {
|
|
2
|
+
timestamp: number;
|
|
3
|
+
keyFrame: boolean;
|
|
4
|
+
};
|
|
5
|
+
type Output = {
|
|
6
|
+
timestamp: number;
|
|
7
|
+
};
|
|
8
|
+
type Processed = {};
|
|
9
|
+
type Progress = {
|
|
10
|
+
smallestProgress: number;
|
|
11
|
+
};
|
|
12
|
+
type IoEventMap = {
|
|
13
|
+
input: Input;
|
|
14
|
+
output: Output;
|
|
15
|
+
processed: Processed;
|
|
16
|
+
progress: Progress;
|
|
17
|
+
};
|
|
18
|
+
export type IoEventTypes = keyof IoEventMap;
|
|
19
|
+
export type CallbackListener<T extends IoEventTypes> = (data: {
|
|
20
|
+
detail: IoEventMap[T];
|
|
21
|
+
}) => void;
|
|
22
|
+
type IoListeners = {
|
|
23
|
+
[EventType in IoEventTypes]: CallbackListener<EventType>[];
|
|
24
|
+
};
|
|
25
|
+
export declare class IoEventEmitter {
|
|
26
|
+
listeners: IoListeners;
|
|
27
|
+
addEventListener<Q extends IoEventTypes>(name: Q, callback: CallbackListener<Q>): void;
|
|
28
|
+
removeEventListener<Q extends IoEventTypes>(name: Q, callback: CallbackListener<Q>): void;
|
|
29
|
+
dispatchEvent<T extends IoEventTypes>(dispatchName: T, context: IoEventMap[T]): void;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IoEventEmitter = void 0;
|
|
4
|
+
class IoEventEmitter {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.listeners = {
|
|
7
|
+
input: [],
|
|
8
|
+
output: [],
|
|
9
|
+
processed: [],
|
|
10
|
+
progress: [],
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
addEventListener(name, callback) {
|
|
14
|
+
this.listeners[name].push(callback);
|
|
15
|
+
}
|
|
16
|
+
removeEventListener(name, callback) {
|
|
17
|
+
this.listeners[name] = this.listeners[name].filter((l) => l !== callback);
|
|
18
|
+
}
|
|
19
|
+
dispatchEvent(dispatchName, context) {
|
|
20
|
+
this.listeners[dispatchName].forEach((callback) => {
|
|
21
|
+
callback({ detail: context });
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.IoEventEmitter = IoEventEmitter;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAvc1Data = void 0;
|
|
4
|
+
const matroska_utils_1 = require("../../matroska/matroska-utils");
|
|
5
|
+
const primitives_1 = require("../primitives");
|
|
6
|
+
const createAvc1Data = ({ avccBox, pasp, width, height, horizontalResolution, verticalResolution, compressorName, depth, }) => {
|
|
7
|
+
return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
|
|
8
|
+
// type
|
|
9
|
+
(0, primitives_1.stringsToUint8Array)('avc1'),
|
|
10
|
+
// reserved
|
|
11
|
+
new Uint8Array([0, 0, 0, 0, 0, 0]),
|
|
12
|
+
// data_reference_index
|
|
13
|
+
new Uint8Array([0, 1]),
|
|
14
|
+
// version
|
|
15
|
+
new Uint8Array([0, 0]),
|
|
16
|
+
// revisionLevel
|
|
17
|
+
new Uint8Array([0, 0]),
|
|
18
|
+
// vendor
|
|
19
|
+
new Uint8Array([0, 0, 0, 0]),
|
|
20
|
+
// temporalQuality
|
|
21
|
+
new Uint8Array([0, 0, 0, 0]),
|
|
22
|
+
// spatialQuality
|
|
23
|
+
new Uint8Array([0, 0, 0, 0]),
|
|
24
|
+
// width
|
|
25
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(width),
|
|
26
|
+
// height
|
|
27
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(height),
|
|
28
|
+
// horizontalResolution
|
|
29
|
+
(0, primitives_1.setFixedPointSignedOrUnsigned1616Number)(horizontalResolution),
|
|
30
|
+
// verticalResolution
|
|
31
|
+
(0, primitives_1.setFixedPointSignedOrUnsigned1616Number)(verticalResolution),
|
|
32
|
+
// dataSize
|
|
33
|
+
new Uint8Array([0, 0, 0, 0]),
|
|
34
|
+
// frame count per sample
|
|
35
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(1),
|
|
36
|
+
// compressor name
|
|
37
|
+
(0, primitives_1.stringToPascalString)(compressorName),
|
|
38
|
+
// depth
|
|
39
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(depth),
|
|
40
|
+
// colorTableId
|
|
41
|
+
(0, primitives_1.numberTo16BitUIntOrInt)(-1),
|
|
42
|
+
// avcc box
|
|
43
|
+
avccBox,
|
|
44
|
+
// pasp
|
|
45
|
+
pasp,
|
|
46
|
+
]));
|
|
47
|
+
};
|
|
48
|
+
exports.createAvc1Data = createAvc1Data;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { MakeTrackAudio, MakeTrackVideo } from '../../make-track-info';
|
|
2
|
+
export type Avc1Data = {
|
|
3
|
+
pasp: Uint8Array;
|
|
4
|
+
avccBox: Uint8Array;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
horizontalResolution: number;
|
|
8
|
+
verticalResolution: number;
|
|
9
|
+
compressorName: string;
|
|
10
|
+
depth: number;
|
|
11
|
+
type: 'avc1-data';
|
|
12
|
+
};
|
|
13
|
+
export type Mp4aData = {
|
|
14
|
+
type: 'mp4a-data';
|
|
15
|
+
sampleRate: number;
|
|
16
|
+
channelCount: number;
|
|
17
|
+
maxBitrate: number;
|
|
18
|
+
avgBitrate: number;
|
|
19
|
+
codecPrivate: Uint8Array | null;
|
|
20
|
+
};
|
|
21
|
+
export type CodecSpecificData = Avc1Data | Mp4aData;
|
|
22
|
+
export declare const createCodecSpecificData: (track: MakeTrackAudio | MakeTrackVideo) => Uint8Array;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCodecSpecificData = void 0;
|
|
4
|
+
const create_avcc_1 = require("../trak/mdia/minf/stbl/stsd/create-avcc");
|
|
5
|
+
const create_pasp_1 = require("../trak/mdia/minf/stbl/stsd/create-pasp");
|
|
6
|
+
const avc1_1 = require("./avc1");
|
|
7
|
+
const mp4a_1 = require("./mp4a");
|
|
8
|
+
const createCodecSpecificData = (track) => {
|
|
9
|
+
if (track.type === 'video') {
|
|
10
|
+
return (0, avc1_1.createAvc1Data)({
|
|
11
|
+
avccBox: (0, create_avcc_1.createAvccBox)(track.codecPrivate),
|
|
12
|
+
compressorName: 'WebCodecs',
|
|
13
|
+
depth: 24,
|
|
14
|
+
horizontalResolution: 72,
|
|
15
|
+
verticalResolution: 72,
|
|
16
|
+
height: track.height,
|
|
17
|
+
width: track.width,
|
|
18
|
+
pasp: (0, create_pasp_1.createPasp)(1, 1),
|
|
19
|
+
type: 'avc1-data',
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
if (track.type === 'audio') {
|
|
23
|
+
return (0, mp4a_1.createMp4a)({
|
|
24
|
+
type: 'mp4a-data',
|
|
25
|
+
// TODO: Put in values based on real data,
|
|
26
|
+
// this seems to work though
|
|
27
|
+
avgBitrate: 128 * 1024,
|
|
28
|
+
maxBitrate: 128 * 1024,
|
|
29
|
+
channelCount: track.numberOfChannels,
|
|
30
|
+
sampleRate: track.sampleRate,
|
|
31
|
+
codecPrivate: track.codecPrivate,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
throw new Error('Unsupported codec specific data ' + track);
|
|
35
|
+
};
|
|
36
|
+
exports.createCodecSpecificData = createCodecSpecificData;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMp4a = void 0;
|
|
4
|
+
const matroska_utils_1 = require("../../matroska/matroska-utils");
|
|
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, matroska_utils_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, matroska_utils_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, matroska_utils_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, matroska_utils_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;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createColr = void 0;
|
|
4
|
+
const matroska_utils_1 = require("../matroska/matroska-utils");
|
|
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, matroska_utils_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;
|
|
@@ -0,0 +1,10 @@
|
|
|
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;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createIsoBaseMediaFtyp = exports.createFtyp = void 0;
|
|
4
|
+
const matroska_utils_1 = require("../matroska/matroska-utils");
|
|
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, matroska_utils_1.combineUint8Arrays)(compatibleBrands.map((b) => (0, primitives_1.stringsToUint8Array)(b)));
|
|
11
|
+
return (0, primitives_1.addSize)((0, matroska_utils_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;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createIlst: (items: Uint8Array[]) => Uint8Array;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createIlst = void 0;
|
|
4
|
+
const matroska_utils_1 = require("../matroska/matroska-utils");
|
|
5
|
+
const primitives_1 = require("./primitives");
|
|
6
|
+
const createIlst = (items) => {
|
|
7
|
+
return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
|
|
8
|
+
// name
|
|
9
|
+
(0, primitives_1.stringsToUint8Array)('ilst'),
|
|
10
|
+
// items
|
|
11
|
+
...items,
|
|
12
|
+
]));
|
|
13
|
+
};
|
|
14
|
+
exports.createIlst = createIlst;
|