From fd40d5146683d7f6f62e191d954653802140ff0e Mon Sep 17 00:00:00 2001 From: vegard Date: Wed, 18 Mar 2026 22:19:30 +0000 Subject: [PATCH] Video-opptak i frontend: webcam/skjermopptak via MediaRecorder API (oppgave 29.7) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit VideoRecorder-komponent med to moduser: - Kamera: getUserMedia med video+lyd, 720p - Skjerm: getDisplayMedia med valgfri lyd, 1080p Funksjoner: - Modus-velger (kamera/skjerm) før opptak starter - Live forhåndsvisning under opptak - Konfigurerbar maks varighet (default 5 min), advarsel siste 30 sek - Automatisk stopp ved maks varighet - Upload til CAS → media-node med metadata (source, record_type, duration) - Integrert i ChatInput ved siden av VoiceRecorder --- frontend/src/lib/components/ChatInput.svelte | 7 + .../src/lib/components/VideoRecorder.svelte | 306 ++++++++++++++++++ tasks.md | 3 +- 3 files changed, 314 insertions(+), 2 deletions(-) create mode 100644 frontend/src/lib/components/VideoRecorder.svelte diff --git a/frontend/src/lib/components/ChatInput.svelte b/frontend/src/lib/components/ChatInput.svelte index 3c37768..dedbd2b 100644 --- a/frontend/src/lib/components/ChatInput.svelte +++ b/frontend/src/lib/components/ChatInput.svelte @@ -1,5 +1,6 @@ + +{#if recState === 'idle'} + + +{:else if recState === 'picking'} +
+ + + + + + +
+ +{:else if recState === 'recording'} +
+ +
+ +
+ + + + + +
+ + + {formatDuration(duration)} + + {#if isNearLimit} + ({formatDuration(remaining)}) + {/if} +
+ + + +
+ +{:else if recState === 'uploading'} +
+ + + + + Laster opp video… +
+{/if} diff --git a/tasks.md b/tasks.md index aad331a..0bd2cf5 100644 --- a/tasks.md +++ b/tasks.md @@ -402,8 +402,7 @@ noden er det som lever videre. - [x] 29.6 Webhook-templates: forhåndsdefinerte mappinger for kjente tjenester (GitHub → commits/issues, Slack → meldinger, CI/CD → build-status). Template mapper JSON-felt til node title/content/metadata. ### Video -- [~] 29.7 Video-opptak i frontend: webcam/skjermopptak via MediaRecorder API → upload til CAS → media-node. Start/stopp-knapp i input-komponenten. Maks varighet konfigurerbar. - > Påbegynt: 2026-03-18T22:15 +- [x] 29.7 Video-opptak i frontend: webcam/skjermopptak via MediaRecorder API → upload til CAS → media-node. Start/stopp-knapp i input-komponenten. Maks varighet konfigurerbar. - [ ] 29.8 Video-prosessering: `synops-video` CLI for transcode (H.264), thumbnail-generering, og varighet-uttrekk. Input: `--cas-hash `. Output: ny CAS-hash (trancodet) + thumbnail CAS-hash. ### Geolokasjon