@remotion/webcodecs 4.0.329 → 4.0.330
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/esm/index.mjs +8 -2
- package/dist/extract-frames.js +8 -2
- package/package.json +5 -5
package/dist/esm/index.mjs
CHANGED
|
@@ -5617,6 +5617,8 @@ var internalExtractFrames = ({
|
|
|
5617
5617
|
};
|
|
5618
5618
|
signal?.addEventListener("abort", abortListener, { once: true });
|
|
5619
5619
|
let dur = null;
|
|
5620
|
+
let lastFrame;
|
|
5621
|
+
let lastFrameEmitted;
|
|
5620
5622
|
parseMediaOnWebWorker({
|
|
5621
5623
|
src: new URL(src, window.location.href),
|
|
5622
5624
|
acknowledgeRemotionLicense,
|
|
@@ -5636,7 +5638,6 @@ var internalExtractFrames = ({
|
|
|
5636
5638
|
throw new Error("expected at least one timestamp to extract but found zero");
|
|
5637
5639
|
}
|
|
5638
5640
|
controller.seek(timestampTargets[0]);
|
|
5639
|
-
let lastFrame;
|
|
5640
5641
|
const decoder = createVideoDecoder({
|
|
5641
5642
|
onFrame: (frame) => {
|
|
5642
5643
|
Log.trace(logLevel, "Received frame with timestamp", frame.timestamp);
|
|
@@ -5653,12 +5654,14 @@ var internalExtractFrames = ({
|
|
|
5653
5654
|
}
|
|
5654
5655
|
if (expectedFrames[0] + 6667 < frame.timestamp && lastFrame) {
|
|
5655
5656
|
onFrame(lastFrame);
|
|
5657
|
+
lastFrameEmitted = lastFrame;
|
|
5656
5658
|
expectedFrames.shift();
|
|
5657
5659
|
lastFrame = frame;
|
|
5658
5660
|
return;
|
|
5659
5661
|
}
|
|
5660
5662
|
expectedFrames.shift();
|
|
5661
5663
|
onFrame(frame);
|
|
5664
|
+
lastFrameEmitted = frame;
|
|
5662
5665
|
lastFrame = frame;
|
|
5663
5666
|
},
|
|
5664
5667
|
onError: (e) => {
|
|
@@ -5710,7 +5713,7 @@ var internalExtractFrames = ({
|
|
|
5710
5713
|
return async () => {
|
|
5711
5714
|
await doProcess();
|
|
5712
5715
|
await decoder.flush();
|
|
5713
|
-
if (lastFrame) {
|
|
5716
|
+
if (lastFrame && lastFrameEmitted !== lastFrame) {
|
|
5714
5717
|
lastFrame.close();
|
|
5715
5718
|
}
|
|
5716
5719
|
};
|
|
@@ -5725,6 +5728,9 @@ var internalExtractFrames = ({
|
|
|
5725
5728
|
resolvers.resolve();
|
|
5726
5729
|
}
|
|
5727
5730
|
}).finally(() => {
|
|
5731
|
+
if (lastFrame && lastFrameEmitted !== lastFrame) {
|
|
5732
|
+
lastFrame.close();
|
|
5733
|
+
}
|
|
5728
5734
|
signal?.removeEventListener("abort", abortListener);
|
|
5729
5735
|
});
|
|
5730
5736
|
return resolvers.promise;
|
package/dist/extract-frames.js
CHANGED
|
@@ -16,6 +16,8 @@ const internalExtractFrames = ({ src, onFrame, signal, timestampsInSeconds, ackn
|
|
|
16
16
|
};
|
|
17
17
|
signal?.addEventListener('abort', abortListener, { once: true });
|
|
18
18
|
let dur = null;
|
|
19
|
+
let lastFrame;
|
|
20
|
+
let lastFrameEmitted;
|
|
19
21
|
(0, worker_1.parseMediaOnWebWorker)({
|
|
20
22
|
src: new URL(src, window.location.href),
|
|
21
23
|
acknowledgeRemotionLicense,
|
|
@@ -37,7 +39,6 @@ const internalExtractFrames = ({ src, onFrame, signal, timestampsInSeconds, ackn
|
|
|
37
39
|
throw new Error('expected at least one timestamp to extract but found zero');
|
|
38
40
|
}
|
|
39
41
|
controller.seek(timestampTargets[0]);
|
|
40
|
-
let lastFrame;
|
|
41
42
|
const decoder = (0, create_video_decoder_1.createVideoDecoder)({
|
|
42
43
|
onFrame: (frame) => {
|
|
43
44
|
log_1.Log.trace(logLevel, 'Received frame with timestamp', frame.timestamp);
|
|
@@ -57,12 +58,14 @@ const internalExtractFrames = ({ src, onFrame, signal, timestampsInSeconds, ackn
|
|
|
57
58
|
// Solution: We allow a 10.000ms - 3.333ms = 6.667ms difference between the requested timestamp and the actual timestamp
|
|
58
59
|
if (expectedFrames[0] + 6667 < frame.timestamp && lastFrame) {
|
|
59
60
|
onFrame(lastFrame);
|
|
61
|
+
lastFrameEmitted = lastFrame;
|
|
60
62
|
expectedFrames.shift();
|
|
61
63
|
lastFrame = frame;
|
|
62
64
|
return;
|
|
63
65
|
}
|
|
64
66
|
expectedFrames.shift();
|
|
65
67
|
onFrame(frame);
|
|
68
|
+
lastFrameEmitted = frame;
|
|
66
69
|
lastFrame = frame;
|
|
67
70
|
},
|
|
68
71
|
onError: (e) => {
|
|
@@ -117,7 +120,7 @@ const internalExtractFrames = ({ src, onFrame, signal, timestampsInSeconds, ackn
|
|
|
117
120
|
return async () => {
|
|
118
121
|
await doProcess();
|
|
119
122
|
await decoder.flush();
|
|
120
|
-
if (lastFrame) {
|
|
123
|
+
if (lastFrame && lastFrameEmitted !== lastFrame) {
|
|
121
124
|
lastFrame.close();
|
|
122
125
|
}
|
|
123
126
|
};
|
|
@@ -136,6 +139,9 @@ const internalExtractFrames = ({ src, onFrame, signal, timestampsInSeconds, ackn
|
|
|
136
139
|
}
|
|
137
140
|
})
|
|
138
141
|
.finally(() => {
|
|
142
|
+
if (lastFrame && lastFrameEmitted !== lastFrame) {
|
|
143
|
+
lastFrame.close();
|
|
144
|
+
}
|
|
139
145
|
signal?.removeEventListener('abort', abortListener);
|
|
140
146
|
});
|
|
141
147
|
return resolvers.promise;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/webcodecs",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.330",
|
|
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.330",
|
|
23
|
+
"@remotion/licensing": "4.0.330"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {},
|
|
26
26
|
"devDependencies": {
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"vite": "5.4.19",
|
|
30
30
|
"@playwright/test": "1.51.1",
|
|
31
31
|
"eslint": "9.19.0",
|
|
32
|
-
"@remotion/
|
|
33
|
-
"@remotion/
|
|
32
|
+
"@remotion/eslint-config-internal": "4.0.330",
|
|
33
|
+
"@remotion/example-videos": "4.0.330"
|
|
34
34
|
},
|
|
35
35
|
"keywords": [],
|
|
36
36
|
"publishConfig": {
|