From d90df9717b86bfd6ef333d3e997f49532064f902 Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Thu, 11 Dec 2025 18:03:46 +0000 Subject: [PATCH] update --- .playwright-mcp/recording-panel.png | Bin 0 -> 52536 bytes .playwright-mcp/wcctools-dashboard.png | Bin 0 -> 31636 bytes .playwright-mcp/wcctools-with-element.png | Bin 0 -> 40297 bytes package.json | 2 +- pnpm-lock.yaml | 10 +- ts_web/services/ffmpeg.service.ts | 242 +++++++++++++++++----- 6 files changed, 197 insertions(+), 57 deletions(-) create mode 100644 .playwright-mcp/recording-panel.png create mode 100644 .playwright-mcp/wcctools-dashboard.png create mode 100644 .playwright-mcp/wcctools-with-element.png diff --git a/.playwright-mcp/recording-panel.png b/.playwright-mcp/recording-panel.png new file mode 100644 index 0000000000000000000000000000000000000000..2ce1a871f06d3a1fbd05efa84bc4e99fb2a193d7 GIT binary patch literal 52536 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 R_j{`?C;e8cRMP14{{VTuea`>@ literal 0 HcmV?d00001 diff --git a/.playwright-mcp/wcctools-dashboard.png b/.playwright-mcp/wcctools-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..1a1570471f9ee01a284b823842adbe1575d0eff7 GIT binary patch literal 31636 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 TYjidK8=!+}=&IMK+JyZN@KTd9 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 5481c67..f9510ca 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "@git.zone/tsbundle": "^2.6.3", "@git.zone/tsrun": "^2.0.0", "@git.zone/tstest": "^3.1.3", - "@git.zone/tswatch": "^2.3.10", + "@git.zone/tswatch": "^2.3.11", "@push.rocks/projectinfo": "^5.0.2", "@types/node": "^25.0.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c6d0656..6766c2b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,8 +43,8 @@ importers: specifier: ^3.1.3 version: 3.1.3(@push.rocks/smartserve@1.4.0)(socks@2.8.7)(typescript@5.9.3) '@git.zone/tswatch': - specifier: ^2.3.10 - version: 2.3.10(@tiptap/pm@2.27.1) + specifier: ^2.3.11 + version: 2.3.11(@tiptap/pm@2.27.1) '@push.rocks/projectinfo': specifier: ^5.0.2 version: 5.0.2 @@ -507,8 +507,8 @@ packages: resolution: {integrity: sha512-t+/cKV21JHK8X7NGAmihs5M/eMm+V+jn4R5rzfwGG97WJFAcP5qE1Os9VYtyZw3tx/NZXA2yA4abo/ELluTuRA==} hasBin: true - '@git.zone/tswatch@2.3.10': - resolution: {integrity: sha512-88bdzD15mYoG0T0AUTg8ATNkV/dN5ecqfiYcQRX1gJHmLrE2yqymFGkb0W0/xWgpcRakc08V+wRbSI7pqg+EOQ==} + '@git.zone/tswatch@2.3.11': + resolution: {integrity: sha512-FJWOsPQ9i0INn1i7uqMD0ECrZ6bwwGQC8oFDEx9PLcaS+qHpGsYj3P9UscpW1N78P+6Yd1WFUfBh9sUQiKm+KA==} hasBin: true '@happy-dom/global-registrator@15.11.7': @@ -4833,7 +4833,7 @@ snapshots: - utf-8-validate - vue - '@git.zone/tswatch@2.3.10(@tiptap/pm@2.27.1)': + '@git.zone/tswatch@2.3.11(@tiptap/pm@2.27.1)': dependencies: '@api.global/typedserver': 7.11.1(@tiptap/pm@2.27.1) '@git.zone/tsbundle': 2.6.3 diff --git a/ts_web/services/ffmpeg.service.ts b/ts_web/services/ffmpeg.service.ts index 6188b5a..b3aeb9e 100644 --- a/ts_web/services/ffmpeg.service.ts +++ b/ts_web/services/ffmpeg.service.ts @@ -1,6 +1,6 @@ /** * FFmpegService - Handles client-side video format conversion using FFmpeg.wasm - * Implements lazy loading to minimize initial bundle impact + * Uses a custom worker implementation to bypass COEP/CORS issues with the standard library */ export interface IConversionProgress { @@ -15,52 +15,53 @@ export interface IConversionOptions { onProgress?: (progress: IConversionProgress) => void; } +// Message types for worker communication +type WorkerMessageType = 'LOAD' | 'EXEC' | 'WRITE_FILE' | 'READ_FILE' | 'DELETE_FILE' | 'LOG' | 'PROGRESS' | 'ERROR'; + +interface WorkerMessage { + id: number; + type: WorkerMessageType; + data?: any; +} + export class FFmpegService { - private ffmpeg: any = null; - private isLoading: boolean = false; + private worker: Worker | null = null; + private core: any = null; private loadPromise: Promise | null = null; + private messageId = 0; + private pendingMessages: Map = new Map(); + private onLog?: (message: string) => void; + private onProgress?: (progress: number) => void; /** - * Lazy load FFmpeg.wasm from CDN - * Uses toBlobURL to bypass CORS restrictions + * Lazy load FFmpeg.wasm from CDN using custom worker */ async ensureLoaded(onProgress?: (progress: IConversionProgress) => void): Promise { - if (this.ffmpeg?.loaded) return; + if (this.worker && this.core) return; if (this.loadPromise) { await this.loadPromise; return; } - this.isLoading = true; this.loadPromise = this.loadFFmpeg(onProgress); await this.loadPromise; - this.isLoading = false; } private async loadFFmpeg(onProgress?: (progress: IConversionProgress) => void): Promise { + console.log('[FFmpeg] Starting FFmpeg load with custom worker...'); + onProgress?.({ stage: 'loading', progress: 0, message: 'Loading FFmpeg library...' }); - // Dynamic import to enable code splitting - const { FFmpeg } = await import('@ffmpeg/ffmpeg'); + // Import toBlobURL utility const { toBlobURL } = await import('@ffmpeg/util'); - this.ffmpeg = new FFmpeg(); - - // Set up progress listener - this.ffmpeg.on('progress', ({ progress }: { progress: number }) => { - onProgress?.({ - stage: 'converting', - progress: Math.round(progress * 100), - message: `Converting video... ${Math.round(progress * 100)}%` - }); - }); - - const baseURL = 'https://unpkg.com/@ffmpeg/core@0.12.6/dist/esm'; + // Use jsdelivr CDN (has proper CORS/CORP headers) + const coreBaseURL = 'https://cdn.jsdelivr.net/npm/@ffmpeg/core@0.12.9/dist/umd'; onProgress?.({ stage: 'loading', @@ -68,11 +69,133 @@ export class FFmpegService { message: 'Downloading FFmpeg core (~31MB)...' }); - await this.ffmpeg.load({ - coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, 'text/javascript'), - wasmURL: await toBlobURL(`${baseURL}/ffmpeg-core.wasm`, 'application/wasm'), + console.log('[FFmpeg] Creating blob URLs...'); + const coreURL = await toBlobURL(`${coreBaseURL}/ffmpeg-core.js`, 'text/javascript'); + const wasmURL = await toBlobURL(`${coreBaseURL}/ffmpeg-core.wasm`, 'application/wasm'); + console.log('[FFmpeg] Blob URLs created'); + + onProgress?.({ + stage: 'loading', + progress: 50, + message: 'Initializing FFmpeg...' }); + // Create custom worker code that bypasses @ffmpeg/ffmpeg wrapper issues + const workerCode = ` + let ffmpeg = null; + + self.onmessage = async (e) => { + const { id, type, data } = e.data; + + try { + switch (type) { + case 'LOAD': { + const { coreURL, wasmURL } = data; + console.log('[FFmpeg Worker] Loading core...'); + importScripts(coreURL); + + console.log('[FFmpeg Worker] Initializing with WASM...'); + ffmpeg = await self.createFFmpegCore({ + mainScriptUrlOrBlob: coreURL + '#' + btoa(JSON.stringify({ wasmURL })) + }); + + // Set up logging + ffmpeg.setLogger((log) => { + self.postMessage({ type: 'LOG', data: log }); + }); + + // Set up progress + ffmpeg.setProgress((progress) => { + self.postMessage({ type: 'PROGRESS', data: progress }); + }); + + console.log('[FFmpeg Worker] Core initialized successfully'); + self.postMessage({ id, type: 'LOAD', data: true }); + break; + } + + case 'EXEC': { + const { args, timeout = -1 } = data; + ffmpeg.setTimeout(timeout); + ffmpeg.exec(...args); + const ret = ffmpeg.ret; + ffmpeg.reset(); + self.postMessage({ id, type: 'EXEC', data: ret }); + break; + } + + case 'WRITE_FILE': { + const { path, fileData } = data; + ffmpeg.FS.writeFile(path, fileData); + self.postMessage({ id, type: 'WRITE_FILE', data: true }); + break; + } + + case 'READ_FILE': { + const { path } = data; + const fileData = ffmpeg.FS.readFile(path); + self.postMessage({ id, type: 'READ_FILE', data: fileData }, [fileData.buffer]); + break; + } + + case 'DELETE_FILE': { + const { path } = data; + ffmpeg.FS.unlink(path); + self.postMessage({ id, type: 'DELETE_FILE', data: true }); + break; + } + + default: + throw new Error('Unknown message type: ' + type); + } + } catch (err) { + console.error('[FFmpeg Worker] Error:', err); + self.postMessage({ id, type: 'ERROR', data: err.message }); + } + }; + `; + + // Create worker from blob + const workerBlob = new Blob([workerCode], { type: 'text/javascript' }); + const workerURL = URL.createObjectURL(workerBlob); + this.worker = new Worker(workerURL); + + // Set up message handler + this.worker.onmessage = (e: MessageEvent) => { + const { id, type, data } = e.data; + + if (type === 'LOG') { + console.log('[FFmpeg Log]', data); + this.onLog?.(data.message || data); + return; + } + + if (type === 'PROGRESS') { + this.onProgress?.(data); + return; + } + + const pending = this.pendingMessages.get(id); + if (pending) { + this.pendingMessages.delete(id); + if (type === 'ERROR') { + pending.reject(new Error(data)); + } else { + pending.resolve(data); + } + } + }; + + this.worker.onerror = (e) => { + console.error('[FFmpeg] Worker error:', e); + }; + + // Initialize FFmpeg in worker + console.log('[FFmpeg] Initializing worker...'); + await this.sendMessage('LOAD', { coreURL, wasmURL }); + this.core = true; // Mark as loaded + console.log('[FFmpeg] Worker initialized successfully'); + onProgress?.({ stage: 'loading', progress: 100, @@ -80,6 +203,14 @@ export class FFmpegService { }); } + private sendMessage(type: WorkerMessageType, data?: any): Promise { + return new Promise((resolve, reject) => { + const id = ++this.messageId; + this.pendingMessages.set(id, { resolve, reject }); + this.worker!.postMessage({ id, type, data }); + }); + } + /** * Convert WebM blob to MP4 */ @@ -92,9 +223,16 @@ export class FFmpegService { throw new Error('File size exceeds 2GB limit for conversion'); } - await this.ensureLoaded(onProgress); + // Set up progress callback + this.onProgress = (progress: number) => { + onProgress?.({ + stage: 'converting', + progress: Math.round(progress * 100), + message: `Converting video... ${Math.round(progress * 100)}%` + }); + }; - const { fetchFile } = await import('@ffmpeg/util'); + await this.ensureLoaded(onProgress); onProgress?.({ stage: 'converting', @@ -102,25 +240,25 @@ export class FFmpegService { message: 'Preparing video for conversion...' }); + // Read input blob as Uint8Array + const inputData = new Uint8Array(await inputBlob.arrayBuffer()); + // Write input file to virtual filesystem - await this.ffmpeg.writeFile('input.webm', await fetchFile(inputBlob)); + await this.sendMessage('WRITE_FILE', { path: 'input.webm', fileData: inputData }); // Execute conversion with optimized settings for web playback - // -c:v libx264 - H.264 video codec (universal compatibility) - // -preset fast - Balance between speed and compression - // -crf 23 - Quality level (lower = better quality, larger file) - // -c:a aac - AAC audio codec - // -movflags +faststart - Enable streaming playback - await this.ffmpeg.exec([ - '-i', 'input.webm', - '-c:v', 'libx264', - '-preset', 'fast', - '-crf', '23', - '-c:a', 'aac', - '-b:a', '128k', - '-movflags', '+faststart', - 'output.mp4' - ]); + await this.sendMessage('EXEC', { + args: [ + '-i', 'input.webm', + '-c:v', 'libx264', + '-preset', 'fast', + '-crf', '23', + '-c:a', 'aac', + '-b:a', '128k', + '-movflags', '+faststart', + 'output.mp4' + ] + }); onProgress?.({ stage: 'finalizing', @@ -129,11 +267,11 @@ export class FFmpegService { }); // Read output file - const data = await this.ffmpeg.readFile('output.mp4'); + const outputData: Uint8Array = await this.sendMessage('READ_FILE', { path: 'output.mp4' }); // Clean up virtual filesystem - await this.ffmpeg.deleteFile('input.webm'); - await this.ffmpeg.deleteFile('output.mp4'); + await this.sendMessage('DELETE_FILE', { path: 'input.webm' }); + await this.sendMessage('DELETE_FILE', { path: 'output.mp4' }); onProgress?.({ stage: 'finalizing', @@ -141,24 +279,26 @@ export class FFmpegService { message: 'Conversion complete!' }); - return new Blob([data.buffer], { type: 'video/mp4' }); + return new Blob([new Uint8Array(outputData)], { type: 'video/mp4' }); } /** * Check if FFmpeg is currently loaded */ get isLoaded(): boolean { - return this.ffmpeg?.loaded ?? false; + return this.worker !== null && this.core !== null; } /** * Terminate FFmpeg worker to free resources */ async terminate(): Promise { - if (this.ffmpeg) { - await this.ffmpeg.terminate(); - this.ffmpeg = null; + if (this.worker) { + this.worker.terminate(); + this.worker = null; + this.core = null; this.loadPromise = null; + this.pendingMessages.clear(); } } }