@remotion/webcodecs 4.0.298 → 4.0.301
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 +4 -4
- package/dist/audio-decoder.js +8 -6
- package/dist/audio-encoder.d.ts +2 -2
- package/dist/audio-encoder.js +6 -4
- package/dist/auto-select-writer.d.ts +2 -3
- package/dist/can-copy-video-track.d.ts +2 -2
- package/dist/can-copy-video-track.js +3 -5
- package/dist/can-reencode-audio-track.d.ts +2 -2
- package/dist/can-reencode-video-track.d.ts +2 -2
- package/dist/convert-encoded-chunk.d.ts +2 -2
- package/dist/convert-media.d.ts +7 -8
- package/dist/convert-media.js +8 -8
- package/dist/create/iso-base-media/example-stts.d.ts +3 -3
- package/dist/create/iso-base-media/mp4-header.d.ts +2 -2
- package/dist/create/iso-base-media/serialize-track.d.ts +2 -2
- package/dist/create/iso-base-media/trak/mdia/minf/create-stbl.d.ts +2 -2
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-ctts.d.ts +2 -2
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stco.d.ts +2 -2
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsc.d.ts +2 -2
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stss.d.ts +2 -2
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stsz.d.ts +2 -2
- package/dist/create/iso-base-media/trak/mdia/minf/stbl/create-stts.d.ts +2 -2
- package/dist/create/make-track-info.d.ts +2 -2
- package/dist/create/matroska/cluster.d.ts +7 -8
- package/dist/create/matroska/color.d.ts +2 -2
- package/dist/create/matroska/color.js +83 -26
- package/dist/create/matroska/matroska-seek.d.ts +2 -2
- package/dist/create/matroska/matroska-trackentry.d.ts +2 -2
- package/dist/create/matroska/matroska-utils.d.ts +7 -3
- package/dist/create/media-fn.d.ts +4 -5
- package/dist/esm/buffer.mjs +4 -1
- package/dist/esm/index.mjs +147 -62
- package/dist/esm/web-fs.mjs +3 -1
- package/dist/index.d.ts +1 -1
- package/dist/io-manager/io-synchronizer.js +3 -3
- package/dist/log.d.ts +6 -6
- package/dist/on-audio-track-handler.d.ts +3 -3
- package/dist/on-audio-track.d.ts +3 -3
- package/dist/on-audio-track.js +5 -5
- package/dist/on-frame.d.ts +2 -2
- package/dist/on-video-track-handler.d.ts +3 -3
- package/dist/on-video-track.d.ts +3 -3
- package/dist/on-video-track.js +6 -6
- package/dist/resizing/calculate-new-size.d.ts +4 -4
- package/dist/resizing/mode.d.ts +0 -4
- package/dist/rotation.d.ts +3 -3
- package/dist/sort-video-frames.js +3 -3
- package/dist/video-decoder.d.ts +3 -3
- package/dist/video-decoder.js +6 -5
- package/dist/video-encoder.d.ts +2 -2
- package/dist/video-encoder.js +6 -4
- package/dist/wav-audio-encoder.js +1 -1
- package/dist/webcodecs-controller.d.ts +1 -3
- package/dist/webcodecs-controller.js +1 -2
- package/dist/writers/buffer-implementation/writer.d.ts +2 -2
- package/dist/writers/buffer-implementation/writer.js +2 -4
- package/dist/writers/buffer.d.ts +2 -2
- package/dist/writers/web-fs.d.ts +2 -2
- package/dist/writers/web-fs.js +1 -1
- package/package.json +5 -5
- package/dist/resample-audiodata.d.ts +0 -4
- package/dist/resample-audiodata.js +0 -35
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MediaParserAudioTrack, MediaParserContainer, MediaParserLogLevel } from '@remotion/media-parser';
|
|
2
2
|
import type { ConvertMediaAudioCodec } from './get-available-audio-codecs';
|
|
3
3
|
import type { ConvertMediaContainer } from './get-available-containers';
|
|
4
4
|
export type AudioOperation = {
|
|
@@ -14,9 +14,9 @@ export type AudioOperation = {
|
|
|
14
14
|
type: 'drop';
|
|
15
15
|
};
|
|
16
16
|
export type ConvertMediaOnAudioTrackHandler = (options: {
|
|
17
|
-
track:
|
|
17
|
+
track: MediaParserAudioTrack;
|
|
18
18
|
defaultAudioCodec: ConvertMediaAudioCodec | null;
|
|
19
|
-
logLevel:
|
|
19
|
+
logLevel: MediaParserLogLevel;
|
|
20
20
|
outputContainer: ConvertMediaContainer;
|
|
21
21
|
inputContainer: MediaParserContainer;
|
|
22
22
|
canCopyTrack: boolean;
|
package/dist/on-audio-track.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type MediaParserLogLevel, type MediaParserOnAudioTrack } from '@remotion/media-parser';
|
|
2
2
|
import type { ConvertMediaOnAudioData } from './convert-media';
|
|
3
3
|
import type { MediaFn } from './create/media-fn';
|
|
4
4
|
import type { ProgressTracker } from './create/progress-tracker';
|
|
@@ -14,8 +14,8 @@ export declare const makeAudioTrackHandler: ({ state, defaultAudioCodec: audioCo
|
|
|
14
14
|
abortConversion: (errCause: Error) => void;
|
|
15
15
|
onMediaStateUpdate: null | ConvertMediaProgressFn;
|
|
16
16
|
onAudioTrack: ConvertMediaOnAudioTrackHandler | null;
|
|
17
|
-
logLevel:
|
|
17
|
+
logLevel: MediaParserLogLevel;
|
|
18
18
|
outputContainer: ConvertMediaContainer;
|
|
19
19
|
progressTracker: ProgressTracker;
|
|
20
20
|
onAudioData: ConvertMediaOnAudioData | null;
|
|
21
|
-
}) =>
|
|
21
|
+
}) => MediaParserOnAudioTrack;
|
package/dist/on-audio-track.js
CHANGED
|
@@ -13,7 +13,7 @@ const get_default_audio_codec_1 = require("./get-default-audio-codec");
|
|
|
13
13
|
const log_1 = require("./log");
|
|
14
14
|
const makeAudioTrackHandler = ({ state, defaultAudioCodec: audioCodec, controller, abortConversion, onMediaStateUpdate, onAudioTrack, logLevel, outputContainer, progressTracker, onAudioData, }) => async ({ track, container: inputContainer }) => {
|
|
15
15
|
const canCopyTrack = (0, can_copy_audio_track_1.canCopyAudioTrack)({
|
|
16
|
-
inputCodec: track.
|
|
16
|
+
inputCodec: track.codecEnum,
|
|
17
17
|
outputContainer,
|
|
18
18
|
inputContainer,
|
|
19
19
|
});
|
|
@@ -34,19 +34,19 @@ const makeAudioTrackHandler = ({ state, defaultAudioCodec: audioCodec, controlle
|
|
|
34
34
|
if (audioOperation.type === 'copy') {
|
|
35
35
|
const addedTrack = await state.addTrack({
|
|
36
36
|
type: 'audio',
|
|
37
|
-
codec: track.
|
|
37
|
+
codec: track.codecEnum,
|
|
38
38
|
numberOfChannels: track.numberOfChannels,
|
|
39
39
|
sampleRate: track.sampleRate,
|
|
40
|
-
codecPrivate: track.
|
|
40
|
+
codecPrivate: track.codecData?.data ?? null,
|
|
41
41
|
timescale: track.timescale,
|
|
42
42
|
});
|
|
43
|
-
log_1.Log.verbose(logLevel, `Copying audio track ${track.trackId} as track ${addedTrack.trackNumber}. Timescale = ${track.timescale}, codec = ${track.
|
|
43
|
+
log_1.Log.verbose(logLevel, `Copying audio track ${track.trackId} as track ${addedTrack.trackNumber}. Timescale = ${track.timescale}, codec = ${track.codecEnum} (${track.codec}) `);
|
|
44
44
|
return async (audioSample) => {
|
|
45
45
|
await state.addSample({
|
|
46
46
|
chunk: audioSample,
|
|
47
47
|
trackNumber: addedTrack.trackNumber,
|
|
48
48
|
isVideo: false,
|
|
49
|
-
codecPrivate: track.
|
|
49
|
+
codecPrivate: track.codecData?.data ?? null,
|
|
50
50
|
});
|
|
51
51
|
onMediaStateUpdate?.((prevState) => {
|
|
52
52
|
return {
|
package/dist/on-frame.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MediaParserVideoTrack } from '@remotion/media-parser';
|
|
2
2
|
import type { ConvertMediaOnVideoFrame } from './convert-media';
|
|
3
3
|
import type { ConvertMediaVideoCodec } from './get-available-video-codecs';
|
|
4
4
|
import type { ResizeOperation } from './resizing/mode';
|
|
@@ -7,7 +7,7 @@ export declare const onFrame: ({ frame: unrotatedFrame, onVideoFrame, videoEncod
|
|
|
7
7
|
frame: VideoFrame;
|
|
8
8
|
onVideoFrame: ConvertMediaOnVideoFrame | null;
|
|
9
9
|
videoEncoder: WebCodecsVideoEncoder;
|
|
10
|
-
track:
|
|
10
|
+
track: MediaParserVideoTrack;
|
|
11
11
|
outputCodec: ConvertMediaVideoCodec;
|
|
12
12
|
rotation: number;
|
|
13
13
|
resizeOperation: ResizeOperation | null;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MediaParserContainer, MediaParserLogLevel, MediaParserVideoTrack } from '@remotion/media-parser';
|
|
2
2
|
import type { ConvertMediaContainer } from './get-available-containers';
|
|
3
3
|
import type { ConvertMediaVideoCodec } from './get-available-video-codecs';
|
|
4
4
|
import type { ResizeOperation } from './resizing/mode';
|
|
@@ -16,8 +16,8 @@ export type VideoOperation = {
|
|
|
16
16
|
};
|
|
17
17
|
export type ConvertMediaOnVideoTrackHandler = (options: {
|
|
18
18
|
defaultVideoCodec: ConvertMediaVideoCodec | null;
|
|
19
|
-
track:
|
|
20
|
-
logLevel:
|
|
19
|
+
track: MediaParserVideoTrack;
|
|
20
|
+
logLevel: MediaParserLogLevel;
|
|
21
21
|
outputContainer: ConvertMediaContainer;
|
|
22
22
|
rotate: number;
|
|
23
23
|
resizeOperation: ResizeOperation | null;
|
package/dist/on-video-track.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MediaParserLogLevel, MediaParserOnVideoTrack } from '@remotion/media-parser';
|
|
2
2
|
import type { ConvertMediaOnVideoFrame } from './convert-media';
|
|
3
3
|
import type { MediaFn } from './create/media-fn';
|
|
4
4
|
import type { ProgressTracker } from './create/progress-tracker';
|
|
@@ -16,9 +16,9 @@ export declare const makeVideoTrackHandler: ({ state, onVideoFrame, onMediaState
|
|
|
16
16
|
controller: WebCodecsController;
|
|
17
17
|
defaultVideoCodec: ConvertMediaVideoCodec | null;
|
|
18
18
|
onVideoTrack: ConvertMediaOnVideoTrackHandler | null;
|
|
19
|
-
logLevel:
|
|
19
|
+
logLevel: MediaParserLogLevel;
|
|
20
20
|
outputContainer: ConvertMediaContainer;
|
|
21
21
|
rotate: number;
|
|
22
22
|
progress: ProgressTracker;
|
|
23
23
|
resizeOperation: ResizeOperation | null;
|
|
24
|
-
}) =>
|
|
24
|
+
}) => MediaParserOnVideoTrack;
|
package/dist/on-video-track.js
CHANGED
|
@@ -14,7 +14,7 @@ const video_decoder_config_1 = require("./video-decoder-config");
|
|
|
14
14
|
const video_encoder_1 = require("./video-encoder");
|
|
15
15
|
const video_encoder_config_1 = require("./video-encoder-config");
|
|
16
16
|
const makeVideoTrackHandler = ({ state, onVideoFrame, onMediaStateUpdate, abortConversion, controller, defaultVideoCodec, onVideoTrack, logLevel, outputContainer, rotate, progress, resizeOperation, }) => async ({ track, container: inputContainer }) => {
|
|
17
|
-
if (controller._internals.signal.aborted) {
|
|
17
|
+
if (controller._internals._mediaParserController._internals.signal.aborted) {
|
|
18
18
|
throw new Error('Aborted');
|
|
19
19
|
}
|
|
20
20
|
const canCopyTrack = (0, can_copy_video_track_1.canCopyVideoTrack)({
|
|
@@ -44,11 +44,11 @@ const makeVideoTrackHandler = ({ state, onVideoFrame, onMediaStateUpdate, abortC
|
|
|
44
44
|
log_1.Log.verbose(logLevel, `Copying video track with codec ${track.codec} and timescale ${track.timescale}`);
|
|
45
45
|
const videoTrack = await state.addTrack({
|
|
46
46
|
type: 'video',
|
|
47
|
-
color: track.
|
|
47
|
+
color: track.advancedColor,
|
|
48
48
|
width: track.codedWidth,
|
|
49
49
|
height: track.codedHeight,
|
|
50
|
-
codec: track.
|
|
51
|
-
codecPrivate: track.
|
|
50
|
+
codec: track.codecEnum,
|
|
51
|
+
codecPrivate: track.codecData?.data ?? null,
|
|
52
52
|
timescale: track.timescale,
|
|
53
53
|
});
|
|
54
54
|
return async (sample) => {
|
|
@@ -56,7 +56,7 @@ const makeVideoTrackHandler = ({ state, onVideoFrame, onMediaStateUpdate, abortC
|
|
|
56
56
|
chunk: sample,
|
|
57
57
|
trackNumber: videoTrack.trackNumber,
|
|
58
58
|
isVideo: true,
|
|
59
|
-
codecPrivate: track.
|
|
59
|
+
codecPrivate: track.codecData?.data ?? null,
|
|
60
60
|
});
|
|
61
61
|
onMediaStateUpdate?.((prevState) => {
|
|
62
62
|
return {
|
|
@@ -96,7 +96,7 @@ const makeVideoTrackHandler = ({ state, onVideoFrame, onMediaStateUpdate, abortC
|
|
|
96
96
|
}
|
|
97
97
|
const { trackNumber } = await state.addTrack({
|
|
98
98
|
type: 'video',
|
|
99
|
-
color: track.
|
|
99
|
+
color: track.advancedColor,
|
|
100
100
|
width: newWidth,
|
|
101
101
|
height: newHeight,
|
|
102
102
|
codec: videoOperation.videoCodec,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { MediaParserVideoCodec } from '@remotion/media-parser';
|
|
1
|
+
import type { MediaParserDimensions, MediaParserVideoCodec } from '@remotion/media-parser';
|
|
2
2
|
import type { ConvertMediaVideoCodec } from '../get-available-video-codecs';
|
|
3
|
-
import type {
|
|
3
|
+
import type { ResizeOperation } from './mode';
|
|
4
4
|
export declare const calculateNewSizeAfterResizing: ({ dimensions, resizeOperation, videoCodec, }: {
|
|
5
|
-
dimensions:
|
|
5
|
+
dimensions: MediaParserDimensions;
|
|
6
6
|
resizeOperation: ResizeOperation | null;
|
|
7
7
|
videoCodec: ConvertMediaVideoCodec | MediaParserVideoCodec;
|
|
8
|
-
}) =>
|
|
8
|
+
}) => MediaParserDimensions;
|
package/dist/resizing/mode.d.ts
CHANGED
package/dist/rotation.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MediaParserDimensions, MediaParserVideoCodec } from '@remotion/media-parser';
|
|
2
2
|
import type { ConvertMediaVideoCodec } from './get-available-video-codecs';
|
|
3
3
|
import type { ResizeOperation } from './resizing/mode';
|
|
4
|
-
export declare const calculateNewDimensionsFromRotate: ({ height, width, rotation, }:
|
|
4
|
+
export declare const calculateNewDimensionsFromRotate: ({ height, width, rotation, }: MediaParserDimensions & {
|
|
5
5
|
rotation: number;
|
|
6
6
|
}) => {
|
|
7
7
|
height: number;
|
|
@@ -13,4 +13,4 @@ export declare const calculateNewDimensionsFromRotateAndScale: ({ width, height,
|
|
|
13
13
|
rotation: number;
|
|
14
14
|
resizeOperation: ResizeOperation | null;
|
|
15
15
|
videoCodec: ConvertMediaVideoCodec | MediaParserVideoCodec;
|
|
16
|
-
}) =>
|
|
16
|
+
}) => MediaParserDimensions;
|
|
@@ -5,7 +5,7 @@ const MAX_QUEUE_SIZE = 5;
|
|
|
5
5
|
const videoFrameSorter = ({ onRelease, controller, }) => {
|
|
6
6
|
const frames = [];
|
|
7
7
|
const releaseFrame = async () => {
|
|
8
|
-
await controller._internals.checkForAbortAndPause();
|
|
8
|
+
await controller._internals._mediaParserController._internals.checkForAbortAndPause();
|
|
9
9
|
const frame = frames.shift();
|
|
10
10
|
if (frame) {
|
|
11
11
|
await onRelease(frame);
|
|
@@ -41,9 +41,9 @@ const videoFrameSorter = ({ onRelease, controller, }) => {
|
|
|
41
41
|
while (frames.length > 0) {
|
|
42
42
|
await releaseFrame();
|
|
43
43
|
}
|
|
44
|
-
controller._internals.signal.removeEventListener('abort', onAbort);
|
|
44
|
+
controller._internals._mediaParserController._internals.signal.removeEventListener('abort', onAbort);
|
|
45
45
|
};
|
|
46
|
-
controller._internals.signal.addEventListener('abort', onAbort);
|
|
46
|
+
controller._internals._mediaParserController._internals.signal.addEventListener('abort', onAbort);
|
|
47
47
|
return {
|
|
48
48
|
inputFrame,
|
|
49
49
|
flush,
|
package/dist/video-decoder.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MediaParserLogLevel, MediaParserVideoSample } from '@remotion/media-parser';
|
|
2
2
|
import type { ProgressTracker } from './create/progress-tracker';
|
|
3
3
|
import type { WebCodecsController } from './webcodecs-controller';
|
|
4
4
|
export type WebCodecsVideoDecoder = {
|
|
5
|
-
processSample: (videoSample:
|
|
5
|
+
processSample: (videoSample: MediaParserVideoSample) => Promise<void>;
|
|
6
6
|
waitForFinish: () => Promise<void>;
|
|
7
7
|
close: () => void;
|
|
8
8
|
flush: () => Promise<void>;
|
|
@@ -12,6 +12,6 @@ export declare const createVideoDecoder: ({ onFrame, onError, controller, config
|
|
|
12
12
|
onError: (error: DOMException) => void;
|
|
13
13
|
controller: WebCodecsController;
|
|
14
14
|
config: VideoDecoderConfig;
|
|
15
|
-
logLevel:
|
|
15
|
+
logLevel: MediaParserLogLevel;
|
|
16
16
|
progress: ProgressTracker;
|
|
17
17
|
}) => WebCodecsVideoDecoder;
|
package/dist/video-decoder.js
CHANGED
|
@@ -15,12 +15,12 @@ const createVideoDecoder = ({ onFrame, onError, controller, config, logLevel, pr
|
|
|
15
15
|
const cleanup = () => {
|
|
16
16
|
frame.close();
|
|
17
17
|
};
|
|
18
|
-
controller._internals.signal.addEventListener('abort', cleanup, {
|
|
18
|
+
controller._internals._mediaParserController._internals.signal.addEventListener('abort', cleanup, {
|
|
19
19
|
once: true,
|
|
20
20
|
});
|
|
21
21
|
outputQueue = outputQueue
|
|
22
22
|
.then(() => {
|
|
23
|
-
if (controller._internals.signal.aborted) {
|
|
23
|
+
if (controller._internals._mediaParserController._internals.signal.aborted) {
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
26
|
return onFrame(frame);
|
|
@@ -32,7 +32,7 @@ const createVideoDecoder = ({ onFrame, onError, controller, config, logLevel, pr
|
|
|
32
32
|
onError(err);
|
|
33
33
|
})
|
|
34
34
|
.finally(() => {
|
|
35
|
-
controller._internals.signal.removeEventListener('abort', cleanup);
|
|
35
|
+
controller._internals._mediaParserController._internals.signal.removeEventListener('abort', cleanup);
|
|
36
36
|
cleanup();
|
|
37
37
|
});
|
|
38
38
|
return outputQueue;
|
|
@@ -53,8 +53,9 @@ const createVideoDecoder = ({ onFrame, onError, controller, config, logLevel, pr
|
|
|
53
53
|
},
|
|
54
54
|
});
|
|
55
55
|
const close = () => {
|
|
56
|
+
controller._internals._mediaParserController._internals.signal.removeEventListener('abort',
|
|
56
57
|
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
57
|
-
|
|
58
|
+
onAbort);
|
|
58
59
|
if (videoDecoder.state === 'closed') {
|
|
59
60
|
return;
|
|
60
61
|
}
|
|
@@ -63,7 +64,7 @@ const createVideoDecoder = ({ onFrame, onError, controller, config, logLevel, pr
|
|
|
63
64
|
const onAbort = () => {
|
|
64
65
|
close();
|
|
65
66
|
};
|
|
66
|
-
controller._internals.signal.addEventListener('abort', onAbort);
|
|
67
|
+
controller._internals._mediaParserController._internals.signal.addEventListener('abort', onAbort);
|
|
67
68
|
videoDecoder.configure(config);
|
|
68
69
|
const processSample = async (sample) => {
|
|
69
70
|
if (videoDecoder.state === 'closed') {
|
package/dist/video-encoder.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type MediaParserLogLevel } from '@remotion/media-parser';
|
|
2
2
|
import type { ProgressTracker } from './create/progress-tracker';
|
|
3
3
|
import type { ConvertMediaVideoCodec } from './get-available-video-codecs';
|
|
4
4
|
import type { WebCodecsController } from './webcodecs-controller';
|
|
@@ -13,7 +13,7 @@ export declare const createVideoEncoder: ({ onChunk, onError, controller, config
|
|
|
13
13
|
onError: (error: DOMException) => void;
|
|
14
14
|
controller: WebCodecsController;
|
|
15
15
|
config: VideoEncoderConfig;
|
|
16
|
-
logLevel:
|
|
16
|
+
logLevel: MediaParserLogLevel;
|
|
17
17
|
outputCodec: ConvertMediaVideoCodec;
|
|
18
18
|
progress: ProgressTracker;
|
|
19
19
|
}) => WebCodecsVideoEncoder;
|
package/dist/video-encoder.js
CHANGED
|
@@ -6,7 +6,7 @@ const convert_to_correct_videoframe_1 = require("./convert-to-correct-videoframe
|
|
|
6
6
|
const io_synchronizer_1 = require("./io-manager/io-synchronizer");
|
|
7
7
|
const log_1 = require("./log");
|
|
8
8
|
const createVideoEncoder = ({ onChunk, onError, controller, config, logLevel, outputCodec, progress, }) => {
|
|
9
|
-
if (controller._internals.signal.aborted) {
|
|
9
|
+
if (controller._internals._mediaParserController._internals.signal.aborted) {
|
|
10
10
|
throw new media_parser_1.MediaParserAbortError('Not creating video encoder, already aborted');
|
|
11
11
|
}
|
|
12
12
|
const ioSynchronizer = (0, io_synchronizer_1.makeIoSynchronizer)({
|
|
@@ -24,7 +24,8 @@ const createVideoEncoder = ({ onChunk, onError, controller, config, logLevel, ou
|
|
|
24
24
|
ioSynchronizer.onOutput(timestamp);
|
|
25
25
|
outputQueue = outputQueue
|
|
26
26
|
.then(() => {
|
|
27
|
-
if (controller._internals.signal
|
|
27
|
+
if (controller._internals._mediaParserController._internals.signal
|
|
28
|
+
.aborted) {
|
|
28
29
|
return;
|
|
29
30
|
}
|
|
30
31
|
return onChunk(chunk, metadata ?? null);
|
|
@@ -39,8 +40,9 @@ const createVideoEncoder = ({ onChunk, onError, controller, config, logLevel, ou
|
|
|
39
40
|
},
|
|
40
41
|
});
|
|
41
42
|
const close = () => {
|
|
43
|
+
controller._internals._mediaParserController._internals.signal.removeEventListener('abort',
|
|
42
44
|
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
43
|
-
|
|
45
|
+
onAbort);
|
|
44
46
|
if (encoder.state === 'closed') {
|
|
45
47
|
return;
|
|
46
48
|
}
|
|
@@ -49,7 +51,7 @@ const createVideoEncoder = ({ onChunk, onError, controller, config, logLevel, ou
|
|
|
49
51
|
const onAbort = () => {
|
|
50
52
|
close();
|
|
51
53
|
};
|
|
52
|
-
controller._internals.signal.addEventListener('abort', onAbort);
|
|
54
|
+
controller._internals._mediaParserController._internals.signal.addEventListener('abort', onAbort);
|
|
53
55
|
log_1.Log.verbose(logLevel, 'Configuring video encoder', config);
|
|
54
56
|
encoder.configure(config);
|
|
55
57
|
let framesProcessed = 0;
|
|
@@ -8,7 +8,7 @@ const getWaveAudioEncoder = ({ onChunk, controller, config, }) => {
|
|
|
8
8
|
return Promise.resolve();
|
|
9
9
|
},
|
|
10
10
|
encodeFrame: (unconvertedAudioData) => {
|
|
11
|
-
if (controller._internals.signal.aborted) {
|
|
11
|
+
if (controller._internals._mediaParserController._internals.signal.aborted) {
|
|
12
12
|
return Promise.resolve();
|
|
13
13
|
}
|
|
14
14
|
const audioData = (0, convert_audiodata_1.convertAudioData)({
|
|
@@ -9,9 +9,7 @@ export type WebCodecsController = {
|
|
|
9
9
|
* @deprecated Not public API
|
|
10
10
|
*/
|
|
11
11
|
_internals: {
|
|
12
|
-
|
|
13
|
-
checkForAbortAndPause: MediaParserController['_internals']['checkForAbortAndPause'];
|
|
12
|
+
_mediaParserController: MediaParserController;
|
|
14
13
|
};
|
|
15
|
-
_mediaParserController: MediaParserController;
|
|
16
14
|
};
|
|
17
15
|
export declare const webcodecsController: () => WebCodecsController;
|
|
@@ -10,8 +10,7 @@ const webcodecsController = () => {
|
|
|
10
10
|
resume: controller.resume,
|
|
11
11
|
addEventListener: controller.addEventListener,
|
|
12
12
|
removeEventListener: controller.removeEventListener,
|
|
13
|
-
_internals: controller
|
|
14
|
-
_mediaParserController: controller,
|
|
13
|
+
_internals: { _mediaParserController: controller },
|
|
15
14
|
};
|
|
16
15
|
};
|
|
17
16
|
exports.webcodecsController = webcodecsController;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const createContent: CreateContent;
|
|
1
|
+
import type { MediaParserInternalTypes } from '@remotion/media-parser';
|
|
2
|
+
export declare const createContent: MediaParserInternalTypes['CreateContent'];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createContent = void 0;
|
|
4
|
-
const createContent = ({ filename, mimeType }) => {
|
|
4
|
+
const createContent = ({ filename, mimeType, }) => {
|
|
5
5
|
const buf = new ArrayBuffer(0, {
|
|
6
6
|
// TODO: Educate that the buffer is limited to 2GB
|
|
7
7
|
maxByteLength: 2000000000,
|
|
@@ -36,9 +36,7 @@ const createContent = ({ filename, mimeType }) => {
|
|
|
36
36
|
},
|
|
37
37
|
getBlob() {
|
|
38
38
|
const arr = new Uint8Array(buf);
|
|
39
|
-
return Promise.resolve(
|
|
40
|
-
// TODO: Unhardcode MIME type and file name
|
|
41
|
-
new File([arr.slice()], filename, { type: mimeType }));
|
|
39
|
+
return Promise.resolve(new File([arr.slice()], filename, { type: mimeType }));
|
|
42
40
|
},
|
|
43
41
|
remove() {
|
|
44
42
|
removed = true;
|
package/dist/writers/buffer.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const bufferWriter: WriterInterface;
|
|
1
|
+
import type { MediaParserInternalTypes } from '@remotion/media-parser';
|
|
2
|
+
export declare const bufferWriter: MediaParserInternalTypes['WriterInterface'];
|
package/dist/writers/web-fs.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const webFsWriter: WriterInterface;
|
|
1
|
+
import type { MediaParserInternalTypes } from '@remotion/media-parser';
|
|
2
|
+
export declare const webFsWriter: MediaParserInternalTypes['WriterInterface'];
|
|
3
3
|
export declare const canUseWebFsWriter: () => Promise<boolean>;
|
package/dist/writers/web-fs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.canUseWebFsWriter = exports.webFsWriter = void 0;
|
|
4
|
-
const createContent = async ({ filename }) => {
|
|
4
|
+
const createContent = async ({ filename, }) => {
|
|
5
5
|
const directoryHandle = await navigator.storage.getDirectory();
|
|
6
6
|
const actualFilename = `__remotion_mediaparser:${filename}`;
|
|
7
7
|
const remove = async () => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/webcodecs",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.301",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"module": "dist/esm/index.mjs",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"author": "Jonny Burger <jonny@remotion.dev>",
|
|
20
20
|
"license": "Remotion License (See https://remotion.dev/docs/webcodecs#license)",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@remotion/
|
|
23
|
-
"@remotion/
|
|
22
|
+
"@remotion/media-parser": "4.0.301",
|
|
23
|
+
"@remotion/licensing": "4.0.301"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {},
|
|
26
26
|
"devDependencies": {
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"playwright": "1.51.1",
|
|
29
29
|
"@playwright/test": "1.51.1",
|
|
30
30
|
"eslint": "9.19.0",
|
|
31
|
-
"@remotion/
|
|
32
|
-
"@remotion/
|
|
31
|
+
"@remotion/example-videos": "4.0.301",
|
|
32
|
+
"@remotion/eslint-config-internal": "4.0.301"
|
|
33
33
|
},
|
|
34
34
|
"keywords": [],
|
|
35
35
|
"publishConfig": {
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resampleAudioData = void 0;
|
|
4
|
-
const resampleAudioData = ({ audioData, newSampleRate, }) => {
|
|
5
|
-
const { numberOfChannels, sampleRate: currentSampleRate, numberOfFrames, } = audioData;
|
|
6
|
-
const ratio = currentSampleRate / newSampleRate;
|
|
7
|
-
const newNumberOfFrames = Math.floor(numberOfFrames / ratio);
|
|
8
|
-
// TODO: Float32Array hardcoded
|
|
9
|
-
const src = new Float32Array(numberOfChannels * numberOfFrames);
|
|
10
|
-
audioData.clone().copyTo(src, {
|
|
11
|
-
// TODO: Plane index hardcoded
|
|
12
|
-
planeIndex: 0,
|
|
13
|
-
});
|
|
14
|
-
const data = new Float32Array(newNumberOfFrames * numberOfChannels);
|
|
15
|
-
const chunkSize = numberOfFrames / newNumberOfFrames;
|
|
16
|
-
for (let i = 0; i < newNumberOfFrames; i++) {
|
|
17
|
-
const start = Math.floor(i * chunkSize);
|
|
18
|
-
const end = Math.max(Math.floor(start + chunkSize), start + 1);
|
|
19
|
-
const chunk = src.slice(start, end);
|
|
20
|
-
const average = chunk.reduce((a, b) => a + b, 0) / chunk.length;
|
|
21
|
-
for (let j = 0; j < numberOfChannels; j++) {
|
|
22
|
-
data[i * numberOfChannels + j] = average;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
const newAudioData = new AudioData({
|
|
26
|
-
data,
|
|
27
|
-
format: audioData.format,
|
|
28
|
-
numberOfChannels,
|
|
29
|
-
numberOfFrames: newNumberOfFrames,
|
|
30
|
-
sampleRate: newSampleRate,
|
|
31
|
-
timestamp: audioData.timestamp,
|
|
32
|
-
});
|
|
33
|
-
return newAudioData;
|
|
34
|
-
};
|
|
35
|
-
exports.resampleAudioData = resampleAudioData;
|