@remotion/webcodecs 4.0.251 → 4.0.253
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 +3 -2
- package/dist/audio-decoder.js +11 -9
- package/dist/audio-encoder.d.ts +4 -3
- package/dist/audio-encoder.js +10 -9
- package/dist/auto-select-writer.d.ts +1 -1
- package/dist/can-copy-video-track.js +2 -1
- package/dist/choose-correct-hevc-profile.d.ts +5 -0
- package/dist/choose-correct-hevc-profile.js +42 -0
- package/dist/controller.d.ts +16 -0
- package/dist/controller.js +16 -0
- package/dist/convert-media.d.ts +6 -6
- package/dist/convert-media.js +53 -21
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.d.ts +11 -0
- package/dist/create/iso-base-media/codec-specific/create-codec-specific-data.js +29 -11
- package/dist/create/iso-base-media/codec-specific/hvc1.d.ts +2 -0
- package/dist/create/iso-base-media/codec-specific/hvc1.js +48 -0
- package/dist/create/iso-base-media/create-iso-base-media.js +8 -4
- package/dist/create/iso-base-media/serialize-track.js +3 -1
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-hvcc.d.ts +1 -0
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/stsd/create-hvcc.js +16 -0
- package/dist/create/matroska/cluster.d.ts +1 -1
- package/dist/create/matroska/create-matroska-media.js +8 -4
- package/dist/create/matroska/matroska-trackentry.js +3 -0
- package/dist/create/matroska/matroska-utils.d.ts +1 -1
- package/dist/create/media-fn.d.ts +2 -3
- package/dist/create/wav/create-wav.js +8 -4
- package/dist/emitter.d.ts +20 -0
- package/dist/emitter.js +29 -0
- package/dist/esm/buffer.mjs +5 -22
- package/dist/esm/index.mjs +633 -159
- package/dist/esm/web-fs.mjs +4 -22
- package/dist/get-available-containers.d.ts +1 -2
- package/dist/get-available-containers.js +3 -3
- package/dist/get-available-video-codecs.d.ts +1 -2
- package/dist/get-available-video-codecs.js +3 -4
- package/dist/get-codec-string.d.ts +7 -0
- package/dist/get-codec-string.js +21 -0
- package/dist/hevc-levels.d.ts +13 -0
- package/dist/hevc-levels.js +233 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -1
- package/dist/io-manager/io-synchronizer.d.ts +4 -3
- package/dist/io-manager/io-synchronizer.js +19 -14
- package/dist/io-manager/make-timeout-promise.d.ts +6 -1
- package/dist/io-manager/make-timeout-promise.js +23 -5
- package/dist/on-audio-track.d.ts +2 -2
- package/dist/on-audio-track.js +13 -16
- package/dist/on-video-track.d.ts +2 -2
- package/dist/on-video-track.js +10 -14
- package/dist/select-container-creator.d.ts +1 -1
- package/dist/test/remux-serverside.test.js +2 -2
- package/dist/throttled-state-update.d.ts +1 -1
- package/dist/throttled-state-update.js +2 -2
- package/dist/video-decoder.d.ts +3 -2
- package/dist/video-decoder.js +10 -8
- package/dist/video-encoder-config.js +4 -6
- package/dist/video-encoder.d.ts +4 -3
- package/dist/video-encoder.js +13 -8
- package/dist/wav-audio-encoder.d.ts +1 -1
- package/dist/wav-audio-encoder.js +2 -2
- package/dist/webcodecs-controller.d.ts +16 -0
- package/dist/webcodecs-controller.js +16 -0
- package/dist/writers/buffer-implementation/writer.d.ts +1 -1
- package/dist/writers/buffer-implementation/writer.js +5 -4
- package/dist/writers/buffer.d.ts +1 -1
- package/dist/writers/web-fs.d.ts +1 -1
- package/dist/writers/web-fs.js +4 -4
- package/package.json +5 -5
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createHvccBox = void 0;
|
|
4
|
+
const matroska_utils_1 = require("../../../../../../matroska/matroska-utils");
|
|
5
|
+
const primitives_1 = require("../../../../../primitives");
|
|
6
|
+
const createHvccBox = (privateData) => {
|
|
7
|
+
if (!privateData) {
|
|
8
|
+
throw new Error('privateData is required');
|
|
9
|
+
}
|
|
10
|
+
return (0, primitives_1.addSize)((0, matroska_utils_1.combineUint8Arrays)([
|
|
11
|
+
// type
|
|
12
|
+
(0, primitives_1.stringsToUint8Array)('hvcC'),
|
|
13
|
+
privateData,
|
|
14
|
+
]));
|
|
15
|
+
};
|
|
16
|
+
exports.createHvccBox = createHvccBox;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { Writer } from '@remotion/media-parser';
|
|
1
2
|
import { type AudioOrVideoSample } from '@remotion/media-parser';
|
|
2
3
|
import type { LogLevel } from '../../log';
|
|
3
|
-
import type { Writer } from '../../writers/writer';
|
|
4
4
|
export declare const timestampToClusterTimestamp: (timestamp: number, timescale: number) => number;
|
|
5
5
|
export declare const canFitInCluster: ({ clusterStartTimestamp, chunk, timescale, }: {
|
|
6
6
|
clusterStartTimestamp: number;
|
|
@@ -16,7 +16,11 @@ const timescale = 1000000;
|
|
|
16
16
|
const createMatroskaMedia = async ({ writer, onBytesProgress, onMillisecondsProgress, filename, logLevel, progressTracker, }) => {
|
|
17
17
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
18
18
|
const header = (0, matroska_header_1.makeMatroskaHeader)();
|
|
19
|
-
const w = await writer.createContent({
|
|
19
|
+
const w = await writer.createContent({
|
|
20
|
+
filename,
|
|
21
|
+
mimeType: 'video/webm',
|
|
22
|
+
logLevel,
|
|
23
|
+
});
|
|
20
24
|
await w.write(header.bytes);
|
|
21
25
|
const matroskaInfo = (0, matroska_info_1.makeMatroskaInfo)({
|
|
22
26
|
timescale,
|
|
@@ -149,8 +153,8 @@ const createMatroskaMedia = async ({ writer, onBytesProgress, onMillisecondsProg
|
|
|
149
153
|
}
|
|
150
154
|
});
|
|
151
155
|
},
|
|
152
|
-
|
|
153
|
-
return w.
|
|
156
|
+
getBlob: async () => {
|
|
157
|
+
return w.getBlob();
|
|
154
158
|
},
|
|
155
159
|
remove: async () => {
|
|
156
160
|
await w.remove();
|
|
@@ -177,12 +181,12 @@ const createMatroskaMedia = async ({ writer, onBytesProgress, onMillisecondsProg
|
|
|
177
181
|
});
|
|
178
182
|
await updateSeekWrite();
|
|
179
183
|
await w.write((0, matroska_cues_1.createMatroskaCues)(cues).bytes);
|
|
180
|
-
await w.waitForFinish();
|
|
181
184
|
const segmentSize = w.getWrittenByteCount() -
|
|
182
185
|
segmentOffset -
|
|
183
186
|
(0, matroska_utils_1.matroskaToHex)(matroskaElements.Segment).byteLength -
|
|
184
187
|
matroska_segment_1.MATROSKA_SEGMENT_MIN_VINT_WIDTH;
|
|
185
188
|
await updateSegmentSize(segmentSize);
|
|
189
|
+
await w.finish();
|
|
186
190
|
},
|
|
187
191
|
};
|
|
188
192
|
};
|
|
@@ -19,7 +19,7 @@ export type EbmlParsedOrUint8Array<T extends Ebml> = {
|
|
|
19
19
|
value: EbmlValueOrUint8Array<T>;
|
|
20
20
|
minVintWidth: number | null;
|
|
21
21
|
};
|
|
22
|
-
export declare const measureEBMLVarInt: (value: number) => 2 | 1 |
|
|
22
|
+
export declare const measureEBMLVarInt: (value: number) => 2 | 1 | 6 | 5 | 3 | 4;
|
|
23
23
|
export declare const getVariableInt: (value: number, minWidth: number | null) => Uint8Array;
|
|
24
24
|
export declare const makeMatroskaBytes: (fields: PossibleEbmlOrUint8Array) => BytesAndOffset;
|
|
25
25
|
export type PossibleEbmlOrUint8Array = Prettify<{
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import type { AudioOrVideoSample } from '@remotion/media-parser';
|
|
1
|
+
import type { AudioOrVideoSample, WriterInterface } from '@remotion/media-parser';
|
|
2
2
|
import type { LogLevel } from '../log';
|
|
3
|
-
import type { WriterInterface } from '../writers/writer';
|
|
4
3
|
import type { MakeTrackAudio, MakeTrackVideo } from './make-track-info';
|
|
5
4
|
import type { ProgressTracker } from './progress-tracker';
|
|
6
5
|
export type MediaFn = {
|
|
7
|
-
|
|
6
|
+
getBlob: () => Promise<Blob>;
|
|
8
7
|
remove: () => Promise<void>;
|
|
9
8
|
addSample: (options: {
|
|
10
9
|
chunk: AudioOrVideoSample;
|
|
@@ -16,7 +16,11 @@ const numberTo16BitLittleEndian = (num) => {
|
|
|
16
16
|
const BIT_DEPTH = 16;
|
|
17
17
|
const BYTES_PER_SAMPLE = BIT_DEPTH / 8;
|
|
18
18
|
const createWav = async ({ filename, logLevel, onBytesProgress, onMillisecondsProgress, writer, progressTracker, }) => {
|
|
19
|
-
const w = await writer.createContent({
|
|
19
|
+
const w = await writer.createContent({
|
|
20
|
+
filename,
|
|
21
|
+
mimeType: 'audio/wav',
|
|
22
|
+
logLevel,
|
|
23
|
+
});
|
|
20
24
|
await w.write(new Uint8Array([0x52, 0x49, 0x46, 0x46])); // "RIFF"
|
|
21
25
|
const sizePosition = w.getWrittenByteCount();
|
|
22
26
|
await w.write(new Uint8Array([0x00, 0x00, 0x00, 0x00])); // Remaining size
|
|
@@ -64,8 +68,8 @@ const createWav = async ({ filename, logLevel, onBytesProgress, onMillisecondsPr
|
|
|
64
68
|
};
|
|
65
69
|
const waitForFinishPromises = [];
|
|
66
70
|
return {
|
|
67
|
-
|
|
68
|
-
return w.
|
|
71
|
+
getBlob: () => {
|
|
72
|
+
return w.getBlob();
|
|
69
73
|
},
|
|
70
74
|
remove: () => {
|
|
71
75
|
return w.remove();
|
|
@@ -89,7 +93,7 @@ const createWav = async ({ filename, logLevel, onBytesProgress, onMillisecondsPr
|
|
|
89
93
|
await Promise.all(waitForFinishPromises.map((p) => p()));
|
|
90
94
|
await operationProm.current;
|
|
91
95
|
await updateSize();
|
|
92
|
-
await w.
|
|
96
|
+
await w.finish();
|
|
93
97
|
},
|
|
94
98
|
addTrack: async (track) => {
|
|
95
99
|
if (track.type !== 'audio') {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type MediaParserEventMap = {
|
|
2
|
+
pause: undefined;
|
|
3
|
+
resume: undefined;
|
|
4
|
+
};
|
|
5
|
+
export type MediaParserEventTypes = keyof MediaParserEventMap;
|
|
6
|
+
export type CallbackListener<T extends MediaParserEventTypes> = (data: {
|
|
7
|
+
detail: MediaParserEventMap[T];
|
|
8
|
+
}) => void;
|
|
9
|
+
type MediaParserListeners = {
|
|
10
|
+
[EventType in MediaParserEventTypes]: CallbackListener<EventType>[];
|
|
11
|
+
};
|
|
12
|
+
export declare class MediaParserEmitter {
|
|
13
|
+
listeners: MediaParserListeners;
|
|
14
|
+
addEventListener<Q extends MediaParserEventTypes>(name: Q, callback: CallbackListener<Q>): void;
|
|
15
|
+
removeEventListener<Q extends MediaParserEventTypes>(name: Q, callback: CallbackListener<Q>): void;
|
|
16
|
+
private dispatchEvent;
|
|
17
|
+
dispatchPause: () => void;
|
|
18
|
+
dispatchResume: () => void;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
package/dist/emitter.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MediaParserEmitter = void 0;
|
|
4
|
+
class MediaParserEmitter {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.listeners = {
|
|
7
|
+
pause: [],
|
|
8
|
+
resume: [],
|
|
9
|
+
};
|
|
10
|
+
this.dispatchPause = () => {
|
|
11
|
+
this.dispatchEvent('pause', undefined);
|
|
12
|
+
};
|
|
13
|
+
this.dispatchResume = () => {
|
|
14
|
+
this.dispatchEvent('resume', undefined);
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
addEventListener(name, callback) {
|
|
18
|
+
this.listeners[name].push(callback);
|
|
19
|
+
}
|
|
20
|
+
removeEventListener(name, callback) {
|
|
21
|
+
this.listeners[name] = this.listeners[name].filter((l) => l !== callback);
|
|
22
|
+
}
|
|
23
|
+
dispatchEvent(dispatchName, context) {
|
|
24
|
+
this.listeners[dispatchName].forEach((callback) => {
|
|
25
|
+
callback({ detail: context });
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.MediaParserEmitter = MediaParserEmitter;
|
package/dist/esm/buffer.mjs
CHANGED
|
@@ -1,21 +1,3 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __toESM = (mod, isNodeMode, target) => {
|
|
7
|
-
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
8
|
-
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
9
|
-
for (let key of __getOwnPropNames(mod))
|
|
10
|
-
if (!__hasOwnProp.call(to, key))
|
|
11
|
-
__defProp(to, key, {
|
|
12
|
-
get: () => mod[key],
|
|
13
|
-
enumerable: true
|
|
14
|
-
});
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
18
|
-
|
|
19
1
|
// src/writers/buffer-implementation/writer.ts
|
|
20
2
|
var createContent = ({ filename, mimeType }) => {
|
|
21
3
|
const buf = new ArrayBuffer(0, {
|
|
@@ -42,10 +24,14 @@ var createContent = ({ filename, mimeType }) => {
|
|
|
42
24
|
writPromise = writPromise.then(() => write(arr));
|
|
43
25
|
return writPromise;
|
|
44
26
|
},
|
|
45
|
-
|
|
27
|
+
finish: async () => {
|
|
28
|
+
await writPromise;
|
|
46
29
|
if (removed) {
|
|
47
30
|
return Promise.reject(new Error("Already called .remove() on the result"));
|
|
48
31
|
}
|
|
32
|
+
return Promise.resolve();
|
|
33
|
+
},
|
|
34
|
+
getBlob() {
|
|
49
35
|
const arr = new Uint8Array(buf);
|
|
50
36
|
return Promise.resolve(new File([arr.slice()], filename, { type: mimeType }));
|
|
51
37
|
},
|
|
@@ -57,9 +43,6 @@ var createContent = ({ filename, mimeType }) => {
|
|
|
57
43
|
updateDataAt: (position, newData) => {
|
|
58
44
|
writPromise = writPromise.then(() => updateDataAt(position, newData));
|
|
59
45
|
return writPromise;
|
|
60
|
-
},
|
|
61
|
-
waitForFinish: async () => {
|
|
62
|
-
await writPromise;
|
|
63
46
|
}
|
|
64
47
|
};
|
|
65
48
|
return Promise.resolve(writer);
|