From 9edb52ebfaab13cb84519e0e021d4af74a5f5df9 Mon Sep 17 00:00:00 2001 From: hughfenghen Date: Thu, 4 Jul 2024 15:09:47 +0800 Subject: [PATCH 1/4] chore: add log --- packages/av-cliper/src/log.ts | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/packages/av-cliper/src/log.ts b/packages/av-cliper/src/log.ts index cdecf47e..b49620f7 100644 --- a/packages/av-cliper/src/log.ts +++ b/packages/av-cliper/src/log.ts @@ -21,18 +21,6 @@ let THRESHOLD = 1; const localFile = tmpfile(); let writer: Awaited> | null = null; -const initPromise = (async function init() { - try { - writer = await localFile.createWriter(); - } catch (err) { - if (!(err instanceof Error)) throw err; - if (err.message.includes('createSyncAccessHandle is not a function')) { - console.warn(err); - } else { - throw err; - } - } -})(); type LvName = 'debug' | 'info' | 'warn' | 'error'; const lvHandler = ['debug', 'info', 'warn', 'error'].reduce( @@ -103,6 +91,21 @@ map.set(Log.info, 1); map.set(Log.warn, 2); map.set(Log.error, 3); +const initPromise = (async function init() { + try { + writer = await localFile.createWriter(); + Log.info(navigator.userAgent); + Log.info('date: ' + new Date().toLocaleDateString()); + } catch (err) { + if (!(err instanceof Error)) throw err; + if (err.message.includes('createSyncAccessHandle is not a function')) { + console.warn(err); + } else { + throw err; + } + } +})(); + if (import.meta.env?.DEV) { Log.setLogLevel(Log.debug); } From a8a08e9ed5f3f49a924c28e973f430b720ece4ce Mon Sep 17 00:00:00 2001 From: hughfenghen Date: Thu, 4 Jul 2024 16:21:45 +0800 Subject: [PATCH 2/4] fix: cant stop decode audio when reset --- packages/av-cliper/src/clips/mp4-clip.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/av-cliper/src/clips/mp4-clip.ts b/packages/av-cliper/src/clips/mp4-clip.ts index 2c60ef22..8644fe56 100644 --- a/packages/av-cliper/src/clips/mp4-clip.ts +++ b/packages/av-cliper/src/clips/mp4-clip.ts @@ -206,7 +206,7 @@ export class MP4Clip implements IClip { `MP4Clip.tick timeout, ${JSON.stringify({ videoReady, audioReady, - })}`, + })}, time: ${time}`, ), ); }, 3000); @@ -792,7 +792,7 @@ class AudioFrameFinder { dec: ReturnType | null = null, aborter: { abort: boolean }, ): Promise => { - if (dec == null || aborter.abort) return []; + if (dec == null || aborter.abort || dec.state === 'closed') return []; const frameCnt = Math.ceil(deltaTime * (this.#sampleRate / 1e6)); if (frameCnt === 0) return []; @@ -861,6 +861,7 @@ class AudioFrameFinder { new Float32Array(0), // right chan ]; this.#dec?.close(); + this.#decoding = false; this.#dec = createAudioChunksDecoder( this.conf, DEFAULT_AUDIO_CONF.sampleRate, @@ -915,7 +916,7 @@ function createAudioChunksDecoder( let tasks: Array<{ chunks: EncodedAudioChunk[]; cb: OutputHandle }> = []; async function run() { - if (curCb != null) return; + if (curCb != null || adec.state !== 'configured') return; const t = tasks.shift(); if (t == null) return; @@ -944,6 +945,9 @@ function createAudioChunksDecoder( curCb = null; if (adec.state !== 'closed') adec.close(); }, + get state() { + return adec.state; + }, }; } From 7ed7114eeec3f8acf42a17555105781d9a15e629 Mon Sep 17 00:00:00 2001 From: hughfenghen Date: Thu, 4 Jul 2024 16:44:25 +0800 Subject: [PATCH 3/4] chore: video editor demo --- packages/av-canvas/demo/video-editor.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/av-canvas/demo/video-editor.tsx b/packages/av-canvas/demo/video-editor.tsx index 74d859f0..d0564530 100644 --- a/packages/av-canvas/demo/video-editor.tsx +++ b/packages/av-canvas/demo/video-editor.tsx @@ -48,7 +48,7 @@ const TimelineEditor = ({
缩放: