@remotion/media 4.0.454 → 4.0.455
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/debug-overlay/preview-overlay.d.ts +1 -1
- package/dist/esm/index.mjs +107 -22
- package/dist/helpers/resolve-audio-track.d.ts +6 -0
- package/dist/index.d.ts +1 -0
- package/dist/media-player.d.ts +9 -1
- package/dist/use-media-in-timeline.d.ts +3 -2
- package/dist/video/props.d.ts +2 -0
- package/dist/video/video-for-preview.d.ts +2 -1
- package/dist/video/video.d.ts +1 -0
- package/dist/video-iterator-manager.d.ts +6 -2
- package/package.json +3 -3
|
@@ -86,7 +86,7 @@ export declare const drawPreviewOverlay: ({ context, audioTime, audioContextStat
|
|
|
86
86
|
frame: import("mediabunny").WrappedCanvas;
|
|
87
87
|
};
|
|
88
88
|
} | null;
|
|
89
|
-
drawFrame: (frame: import("mediabunny").WrappedCanvas) => void
|
|
89
|
+
drawFrame: (frame: import("mediabunny").WrappedCanvas) => Promise<void>;
|
|
90
90
|
getFramesRendered: () => number;
|
|
91
91
|
} | null;
|
|
92
92
|
playbackRate: number;
|
package/dist/esm/index.mjs
CHANGED
|
@@ -765,6 +765,21 @@ var getDurationOrCompute = async (input) => {
|
|
|
765
765
|
}) ?? input.computeDuration(undefined, { skipLiveWait: true });
|
|
766
766
|
};
|
|
767
767
|
|
|
768
|
+
// src/helpers/resolve-audio-track.ts
|
|
769
|
+
var resolveAudioTrack = async ({
|
|
770
|
+
videoTrack,
|
|
771
|
+
audioTracks,
|
|
772
|
+
audioStreamIndex
|
|
773
|
+
}) => {
|
|
774
|
+
if (audioStreamIndex !== null) {
|
|
775
|
+
return audioTracks[audioStreamIndex] ?? null;
|
|
776
|
+
}
|
|
777
|
+
if (videoTrack) {
|
|
778
|
+
return await videoTrack.getPrimaryPairableAudioTrack() ?? null;
|
|
779
|
+
}
|
|
780
|
+
return audioTracks[0] ?? null;
|
|
781
|
+
};
|
|
782
|
+
|
|
768
783
|
// src/is-type-of-error.ts
|
|
769
784
|
function isNetworkError(error) {
|
|
770
785
|
if (error.message.includes("Failed to fetch") || error.message.includes("Load failed") || error.message.includes("NetworkError when attempting to fetch resource")) {
|
|
@@ -1020,6 +1035,7 @@ var createVideoIterator = async (timeToSeek, cache) => {
|
|
|
1020
1035
|
};
|
|
1021
1036
|
|
|
1022
1037
|
// src/video-iterator-manager.ts
|
|
1038
|
+
var { runEffectChain } = Internals3;
|
|
1023
1039
|
var videoIteratorManager = async ({
|
|
1024
1040
|
delayPlaybackHandleIfNotPremounting,
|
|
1025
1041
|
canvas,
|
|
@@ -1030,7 +1046,10 @@ var videoIteratorManager = async ({
|
|
|
1030
1046
|
videoTrack,
|
|
1031
1047
|
getLoopSegmentMediaEndTimestamp,
|
|
1032
1048
|
getStartTime,
|
|
1033
|
-
getIsLooping
|
|
1049
|
+
getIsLooping,
|
|
1050
|
+
getEffects,
|
|
1051
|
+
getEffectChainState,
|
|
1052
|
+
getCurrentFrame
|
|
1034
1053
|
}) => {
|
|
1035
1054
|
let videoIteratorsCreated = 0;
|
|
1036
1055
|
let videoFrameIterator = null;
|
|
@@ -1050,10 +1069,24 @@ var videoIteratorManager = async ({
|
|
|
1050
1069
|
alpha: true
|
|
1051
1070
|
});
|
|
1052
1071
|
const prewarmedVideoIteratorCache = makePrewarmedVideoIteratorCache(canvasSink);
|
|
1053
|
-
const drawFrame = (frame) => {
|
|
1072
|
+
const drawFrame = async (frame) => {
|
|
1054
1073
|
if (context && canvas) {
|
|
1055
|
-
|
|
1056
|
-
|
|
1074
|
+
const effects = getEffects();
|
|
1075
|
+
const chainState = getEffectChainState(canvas.width, canvas.height);
|
|
1076
|
+
if (effects.length > 0 && chainState && canvas instanceof HTMLCanvasElement) {
|
|
1077
|
+
await runEffectChain({
|
|
1078
|
+
state: chainState,
|
|
1079
|
+
source: frame.canvas,
|
|
1080
|
+
effects,
|
|
1081
|
+
output: canvas,
|
|
1082
|
+
frame: getCurrentFrame(),
|
|
1083
|
+
width: canvas.width,
|
|
1084
|
+
height: canvas.height
|
|
1085
|
+
});
|
|
1086
|
+
} else {
|
|
1087
|
+
context.clearRect(0, 0, canvas.width, canvas.height);
|
|
1088
|
+
context.drawImage(frame.canvas, 0, 0);
|
|
1089
|
+
}
|
|
1057
1090
|
}
|
|
1058
1091
|
framesRendered++;
|
|
1059
1092
|
drawDebugOverlay();
|
|
@@ -1084,7 +1117,7 @@ var videoIteratorManager = async ({
|
|
|
1084
1117
|
if (!iterator.initialFrame) {
|
|
1085
1118
|
return;
|
|
1086
1119
|
}
|
|
1087
|
-
drawFrame(iterator.initialFrame);
|
|
1120
|
+
await drawFrame(iterator.initialFrame);
|
|
1088
1121
|
} catch (_catch) {
|
|
1089
1122
|
var _err = _catch, _hasErr = 1;
|
|
1090
1123
|
} finally {
|
|
@@ -1104,7 +1137,7 @@ var videoIteratorManager = async ({
|
|
|
1104
1137
|
}
|
|
1105
1138
|
const videoSatisfyResult = videoFrameIterator.tryToSatisfySeek(newTime);
|
|
1106
1139
|
if (videoSatisfyResult.type === "satisfied") {
|
|
1107
|
-
drawFrame(videoSatisfyResult.frame);
|
|
1140
|
+
await drawFrame(videoSatisfyResult.frame);
|
|
1108
1141
|
return;
|
|
1109
1142
|
}
|
|
1110
1143
|
if (nonce.isStale()) {
|
|
@@ -1158,6 +1191,9 @@ class MediaPlayer {
|
|
|
1158
1191
|
debugOverlay = false;
|
|
1159
1192
|
nonceManager;
|
|
1160
1193
|
onVideoFrameCallback = null;
|
|
1194
|
+
getEffects;
|
|
1195
|
+
getEffectChainState;
|
|
1196
|
+
getCurrentFrame;
|
|
1161
1197
|
initializationPromise = null;
|
|
1162
1198
|
bufferState;
|
|
1163
1199
|
isPremounting;
|
|
@@ -1184,7 +1220,10 @@ class MediaPlayer {
|
|
|
1184
1220
|
playing,
|
|
1185
1221
|
sequenceOffset,
|
|
1186
1222
|
credentials,
|
|
1187
|
-
tagType
|
|
1223
|
+
tagType,
|
|
1224
|
+
getEffects,
|
|
1225
|
+
getEffectChainState,
|
|
1226
|
+
getCurrentFrame
|
|
1188
1227
|
}) {
|
|
1189
1228
|
this.canvas = canvas ?? null;
|
|
1190
1229
|
this.src = src;
|
|
@@ -1213,6 +1252,9 @@ class MediaPlayer {
|
|
|
1213
1252
|
formats: ALL_FORMATS
|
|
1214
1253
|
});
|
|
1215
1254
|
this.tagType = tagType;
|
|
1255
|
+
this.getEffects = getEffects;
|
|
1256
|
+
this.getEffectChainState = getEffectChainState;
|
|
1257
|
+
this.getCurrentFrame = getCurrentFrame;
|
|
1216
1258
|
if (canvas) {
|
|
1217
1259
|
const context = canvas.getContext("2d", {
|
|
1218
1260
|
alpha: true,
|
|
@@ -1288,7 +1330,11 @@ class MediaPlayer {
|
|
|
1288
1330
|
return { type: "disposed" };
|
|
1289
1331
|
}
|
|
1290
1332
|
this.totalDuration = durationInSeconds;
|
|
1291
|
-
const audioTrack = await (
|
|
1333
|
+
const audioTrack = await resolveAudioTrack({
|
|
1334
|
+
videoTrack,
|
|
1335
|
+
audioTracks,
|
|
1336
|
+
audioStreamIndex: this.audioStreamIndex
|
|
1337
|
+
});
|
|
1292
1338
|
if (!videoTrack && !audioTrack) {
|
|
1293
1339
|
return { type: "no-tracks" };
|
|
1294
1340
|
}
|
|
@@ -1316,7 +1362,10 @@ class MediaPlayer {
|
|
|
1316
1362
|
drawDebugOverlay: this.drawDebugOverlay,
|
|
1317
1363
|
getLoopSegmentMediaEndTimestamp: () => this.getLoopSegmentMediaEndTimestamp(),
|
|
1318
1364
|
getStartTime: () => this.getStartTime(),
|
|
1319
|
-
getIsLooping: () => this.loop
|
|
1365
|
+
getIsLooping: () => this.loop,
|
|
1366
|
+
getEffects: this.getEffects,
|
|
1367
|
+
getEffectChainState: this.getEffectChainState,
|
|
1368
|
+
getCurrentFrame: this.getCurrentFrame
|
|
1320
1369
|
});
|
|
1321
1370
|
}
|
|
1322
1371
|
const startTime = this.getTrimmedTime(startTimeUnresolved);
|
|
@@ -1877,7 +1926,8 @@ var useMediaInTimeline = ({
|
|
|
1877
1926
|
loopDisplay,
|
|
1878
1927
|
trimBefore,
|
|
1879
1928
|
trimAfter,
|
|
1880
|
-
controls
|
|
1929
|
+
controls,
|
|
1930
|
+
_experimentalEffects
|
|
1881
1931
|
}) => {
|
|
1882
1932
|
const parentSequence = useContext2(Internals7.SequenceContext);
|
|
1883
1933
|
const startsAt = Internals7.useMediaStartsAt();
|
|
@@ -1930,7 +1980,8 @@ var useMediaInTimeline = ({
|
|
|
1930
1980
|
stack,
|
|
1931
1981
|
premountDisplay,
|
|
1932
1982
|
postmountDisplay,
|
|
1933
|
-
controls: controls ?? null
|
|
1983
|
+
controls: controls ?? null,
|
|
1984
|
+
effects: _experimentalEffects
|
|
1934
1985
|
});
|
|
1935
1986
|
return () => {
|
|
1936
1987
|
unregisterSequence(mediaId);
|
|
@@ -1957,7 +2008,8 @@ var useMediaInTimeline = ({
|
|
|
1957
2008
|
startsAt,
|
|
1958
2009
|
unregisterSequence,
|
|
1959
2010
|
volumes,
|
|
1960
|
-
trimBefore
|
|
2011
|
+
trimBefore,
|
|
2012
|
+
_experimentalEffects
|
|
1961
2013
|
]);
|
|
1962
2014
|
return {
|
|
1963
2015
|
id: mediaId
|
|
@@ -2042,6 +2094,9 @@ var AudioForPreviewAssertedShowing = ({
|
|
|
2042
2094
|
trimAfter,
|
|
2043
2095
|
trimBefore
|
|
2044
2096
|
});
|
|
2097
|
+
const effects = useMemo2(() => {
|
|
2098
|
+
return [];
|
|
2099
|
+
}, []);
|
|
2045
2100
|
useMediaInTimeline({
|
|
2046
2101
|
volume,
|
|
2047
2102
|
mediaVolume,
|
|
@@ -2056,7 +2111,8 @@ var AudioForPreviewAssertedShowing = ({
|
|
|
2056
2111
|
loopDisplay,
|
|
2057
2112
|
trimAfter,
|
|
2058
2113
|
trimBefore,
|
|
2059
|
-
controls
|
|
2114
|
+
controls,
|
|
2115
|
+
_experimentalEffects: effects
|
|
2060
2116
|
});
|
|
2061
2117
|
const bufferingContext = useContext3(Internals8.BufferingContextReact);
|
|
2062
2118
|
if (!bufferingContext) {
|
|
@@ -2138,7 +2194,10 @@ var AudioForPreviewAssertedShowing = ({
|
|
|
2138
2194
|
playing: initialPlaying.current,
|
|
2139
2195
|
sequenceOffset: initialSequenceOffset.current,
|
|
2140
2196
|
credentials,
|
|
2141
|
-
tagType: "audio"
|
|
2197
|
+
tagType: "audio",
|
|
2198
|
+
getEffects: () => [],
|
|
2199
|
+
getEffectChainState: () => null,
|
|
2200
|
+
getCurrentFrame: () => 0
|
|
2142
2201
|
});
|
|
2143
2202
|
mediaPlayerRef.current = player;
|
|
2144
2203
|
player.initialize(currentTimeRef.current, initialMuted.current).then((result) => {
|
|
@@ -3555,8 +3614,15 @@ var getSinks = async (src, credentials) => {
|
|
|
3555
3614
|
if (format === "network-error") {
|
|
3556
3615
|
return "network-error";
|
|
3557
3616
|
}
|
|
3558
|
-
const videoTrack = await
|
|
3559
|
-
|
|
3617
|
+
const [videoTrack, audioTracks] = await Promise.all([
|
|
3618
|
+
input.getPrimaryVideoTrack(),
|
|
3619
|
+
input.getAudioTracks()
|
|
3620
|
+
]);
|
|
3621
|
+
const audioTrack = await resolveAudioTrack({
|
|
3622
|
+
videoTrack,
|
|
3623
|
+
audioTracks,
|
|
3624
|
+
audioStreamIndex: index
|
|
3625
|
+
});
|
|
3560
3626
|
if (!audioTrack) {
|
|
3561
3627
|
return "no-audio-track";
|
|
3562
3628
|
}
|
|
@@ -4533,7 +4599,9 @@ var {
|
|
|
4533
4599
|
warnAboutTooHighVolume: warnAboutTooHighVolume2,
|
|
4534
4600
|
usePreload: usePreload2,
|
|
4535
4601
|
SequenceContext: SequenceContext2,
|
|
4536
|
-
SequenceVisibilityToggleContext
|
|
4602
|
+
SequenceVisibilityToggleContext,
|
|
4603
|
+
useEffectChainState,
|
|
4604
|
+
useMemoizedEffects
|
|
4537
4605
|
} = Internals19;
|
|
4538
4606
|
var VideoForPreviewAssertedShowing = ({
|
|
4539
4607
|
src: unpreloadedSrc,
|
|
@@ -4560,7 +4628,8 @@ var VideoForPreviewAssertedShowing = ({
|
|
|
4560
4628
|
credentials,
|
|
4561
4629
|
controls,
|
|
4562
4630
|
objectFit: objectFitProp,
|
|
4563
|
-
_experimentalInitiallyDrawCachedFrame
|
|
4631
|
+
_experimentalInitiallyDrawCachedFrame,
|
|
4632
|
+
_experimentalEffects
|
|
4564
4633
|
}) => {
|
|
4565
4634
|
const src = usePreload2(unpreloadedSrc);
|
|
4566
4635
|
const canvasRef = useRef2(null);
|
|
@@ -4591,6 +4660,14 @@ var VideoForPreviewAssertedShowing = ({
|
|
|
4591
4660
|
throw new Error("No video config found");
|
|
4592
4661
|
}
|
|
4593
4662
|
warnAboutTooHighVolume2(userPreferredVolume);
|
|
4663
|
+
const effectChainState = useEffectChainState();
|
|
4664
|
+
const experimentalEffectsRef = useRef2(_experimentalEffects);
|
|
4665
|
+
experimentalEffectsRef.current = _experimentalEffects;
|
|
4666
|
+
const memoizedEffects = useMemoizedEffects(_experimentalEffects.flat());
|
|
4667
|
+
const effectChainStateRef = useRef2(effectChainState);
|
|
4668
|
+
effectChainStateRef.current = effectChainState;
|
|
4669
|
+
const frameRef = useRef2(frame);
|
|
4670
|
+
frameRef.current = frame;
|
|
4594
4671
|
const parentSequence = useContext5(SequenceContext2);
|
|
4595
4672
|
const isPremounting = Boolean(parentSequence?.premounting);
|
|
4596
4673
|
const isPostmounting = Boolean(parentSequence?.postmounting);
|
|
@@ -4616,7 +4693,8 @@ var VideoForPreviewAssertedShowing = ({
|
|
|
4616
4693
|
mediaVolume,
|
|
4617
4694
|
trimAfter,
|
|
4618
4695
|
trimBefore,
|
|
4619
|
-
controls
|
|
4696
|
+
controls,
|
|
4697
|
+
_experimentalEffects: memoizedEffects
|
|
4620
4698
|
});
|
|
4621
4699
|
const isSequenceHidden = hidden[timelineId] ?? false;
|
|
4622
4700
|
const currentTime = frame / videoConfig.fps;
|
|
@@ -4718,7 +4796,10 @@ var VideoForPreviewAssertedShowing = ({
|
|
|
4718
4796
|
playing: initialPlaying.current,
|
|
4719
4797
|
sequenceOffset: initialSequenceOffset.current,
|
|
4720
4798
|
credentials,
|
|
4721
|
-
tagType: "video"
|
|
4799
|
+
tagType: "video",
|
|
4800
|
+
getEffects: () => experimentalEffectsRef.current,
|
|
4801
|
+
getEffectChainState: (width, height) => effectChainStateRef.current?.get(width, height),
|
|
4802
|
+
getCurrentFrame: () => frameRef.current
|
|
4722
4803
|
});
|
|
4723
4804
|
mediaPlayerRef.current = player;
|
|
4724
4805
|
player.initialize(currentTimeRef.current, initialMuted.current).then((result) => {
|
|
@@ -5314,7 +5395,8 @@ var InnerVideo = ({
|
|
|
5314
5395
|
credentials,
|
|
5315
5396
|
controls,
|
|
5316
5397
|
objectFit,
|
|
5317
|
-
_experimentalInitiallyDrawCachedFrame
|
|
5398
|
+
_experimentalInitiallyDrawCachedFrame,
|
|
5399
|
+
_experimentalEffects
|
|
5318
5400
|
}) => {
|
|
5319
5401
|
const environment = useRemotionEnvironment4();
|
|
5320
5402
|
if (typeof src !== "string") {
|
|
@@ -5386,6 +5468,7 @@ var InnerVideo = ({
|
|
|
5386
5468
|
credentials,
|
|
5387
5469
|
controls,
|
|
5388
5470
|
objectFit,
|
|
5471
|
+
_experimentalEffects,
|
|
5389
5472
|
_experimentalInitiallyDrawCachedFrame
|
|
5390
5473
|
});
|
|
5391
5474
|
};
|
|
@@ -5418,6 +5501,7 @@ var VideoInner = ({
|
|
|
5418
5501
|
controls,
|
|
5419
5502
|
objectFit,
|
|
5420
5503
|
_experimentalInitiallyDrawCachedFrame,
|
|
5504
|
+
_experimentalEffects,
|
|
5421
5505
|
from,
|
|
5422
5506
|
durationInFrames
|
|
5423
5507
|
}) => {
|
|
@@ -5455,7 +5539,8 @@ var VideoInner = ({
|
|
|
5455
5539
|
credentials,
|
|
5456
5540
|
controls,
|
|
5457
5541
|
objectFit: objectFit ?? "contain",
|
|
5458
|
-
_experimentalInitiallyDrawCachedFrame: _experimentalInitiallyDrawCachedFrame ?? false
|
|
5542
|
+
_experimentalInitiallyDrawCachedFrame: _experimentalInitiallyDrawCachedFrame ?? false,
|
|
5543
|
+
_experimentalEffects: _experimentalEffects ?? []
|
|
5459
5544
|
})
|
|
5460
5545
|
});
|
|
5461
5546
|
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { InputAudioTrack, InputVideoTrack } from 'mediabunny';
|
|
2
|
+
export declare const resolveAudioTrack: ({ videoTrack, audioTracks, audioStreamIndex, }: {
|
|
3
|
+
videoTrack: InputVideoTrack | null;
|
|
4
|
+
audioTracks: InputAudioTrack[];
|
|
5
|
+
audioStreamIndex: number | null;
|
|
6
|
+
}) => Promise<InputAudioTrack | null>;
|
package/dist/index.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ export declare const experimental_Video: import("react").ComponentType<{
|
|
|
39
39
|
credentials: RequestCredentials | undefined;
|
|
40
40
|
objectFit: import(".").VideoObjectFit;
|
|
41
41
|
_experimentalInitiallyDrawCachedFrame: boolean;
|
|
42
|
+
_experimentalEffects: import("remotion").EffectsProp;
|
|
42
43
|
}> & {
|
|
43
44
|
from?: number | undefined;
|
|
44
45
|
durationInFrames?: number | undefined;
|
package/dist/media-player.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { LogLevel, useBufferState } from 'remotion';
|
|
2
|
+
import type { EffectChainState } from 'remotion';
|
|
3
|
+
import type { EffectsProp } from 'remotion';
|
|
2
4
|
import { type AudioIteratorManager } from './audio-iterator-manager';
|
|
3
5
|
import type { SharedAudioContextForMediaPlayer } from './shared-audio-context-for-media-player';
|
|
4
6
|
import type { VideoIteratorManager } from './video-iterator-manager';
|
|
@@ -39,12 +41,15 @@ export declare class MediaPlayer {
|
|
|
39
41
|
private debugOverlay;
|
|
40
42
|
private nonceManager;
|
|
41
43
|
private onVideoFrameCallback;
|
|
44
|
+
private getEffects;
|
|
45
|
+
private getEffectChainState;
|
|
46
|
+
private getCurrentFrame;
|
|
42
47
|
private initializationPromise;
|
|
43
48
|
private bufferState;
|
|
44
49
|
private isPremounting;
|
|
45
50
|
private isPostmounting;
|
|
46
51
|
private seekPromiseChain;
|
|
47
|
-
constructor({ canvas, src, logLevel, sharedAudioContext, loop, trimBefore, trimAfter, playbackRate, globalPlaybackRate, audioStreamIndex, fps, debugOverlay, bufferState, isPremounting, isPostmounting, durationInFrames, onVideoFrameCallback, playing, sequenceOffset, credentials, tagType }: {
|
|
52
|
+
constructor({ canvas, src, logLevel, sharedAudioContext, loop, trimBefore, trimAfter, playbackRate, globalPlaybackRate, audioStreamIndex, fps, debugOverlay, bufferState, isPremounting, isPostmounting, durationInFrames, onVideoFrameCallback, playing, sequenceOffset, credentials, tagType, getEffects, getEffectChainState, getCurrentFrame }: {
|
|
48
53
|
canvas: HTMLCanvasElement | OffscreenCanvas | null;
|
|
49
54
|
src: string;
|
|
50
55
|
logLevel: LogLevel;
|
|
@@ -66,6 +71,9 @@ export declare class MediaPlayer {
|
|
|
66
71
|
sequenceOffset: number;
|
|
67
72
|
credentials: RequestCredentials | undefined;
|
|
68
73
|
tagType: 'audio' | 'video';
|
|
74
|
+
getEffects: () => EffectsProp;
|
|
75
|
+
getEffectChainState: (width: number, height: number) => EffectChainState | null;
|
|
76
|
+
getCurrentFrame: () => number;
|
|
69
77
|
});
|
|
70
78
|
private input;
|
|
71
79
|
private isDisposalError;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { LoopDisplay, SequenceControls } from 'remotion';
|
|
1
|
+
import type { EffectDefinitionAndStack, LoopDisplay, SequenceControls } from 'remotion';
|
|
2
2
|
import { type VolumeProp } from 'remotion';
|
|
3
|
-
export declare const useMediaInTimeline: ({ volume, mediaVolume, src, mediaType, playbackRate, displayName, stack, showInTimeline, premountDisplay, postmountDisplay, loopDisplay, trimBefore, trimAfter, controls, }: {
|
|
3
|
+
export declare const useMediaInTimeline: ({ volume, mediaVolume, src, mediaType, playbackRate, displayName, stack, showInTimeline, premountDisplay, postmountDisplay, loopDisplay, trimBefore, trimAfter, controls, _experimentalEffects, }: {
|
|
4
4
|
volume: VolumeProp | undefined;
|
|
5
5
|
mediaVolume: number;
|
|
6
6
|
src: string | undefined;
|
|
@@ -15,6 +15,7 @@ export declare const useMediaInTimeline: ({ volume, mediaVolume, src, mediaType,
|
|
|
15
15
|
trimBefore: number | undefined;
|
|
16
16
|
trimAfter: number | undefined;
|
|
17
17
|
controls: SequenceControls | undefined;
|
|
18
|
+
_experimentalEffects: EffectDefinitionAndStack<unknown>[];
|
|
18
19
|
}) => {
|
|
19
20
|
id: string;
|
|
20
21
|
};
|
package/dist/video/props.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { LogLevel, LoopVolumeCurveBehavior, OnVideoFrame, VolumeProp } from 'remotion';
|
|
2
|
+
import type { EffectsProp } from 'remotion';
|
|
2
3
|
import type { MediaOnError } from '../on-error';
|
|
3
4
|
export type MediaErrorEvent = {
|
|
4
5
|
error: Error;
|
|
@@ -51,6 +52,7 @@ type OptionalVideoProps = {
|
|
|
51
52
|
credentials: RequestCredentials | undefined;
|
|
52
53
|
objectFit: VideoObjectFit;
|
|
53
54
|
_experimentalInitiallyDrawCachedFrame: boolean;
|
|
55
|
+
_experimentalEffects: EffectsProp;
|
|
54
56
|
};
|
|
55
57
|
export type InnerVideoProps = MandatoryVideoProps & OuterVideoProps & OptionalVideoProps;
|
|
56
58
|
export type VideoProps = MandatoryVideoProps & Partial<OuterVideoProps> & Partial<OptionalVideoProps> & {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { LogLevel, LoopVolumeCurveBehavior, SequenceControls, VolumeProp } from 'remotion';
|
|
2
|
+
import type { EffectsProp, LogLevel, LoopVolumeCurveBehavior, SequenceControls, VolumeProp } from 'remotion';
|
|
3
3
|
import { type MediaOnError } from '../on-error';
|
|
4
4
|
import type { FallbackOffthreadVideoProps, VideoObjectFit } from './props';
|
|
5
5
|
type VideoForPreviewProps = {
|
|
@@ -27,6 +27,7 @@ type VideoForPreviewProps = {
|
|
|
27
27
|
readonly credentials: RequestCredentials | undefined;
|
|
28
28
|
readonly objectFit: VideoObjectFit;
|
|
29
29
|
readonly _experimentalInitiallyDrawCachedFrame: boolean;
|
|
30
|
+
readonly _experimentalEffects: EffectsProp;
|
|
30
31
|
};
|
|
31
32
|
export declare const VideoForPreview: React.FC<VideoForPreviewProps & {
|
|
32
33
|
readonly controls: SequenceControls | undefined;
|
package/dist/video/video.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ export declare const Video: React.ComponentType<{
|
|
|
31
31
|
credentials: RequestCredentials | undefined;
|
|
32
32
|
objectFit: import("./props").VideoObjectFit;
|
|
33
33
|
_experimentalInitiallyDrawCachedFrame: boolean;
|
|
34
|
+
_experimentalEffects: import("remotion").EffectsProp;
|
|
34
35
|
}> & {
|
|
35
36
|
from?: number | undefined;
|
|
36
37
|
durationInFrames?: number | undefined;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { InputVideoTrack, WrappedCanvas } from 'mediabunny';
|
|
2
|
+
import type { EffectChainState, EffectsProp } from 'remotion';
|
|
2
3
|
import type { DelayPlaybackIfNotPremounting } from './delay-playback-if-not-premounting';
|
|
3
4
|
import type { Nonce } from './nonce-manager';
|
|
4
|
-
export declare const videoIteratorManager: ({ delayPlaybackHandleIfNotPremounting, canvas, context, drawDebugOverlay, logLevel, getOnVideoFrameCallback, videoTrack, getLoopSegmentMediaEndTimestamp, getStartTime, getIsLooping, }: {
|
|
5
|
+
export declare const videoIteratorManager: ({ delayPlaybackHandleIfNotPremounting, canvas, context, drawDebugOverlay, logLevel, getOnVideoFrameCallback, videoTrack, getLoopSegmentMediaEndTimestamp, getStartTime, getIsLooping, getEffects, getEffectChainState, getCurrentFrame, }: {
|
|
5
6
|
videoTrack: InputVideoTrack;
|
|
6
7
|
delayPlaybackHandleIfNotPremounting: () => DelayPlaybackIfNotPremounting;
|
|
7
8
|
context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D | null;
|
|
@@ -12,6 +13,9 @@ export declare const videoIteratorManager: ({ delayPlaybackHandleIfNotPremountin
|
|
|
12
13
|
getLoopSegmentMediaEndTimestamp: () => number;
|
|
13
14
|
getStartTime: () => number;
|
|
14
15
|
getIsLooping: () => boolean;
|
|
16
|
+
getEffects: () => EffectsProp;
|
|
17
|
+
getEffectChainState: (width: number, height: number) => EffectChainState | null;
|
|
18
|
+
getCurrentFrame: () => number;
|
|
15
19
|
}) => Promise<{
|
|
16
20
|
startVideoIterator: (timeToSeek: number, nonce: Nonce) => Promise<void>;
|
|
17
21
|
getVideoIteratorsCreated: () => number;
|
|
@@ -32,7 +36,7 @@ export declare const videoIteratorManager: ({ delayPlaybackHandleIfNotPremountin
|
|
|
32
36
|
frame: WrappedCanvas;
|
|
33
37
|
};
|
|
34
38
|
} | null;
|
|
35
|
-
drawFrame: (frame: WrappedCanvas) => void
|
|
39
|
+
drawFrame: (frame: WrappedCanvas) => Promise<void>;
|
|
36
40
|
getFramesRendered: () => number;
|
|
37
41
|
}>;
|
|
38
42
|
export type VideoIteratorManager = Awaited<ReturnType<typeof videoIteratorManager>>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/media",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.455",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"module": "dist/esm/index.mjs",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"mediabunny": "1.42.0",
|
|
26
|
-
"remotion": "4.0.
|
|
26
|
+
"remotion": "4.0.455",
|
|
27
27
|
"zod": "4.3.6"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"react-dom": ">=16.8.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
34
|
+
"@remotion/eslint-config-internal": "4.0.455",
|
|
35
35
|
"@vitest/browser-webdriverio": "4.0.9",
|
|
36
36
|
"eslint": "9.19.0",
|
|
37
37
|
"react": "19.2.3",
|