@revideo/2d 0.5.6-alpha.1066 → 0.5.7-alpha.1076
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/editor/editor/tsconfig.build.tsbuildinfo +1 -1
- package/lib/components/Asset.d.ts.map +1 -1
- package/lib/components/Asset.js +4 -2
- package/lib/components/Audio.d.ts.map +1 -1
- package/lib/components/Audio.js +7 -20
- package/lib/components/Layout.d.ts +1 -0
- package/lib/components/Layout.d.ts.map +1 -1
- package/lib/components/Layout.js +9 -2
- package/lib/components/Media.d.ts +13 -1
- package/lib/components/Media.d.ts.map +1 -1
- package/lib/components/Media.js +39 -11
- package/lib/components/TxtLeaf.js +2 -2
- package/lib/components/Video.d.ts.map +1 -1
- package/lib/components/Video.js +7 -20
- package/lib/tsconfig.build.tsbuildinfo +1 -1
- package/lib/utils/video/parser/segment.d.ts +1 -0
- package/lib/utils/video/parser/segment.d.ts.map +1 -1
- package/lib/utils/video/parser/segment.js +23 -4
- package/package.json +4 -4
- package/src/lib/components/Asset.ts +4 -1
- package/src/lib/components/Audio.ts +10 -26
- package/src/lib/components/Layout.ts +18 -6
- package/src/lib/components/Media.ts +47 -9
- package/src/lib/components/Txt.test.tsx +2 -0
- package/src/lib/components/TxtLeaf.ts +1 -1
- package/src/lib/components/Video.ts +9 -26
- package/src/lib/components/__tests__/clone.test.tsx +1 -0
- package/src/lib/components/__tests__/state.test.tsx +1 -0
- package/src/lib/utils/video/parser/segment.ts +24 -5
|
@@ -130,11 +130,30 @@ export class Segment {
|
|
|
130
130
|
return;
|
|
131
131
|
}
|
|
132
132
|
if (this.responseFinished && this.encodedChunkQueue.length === 0) {
|
|
133
|
-
await this.
|
|
133
|
+
await this.flushDecoderWithRetry();
|
|
134
134
|
this.currentFramePastSegmentEndTime = true;
|
|
135
135
|
return;
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
|
+
async flushDecoderWithRetry(maxRetries = 3, timeoutMs = 2000) {
|
|
139
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
140
|
+
// Sometimes decoder.flush does not resolve even though the queue size is zero
|
|
141
|
+
if (this.decoder.decodeQueueSize === 0) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
await Promise.race([
|
|
146
|
+
this.decoder.flush(),
|
|
147
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Flush timeout')), timeoutMs)),
|
|
148
|
+
]);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
if (attempt === maxRetries) {
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
138
157
|
/**
|
|
139
158
|
* Called when the decoder has a frame ready.
|
|
140
159
|
* Pushes the frame to the buffer so it can be consumed.
|
|
@@ -173,7 +192,7 @@ export class Segment {
|
|
|
173
192
|
}
|
|
174
193
|
// Wait for decoder if there are frames due.
|
|
175
194
|
if (this.frameBuffer.length === 0 && this.framesDue > 0) {
|
|
176
|
-
let maxIterations =
|
|
195
|
+
let maxIterations = 200;
|
|
177
196
|
while (this.frameBuffer.length === 0) {
|
|
178
197
|
await new Promise(res => setTimeout(res, 10));
|
|
179
198
|
maxIterations--;
|
|
@@ -181,7 +200,7 @@ export class Segment {
|
|
|
181
200
|
return;
|
|
182
201
|
}
|
|
183
202
|
if (maxIterations === 0) {
|
|
184
|
-
|
|
203
|
+
return; // TODO: investigate further, shouldn't this be an error?
|
|
185
204
|
}
|
|
186
205
|
}
|
|
187
206
|
}
|
|
@@ -217,4 +236,4 @@ export class Segment {
|
|
|
217
236
|
return this.startTime;
|
|
218
237
|
}
|
|
219
238
|
}
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvdmlkZW8vcGFyc2VyL3NlZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUduQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztBQUVqQyxNQUFNLE9BQU8sT0FBTztJQW9CbEIsWUFDRSxHQUFXLEVBQ1gsSUFBUyxFQUNULEtBQWEsRUFDYixjQUFzQixFQUN0QixZQUFvQixDQUFDO1FBeEJmLFNBQUksR0FBWSxLQUFLLENBQUM7UUFDdEIsbUNBQThCLEdBQVksS0FBSyxDQUFDO1FBQ2hELG9CQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQU14QyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFHbEMsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFFcEIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUMvQixzQkFBaUIsR0FBd0IsRUFBRSxDQUFDO1FBRTVDLGFBQVEsR0FBd0IsS0FBSyxJQUFJLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFTckQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFFZixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUUzQixrR0FBa0c7UUFDbEcsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENB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
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvdmlkZW8vcGFyc2VyL3NlZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUduQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztBQUVqQyxNQUFNLE9BQU8sT0FBTztJQW9CbEIsWUFDRSxHQUFXLEVBQ1gsSUFBUyxFQUNULEtBQWEsRUFDYixjQUFzQixFQUN0QixZQUFvQixDQUFDO1FBeEJmLFNBQUksR0FBWSxLQUFLLENBQUM7UUFDdEIsbUNBQThCLEdBQVksS0FBSyxDQUFDO1FBQ2hELG9CQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQU14QyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFHbEMsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFFcEIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUMvQixzQkFBaUIsR0FBd0IsRUFBRSxDQUFDO1FBRTVDLGFBQVEsR0FBd0IsS0FBSyxJQUFJLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFTckQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFFZixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUUzQixrR0FBa0c7UUFDbEcsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revideo/2d",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.7-alpha.1076+c0acda35",
|
|
4
4
|
"description": "A 2D renderer for revideo",
|
|
5
5
|
"author": "revideo",
|
|
6
6
|
"homepage": "https://re.video/",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@preact/signals": "^1.2.1",
|
|
32
32
|
"@revideo/internal": "^0.0.0",
|
|
33
|
-
"@revideo/ui": "^0.5.
|
|
33
|
+
"@revideo/ui": "^0.5.7-alpha.1076+c0acda35",
|
|
34
34
|
"clsx": "^2.0.0",
|
|
35
35
|
"jsdom": "^22.1.0",
|
|
36
36
|
"preact": "^10.19.2",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@codemirror/language": "^6.10.1",
|
|
41
41
|
"@lezer/common": "^1.2.1",
|
|
42
42
|
"@lezer/highlight": "^1.2.0",
|
|
43
|
-
"@revideo/core": "^0.5.
|
|
43
|
+
"@revideo/core": "^0.5.7-alpha.1076+c0acda35",
|
|
44
44
|
"@rive-app/canvas-advanced": "2.7.3",
|
|
45
45
|
"code-fns": "^0.8.2",
|
|
46
46
|
"hls.js": "^1.5.11",
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"mp4box": "^0.5.2",
|
|
49
49
|
"parse-svg-path": "^0.1.2"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "c0acda35b79eb998c2deb66e4a95f67680865942"
|
|
52
52
|
}
|
|
@@ -31,7 +31,10 @@ export abstract class Asset extends Rect {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
let src = this.src();
|
|
34
|
-
const isUrl =
|
|
34
|
+
const isUrl =
|
|
35
|
+
src.startsWith('http://') ||
|
|
36
|
+
src.startsWith('https://') ||
|
|
37
|
+
src.startsWith('data:');
|
|
35
38
|
|
|
36
39
|
if (isUrl) {
|
|
37
40
|
return src;
|
|
@@ -8,10 +8,6 @@ export class Audio extends Media {
|
|
|
8
8
|
|
|
9
9
|
public constructor(props: MediaProps) {
|
|
10
10
|
super(props);
|
|
11
|
-
|
|
12
|
-
if (!this.awaitCanPlay()) {
|
|
13
|
-
this.scheduleSeek(this.time());
|
|
14
|
-
}
|
|
15
11
|
}
|
|
16
12
|
|
|
17
13
|
protected mediaElement(): HTMLAudioElement {
|
|
@@ -37,30 +33,18 @@ export class Audio extends Media {
|
|
|
37
33
|
audio.src = src;
|
|
38
34
|
Audio.pool[key] = audio;
|
|
39
35
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
) {
|
|
45
|
-
DependencyContext.collectPromise(
|
|
46
|
-
new Promise<void>(resolve => {
|
|
47
|
-
const onCanPlay = () => {
|
|
48
|
-
resolve();
|
|
49
|
-
audio.removeEventListener('canplay', onCanPlay);
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
const onError = () => {
|
|
53
|
-
const reason = this.getErrorReason(audio.error?.code);
|
|
54
|
-
console.log(`ERROR: Error loading audio: ${src}, ${reason}`);
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
audio.addEventListener('canplay', onCanPlay);
|
|
58
|
-
audio.addEventListener('error', onError);
|
|
59
|
-
}),
|
|
60
|
-
);
|
|
61
|
-
}
|
|
36
|
+
|
|
37
|
+
const weNeedToWait = this.waitForCanPlayNecessary(audio);
|
|
38
|
+
if (!weNeedToWait) {
|
|
39
|
+
return audio;
|
|
62
40
|
}
|
|
63
41
|
|
|
42
|
+
DependencyContext.collectPromise(
|
|
43
|
+
new Promise<void>(resolve => {
|
|
44
|
+
this.waitForCanPlay(audio, resolve);
|
|
45
|
+
}),
|
|
46
|
+
);
|
|
47
|
+
|
|
64
48
|
return audio;
|
|
65
49
|
}
|
|
66
50
|
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BBox,
|
|
3
|
-
|
|
3
|
+
DependencyContext,
|
|
4
4
|
InterpolationFunction,
|
|
5
|
-
modify,
|
|
6
5
|
Origin,
|
|
7
|
-
originToOffset,
|
|
8
6
|
PossibleSpacing,
|
|
9
7
|
PossibleVector2,
|
|
10
8
|
SerializedVector2,
|
|
@@ -13,14 +11,18 @@ import {
|
|
|
13
11
|
SimpleSignal,
|
|
14
12
|
SimpleVector2Signal,
|
|
15
13
|
SpacingSignal,
|
|
16
|
-
threadable,
|
|
17
14
|
ThreadGenerator,
|
|
18
15
|
TimingFunction,
|
|
19
|
-
tween,
|
|
20
16
|
Vector2,
|
|
21
17
|
Vector2Signal,
|
|
18
|
+
boolLerp,
|
|
19
|
+
modify,
|
|
20
|
+
originToOffset,
|
|
21
|
+
threadable,
|
|
22
|
+
tween,
|
|
22
23
|
} from '@revideo/core';
|
|
23
24
|
import {
|
|
25
|
+
Vector2LengthSignal,
|
|
24
26
|
addInitializer,
|
|
25
27
|
cloneable,
|
|
26
28
|
computed,
|
|
@@ -30,7 +32,6 @@ import {
|
|
|
30
32
|
interpolation,
|
|
31
33
|
nodeName,
|
|
32
34
|
signal,
|
|
33
|
-
Vector2LengthSignal,
|
|
34
35
|
vector2Signal,
|
|
35
36
|
} from '../decorators';
|
|
36
37
|
import {spacingSignal} from '../decorators/spacingSignal';
|
|
@@ -283,6 +284,8 @@ export class Layout extends Node {
|
|
|
283
284
|
@signal()
|
|
284
285
|
public declare readonly textAlign: SimpleSignal<CanvasTextAlign, this>;
|
|
285
286
|
|
|
287
|
+
protected fontLoaded: boolean = false;
|
|
288
|
+
|
|
286
289
|
protected getX(): number {
|
|
287
290
|
if (this.isLayoutRoot()) {
|
|
288
291
|
return this.x.context.getter();
|
|
@@ -961,6 +964,15 @@ export class Layout extends Node {
|
|
|
961
964
|
|
|
962
965
|
@computed()
|
|
963
966
|
protected applyFont() {
|
|
967
|
+
if (!this.fontLoaded) {
|
|
968
|
+
DependencyContext.collectPromise(
|
|
969
|
+
(async () => {
|
|
970
|
+
await document.fonts?.ready;
|
|
971
|
+
this.fontLoaded = true;
|
|
972
|
+
})(),
|
|
973
|
+
);
|
|
974
|
+
}
|
|
975
|
+
|
|
964
976
|
this.element.style.fontFamily = this.fontFamily.isInitial()
|
|
965
977
|
? ''
|
|
966
978
|
: this.fontFamily();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DependencyContext,
|
|
3
|
+
PlaybackState,
|
|
3
4
|
SignalValue,
|
|
4
5
|
SimpleSignal,
|
|
5
6
|
clamp,
|
|
@@ -44,16 +45,21 @@ export abstract class Media extends Asset {
|
|
|
44
45
|
@signal()
|
|
45
46
|
protected declare readonly awaitCanPlay: SimpleSignal<boolean, this>;
|
|
46
47
|
|
|
47
|
-
protected
|
|
48
|
+
protected declare volume: number;
|
|
48
49
|
|
|
49
50
|
protected lastTime = -1;
|
|
50
51
|
|
|
51
52
|
public constructor(props: MediaProps) {
|
|
52
53
|
super(props);
|
|
54
|
+
if (!this.awaitCanPlay()) {
|
|
55
|
+
this.scheduleSeek(this.time());
|
|
56
|
+
}
|
|
57
|
+
|
|
53
58
|
if (props.play) {
|
|
54
59
|
this.play();
|
|
55
60
|
}
|
|
56
61
|
this.volume = props.volume ?? 1;
|
|
62
|
+
this.setVolume(this.volume);
|
|
57
63
|
}
|
|
58
64
|
|
|
59
65
|
public isPlaying(): boolean {
|
|
@@ -154,24 +160,56 @@ export abstract class Media extends Asset {
|
|
|
154
160
|
}
|
|
155
161
|
|
|
156
162
|
protected scheduleSeek(time: number) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
media
|
|
163
|
+
this.waitForCanPlay(this.mediaElement(), () => {
|
|
164
|
+
const media = this.mediaElement();
|
|
165
|
+
// Wait until the media is ready to seek again as
|
|
166
|
+
// setting the time before the video doesn't work reliably.
|
|
160
167
|
media.currentTime = time;
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Waits for the canplay event to be fired before calling onCanPlay.
|
|
173
|
+
*
|
|
174
|
+
* If the media is already ready to play, onCanPlay is called immediately.
|
|
175
|
+
* @param onCanPlay - The function to call when the media is ready to play.
|
|
176
|
+
* @returns
|
|
177
|
+
*/
|
|
178
|
+
protected waitForCanPlay(media: HTMLMediaElement, onCanPlay: () => void) {
|
|
179
|
+
if (media.readyState >= 2) {
|
|
180
|
+
onCanPlay();
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const onCanPlayWrapper = () => {
|
|
185
|
+
onCanPlay();
|
|
186
|
+
media.removeEventListener('canplay', onCanPlayWrapper);
|
|
165
187
|
};
|
|
188
|
+
|
|
166
189
|
const onError = () => {
|
|
167
190
|
const reason = this.getErrorReason(media.error?.code);
|
|
168
191
|
console.log(`ERROR: Error loading video: ${this.src()}, ${reason}`);
|
|
192
|
+
media.removeEventListener('error', onError);
|
|
169
193
|
};
|
|
170
194
|
|
|
171
|
-
media.addEventListener('canplay',
|
|
195
|
+
media.addEventListener('canplay', onCanPlayWrapper);
|
|
172
196
|
media.addEventListener('error', onError);
|
|
173
197
|
}
|
|
174
198
|
|
|
199
|
+
/**
|
|
200
|
+
* Returns true if we should wait for the media to be ready to play.
|
|
201
|
+
*/
|
|
202
|
+
protected waitForCanPlayNecessary(media: HTMLMediaElement): boolean {
|
|
203
|
+
if (media.readyState >= 2) {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return (
|
|
208
|
+
this.awaitCanPlay() ||
|
|
209
|
+
this.view().playbackState() === PlaybackState.Rendering
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
|
|
175
213
|
public play() {
|
|
176
214
|
const time = useThread().time;
|
|
177
215
|
const start = time();
|
|
@@ -10,6 +10,7 @@ describe('Txt', () => {
|
|
|
10
10
|
|
|
11
11
|
it('Handle plain text', () => {
|
|
12
12
|
const node = (<Txt lineWidth={8}>test</Txt>) as Txt;
|
|
13
|
+
node.toPromise();
|
|
13
14
|
|
|
14
15
|
const parseSpy = vi.spyOn(node as any, 'parseChildren');
|
|
15
16
|
const leaf = node.childAs<TxtLeaf>(0);
|
|
@@ -38,6 +39,7 @@ describe('Txt', () => {
|
|
|
38
39
|
Apple <Txt>Banana</Txt> Cherry
|
|
39
40
|
</Txt>
|
|
40
41
|
) as Txt;
|
|
42
|
+
node.toPromise();
|
|
41
43
|
|
|
42
44
|
const first = node.childAs<TxtLeaf>(0);
|
|
43
45
|
const second = node.childAs<Txt>(1);
|
|
@@ -61,9 +61,9 @@ export class TxtLeaf extends Shape {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
protected override async draw(context: CanvasRenderingContext2D) {
|
|
64
|
-
await document.fonts?.ready;
|
|
65
64
|
this.requestFontUpdate();
|
|
66
65
|
this.applyStyle(context);
|
|
66
|
+
await document.fonts?.ready;
|
|
67
67
|
this.applyText(context);
|
|
68
68
|
context.font = this.styles.font;
|
|
69
69
|
if ('letterSpacing' in context) {
|
|
@@ -83,10 +83,6 @@ export class Video extends Media {
|
|
|
83
83
|
|
|
84
84
|
public constructor(props: VideoProps) {
|
|
85
85
|
super(props);
|
|
86
|
-
|
|
87
|
-
if (!this.awaitCanPlay()) {
|
|
88
|
-
this.scheduleSeek(this.time());
|
|
89
|
-
}
|
|
90
86
|
}
|
|
91
87
|
|
|
92
88
|
protected override desiredSize(): SerializedVector2<DesiredLength> {
|
|
@@ -134,30 +130,17 @@ export class Video extends Media {
|
|
|
134
130
|
Video.pool[key] = video;
|
|
135
131
|
}
|
|
136
132
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
this.view().playbackState() === PlaybackState.Rendering
|
|
141
|
-
) {
|
|
142
|
-
DependencyContext.collectPromise(
|
|
143
|
-
new Promise<void>(resolve => {
|
|
144
|
-
const onCanPlay = () => {
|
|
145
|
-
resolve();
|
|
146
|
-
video.removeEventListener('canplay', onCanPlay);
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
const onError = () => {
|
|
150
|
-
const reason = this.getErrorReason(video.error?.code);
|
|
151
|
-
console.log(`ERROR: Error loading video: ${src}, ${reason}`);
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
video.addEventListener('canplay', onCanPlay);
|
|
155
|
-
video.addEventListener('error', onError);
|
|
156
|
-
}),
|
|
157
|
-
);
|
|
158
|
-
}
|
|
133
|
+
const weNeedToWait = this.waitForCanPlayNecessary(video);
|
|
134
|
+
if (!weNeedToWait) {
|
|
135
|
+
return video;
|
|
159
136
|
}
|
|
160
137
|
|
|
138
|
+
DependencyContext.collectPromise(
|
|
139
|
+
new Promise<void>(resolve => {
|
|
140
|
+
this.waitForCanPlay(video, resolve);
|
|
141
|
+
}),
|
|
142
|
+
);
|
|
143
|
+
|
|
161
144
|
return video;
|
|
162
145
|
}
|
|
163
146
|
|
|
@@ -177,12 +177,33 @@ export class Segment {
|
|
|
177
177
|
return;
|
|
178
178
|
}
|
|
179
179
|
if (this.responseFinished && this.encodedChunkQueue.length === 0) {
|
|
180
|
-
await this.
|
|
180
|
+
await this.flushDecoderWithRetry();
|
|
181
181
|
this.currentFramePastSegmentEndTime = true;
|
|
182
182
|
return;
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
+
private async flushDecoderWithRetry(maxRetries = 3, timeoutMs = 2000) {
|
|
187
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
188
|
+
// Sometimes decoder.flush does not resolve even though the queue size is zero
|
|
189
|
+
if (this.decoder.decodeQueueSize === 0) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
try {
|
|
193
|
+
await Promise.race([
|
|
194
|
+
this.decoder.flush(),
|
|
195
|
+
new Promise((_, reject) =>
|
|
196
|
+
setTimeout(() => reject(new Error('Flush timeout')), timeoutMs),
|
|
197
|
+
),
|
|
198
|
+
]);
|
|
199
|
+
} catch (error: any) {
|
|
200
|
+
if (attempt === maxRetries) {
|
|
201
|
+
throw error;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
186
207
|
/**
|
|
187
208
|
* Called when the decoder has a frame ready.
|
|
188
209
|
* Pushes the frame to the buffer so it can be consumed.
|
|
@@ -230,7 +251,7 @@ export class Segment {
|
|
|
230
251
|
|
|
231
252
|
// Wait for decoder if there are frames due.
|
|
232
253
|
if (this.frameBuffer.length === 0 && this.framesDue > 0) {
|
|
233
|
-
let maxIterations =
|
|
254
|
+
let maxIterations = 200;
|
|
234
255
|
while (this.frameBuffer.length === 0) {
|
|
235
256
|
await new Promise(res => setTimeout(res, 10));
|
|
236
257
|
maxIterations--;
|
|
@@ -240,9 +261,7 @@ export class Segment {
|
|
|
240
261
|
}
|
|
241
262
|
|
|
242
263
|
if (maxIterations === 0) {
|
|
243
|
-
|
|
244
|
-
`Timed out while waiting for VideoDecoder to produce a frame. Frames due: ${this.framesDue}`,
|
|
245
|
-
);
|
|
264
|
+
return; // TODO: investigate further, shouldn't this be an error?
|
|
246
265
|
}
|
|
247
266
|
}
|
|
248
267
|
}
|