Skip to content

Commit 11f5be8

Browse files
committed
fix: black frame for AVCanvas play
1 parent 31e3b32 commit 11f5be8

4 files changed

Lines changed: 21 additions & 14 deletions

File tree

.changeset/itchy-buses-call.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@webav/av-canvas': patch
3+
'@webav/av-cliper': patch
4+
---
5+
6+
fix: black frame for AVCanvas play

packages/av-canvas/demo/video-editor.tsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
TimelineRow,
1212
TimelineState,
1313
} from '@xzdarcy/react-timeline-editor';
14+
import { file, write } from 'opfs-tools';
1415
import React, { useEffect, useRef, useState } from 'react';
1516
import { createRoot } from 'react-dom/client';
1617
import { AVCanvas } from '../src';
@@ -184,16 +185,16 @@ function App() {
184185
// })();
185186

186187
// 模拟添加 60个素材,验证内存占用
187-
// (async () => {
188-
// const f = file('/test-1.mp4');
189-
// await write(f, (await fetch('./video/incorrect-frame-type.mp4')).body!);
190-
// for (let i = 0; i < 60; i++) {
191-
// const spr = new VisibleSprite(new MP4Clip(f));
192-
// await spr.ready;
193-
// await cvs.addSprite(spr);
194-
// addSprite2Track('1-video', spr, '视频');
195-
// }
196-
// })();
188+
(async () => {
189+
const f = file('/test-1.mp4');
190+
await write(f, (await fetch('./video/incorrect-frame-type.mp4')).body!);
191+
for (let i = 0; i < 60; i++) {
192+
const spr = new VisibleSprite(new MP4Clip(f));
193+
await spr.ready;
194+
await cvs.addSprite(spr);
195+
addSprite2Track('1-video', spr, '视频');
196+
}
197+
})();
197198

198199
return () => {
199200
cvs.destroy();

packages/av-canvas/src/av-canvas.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,10 +306,10 @@ export class AVCanvas {
306306
* 预览 `AVCanvas` 指定时间的图像帧
307307
*/
308308
previewFrame(time: number) {
309-
this.#updateRenderTime(time);
310309
this.#spriteManager.getSprites().forEach((vs) => {
311310
vs.preFrame(time - vs.time.offset);
312311
});
312+
this.#updateRenderTime(time);
313313
this.#pause();
314314
}
315315

packages/av-cliper/src/sprite/visible-sprite.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,6 @@ export class VisibleSprite extends BaseSprite {
4949
if (this.#ticking) return;
5050
this.#ticking = true;
5151

52-
this.#lastVf?.close();
53-
this.#lastVf = null;
54-
this.#lastAudio = [];
5552
this.#clip
5653
.tick(time * this.time.playbackRate)
5754
.then(({ video, audio }) => {
@@ -76,6 +73,9 @@ export class VisibleSprite extends BaseSprite {
7673
*/
7774
preFrame(time: number) {
7875
if (this.#lastTime === time) return;
76+
this.#lastVf?.close();
77+
this.#lastVf = null;
78+
this.#lastAudio = [];
7979
this.#update(time);
8080
this.#lastTime = time;
8181
}

0 commit comments

Comments
 (0)