Transcriptie 18 — opname en transcriptie vanuit een OciDeck-call #2526

Closed
opened 2026-10-22 20:03:42 +00:00 by brenno · 1 comment
Owner

Bovenliggend epic: #2508
Afhankelijk van: #2509, #2510, #2511, #2514, #2522 én een werkelijk werkende in-app MeetingProvider-adapter met ontvangen en uitgaande audiotracks. Voor gekozen serververwerking gelden ook #2524 en #2525., #2538

Gebruikersdoel

Ik neem in OciDeck deel aan een call en kan in het callpaneel zelf Opname en transcriptie starten. Ik zie wat wordt opgenomen, kan stoppen en krijg na de call een bewerkbaar transcript. Voorlopige tekst tijdens de call is beschikbaar wanneer de gekozen engine dat aantoonbaar aankan.

Voorwaarde voor een echte call: #2532 en de geslaagde platformproef #2538.

Feitelijke basis en afbakening

lib/meetings/meeting_provider.dart definieert MeetingSession, deelnemers en tracks; lib/state/meeting_session_provider.dart houdt een sessie app-breed vast. CallPanel heeft nu alleen een lege toestand en een met fake sessie geteste actieve layout: er is volgens de huidige code nog geen echte in-app joinflow of productie-adapter. RecordingIndicatorChanged duidt een providerindicator aan en is geen bewijs dat OciDeck lokaal opneemt. docs/design/NATIVE_CALLS.md beschrijft Jitsi/Matrix als ontwerp. Deze route mag dus niet als reeds bruikbare calltranscriptie worden geclaimd.

Dit issue geldt voor een call die binnen OciDeck via een ondersteunde adapter loopt. Geluid van een call in Teams/Jitsi/browser buiten OciDeck valt onder de aparte OS-/browserbronissues #2518, #2519, #2520 en #2521. Geen omweg om beperkingen van een vergaderprovider te negeren.

Werk

  • Voeg in de actieve CallPanel een duidelijke actie Opnemen en transcriberen toe, met bronoverzicht, lokale of bewust gekozen serverengine, opslagkeuze en zichtbare start/stop/status. Opname staat standaard uit en begint nooit door deelnemen, presenteren, AI Assist of het aanzetten van de uitbreiding.
  • Ontwerp een beperkte, providerneutrale audiotap op MeetingSession/media-core: ontvangen spraaktracks van deelnemers plus de eigen audio zoals die daadwerkelijk naar de call wordt uitgezonden. Controleer de werkelijke tracktoegang per adapter/platform. Voorkom dubbele opname via luidsprekerloopback, feedback en een onbedoeld meeluisteren naar een lokaal gedempte microfoon. Een presentatiescherm of tabbladwissel mag de call/opname niet verplaatsen of verdubbelen.
  • Leg per provider vast of lokale opname/transcriptie is toegestaan en welke deelnemersmelding/toestemming nodig is. Toon OciDeck's eigen opname-indicator naast een eventuele providerindicator; verwar die twee statussen niet. Als tracktoegang of vereist opnamebeleid ontbreekt, blokkeer de knop met een concrete reden.
  • Schrijf de volledige audio onafhankelijk van live inferentie. Stoppen, call verlaten, provider-dissconnect, trackverlies en appafsluiting beëindigen capture volgens een expliciete levenscyclus; maak resterend materiaal herstelbaar voor een definitieve pass. Kies per ondersteunde setup lokaal of na aparte toestemming de serverroute, zonder stille upload.
  • Laat het resultaat aansluiten op het Markdown-/audiocontract uit #2511. Maak duidelijk welke bron/tijdcodes zijn vastgelegd; toon geen sprekerlabels tenzij de adapter die betrouwbaar levert en het contract ze ondersteunt.

Uitvoerbare deeltickets

  • #2527 — Transcriptie 19 — providerneutrale audiobron van een OciDeck-call
  • #2528 — Transcriptie 20 — opnamebediening en toestemming in het OciDeck-callpaneel
  • #2529 — Transcriptie 21 — duurzame opname en levenscyclus van OciDeck-callaudio
  • #2530 — Transcriptie 22 — live en definitief transcript van een OciDeck-call
  • #2531 — Transcriptie 23 — echte callproeven en platformgids voor OciDeck-opname

Deze volgorde begint pas na een echte calladapter. De laatste proef controleert de volledige route op werkelijk ondersteunde platforms.

Echte opnameproeven per platform

  • #2545 — Opnamebewijs — echte OciDeck-call transcriberen op macOS
  • #2546 — Opnamebewijs — echte OciDeck-call transcriberen op Windows
  • #2547 — Opnamebewijs — echte OciDeck-call transcriberen op Linux
  • #2548 — Opnamebewijs — echte OciDeck-call transcriberen op web

Acceptatie

  • In een echte twee-deelnemerscall via iedere als ondersteund geclaimde adapter bevat de opname hoorbaar eigen uitgezonden en ontvangen spraak, zonder echo of dubbeltelling; een lokale mute en ontbrekende ontvangen track hebben voorspelbaar gedrag.
  • De call blijft werken als transcriptie wordt gestart/gestopt of faalt; opname start nooit vanzelf bij join en stopt zichtbaar bij leave/bronverlies. Dezelfde sessie blijft actief bij deck-/presentatiewissels.
  • Providerindicator en OciDeck-indicator worden afzonderlijk getest; vereiste toestemming/beleid en een geweigerde opname leiden tot een verklaarde, veilige uitkomst.
  • Lokale en optioneel gekozen servertranscriptie maken dezelfde corrigeerbare Markdown-uitvoer; netwerkproef bewijst dat alleen de expliciet gekozen serverroute audiobytes verzendt.
  • Fake-sessiontests dekken UI/levenscyclus; releasebewijs gebruikt daarnaast een echte call op elk geclaimd platform en noemt adapters/platforms zonder tracktap als niet beschikbaar.

Bronnen

OciDeck lib/widgets/panels/call_panel.dart, lib/meetings/meeting_provider.dart, lib/meetings/meeting_event.dart, lib/state/meeting_session_provider.dart, docs/design/NATIVE_CALLS.md §7–10, docs/design/COLLABORATION.md §7.1.6.

**Bovenliggend epic:** [#2508](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2508) **Afhankelijk van:** [#2509](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2509), [#2510](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2510), [#2511](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2511), [#2514](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2514), [#2522](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2522) én een werkelijk werkende in-app `MeetingProvider`-adapter met ontvangen en uitgaande audiotracks. Voor gekozen serververwerking gelden ook [#2524](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2524) en [#2525](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2525)., [#2538](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2538) ## Gebruikersdoel Ik neem in OciDeck deel aan een call en kan in het callpaneel zelf Opname en transcriptie starten. Ik zie wat wordt opgenomen, kan stoppen en krijg na de call een bewerkbaar transcript. Voorlopige tekst tijdens de call is beschikbaar wanneer de gekozen engine dat aantoonbaar aankan. **Voorwaarde voor een echte call:** [#2532](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2532) en de geslaagde platformproef [#2538](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2538). ## Feitelijke basis en afbakening `lib/meetings/meeting_provider.dart` definieert `MeetingSession`, deelnemers en tracks; `lib/state/meeting_session_provider.dart` houdt een sessie app-breed vast. `CallPanel` heeft nu alleen een lege toestand en een met fake sessie geteste actieve layout: er is volgens de huidige code nog geen echte in-app joinflow of productie-adapter. `RecordingIndicatorChanged` duidt een providerindicator aan en is geen bewijs dat OciDeck lokaal opneemt. `docs/design/NATIVE_CALLS.md` beschrijft Jitsi/Matrix als ontwerp. Deze route mag dus niet als reeds bruikbare calltranscriptie worden geclaimd. Dit issue geldt voor een call die *binnen OciDeck* via een ondersteunde adapter loopt. Geluid van een call in Teams/Jitsi/browser buiten OciDeck valt onder de aparte OS-/browserbronissues [#2518](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2518), [#2519](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2519), [#2520](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2520) en [#2521](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2521). Geen omweg om beperkingen van een vergaderprovider te negeren. ## Werk - Voeg in de actieve `CallPanel` een duidelijke actie `Opnemen en transcriberen` toe, met bronoverzicht, lokale of bewust gekozen serverengine, opslagkeuze en zichtbare start/stop/status. Opname staat standaard uit en begint nooit door deelnemen, presenteren, AI Assist of het aanzetten van de uitbreiding. - Ontwerp een beperkte, providerneutrale audiotap op `MeetingSession`/media-core: ontvangen spraaktracks van deelnemers plus de eigen audio zoals die daadwerkelijk naar de call wordt uitgezonden. Controleer de werkelijke tracktoegang per adapter/platform. Voorkom dubbele opname via luidsprekerloopback, feedback en een onbedoeld meeluisteren naar een lokaal gedempte microfoon. Een presentatiescherm of tabbladwissel mag de call/opname niet verplaatsen of verdubbelen. - Leg per provider vast of lokale opname/transcriptie is toegestaan en welke deelnemersmelding/toestemming nodig is. Toon OciDeck's eigen opname-indicator naast een eventuele providerindicator; verwar die twee statussen niet. Als tracktoegang of vereist opnamebeleid ontbreekt, blokkeer de knop met een concrete reden. - Schrijf de volledige audio onafhankelijk van live inferentie. Stoppen, call verlaten, provider-dissconnect, trackverlies en appafsluiting beëindigen capture volgens een expliciete levenscyclus; maak resterend materiaal herstelbaar voor een definitieve pass. Kies per ondersteunde setup lokaal of na aparte toestemming de serverroute, zonder stille upload. - Laat het resultaat aansluiten op het Markdown-/audiocontract uit [#2511](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2511). Maak duidelijk welke bron/tijdcodes zijn vastgelegd; toon geen sprekerlabels tenzij de adapter die betrouwbaar levert en het contract ze ondersteunt. ## Uitvoerbare deeltickets - [#2527](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2527) — Transcriptie 19 — providerneutrale audiobron van een OciDeck-call - [#2528](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2528) — Transcriptie 20 — opnamebediening en toestemming in het OciDeck-callpaneel - [#2529](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2529) — Transcriptie 21 — duurzame opname en levenscyclus van OciDeck-callaudio - [#2530](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2530) — Transcriptie 22 — live en definitief transcript van een OciDeck-call - [#2531](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2531) — Transcriptie 23 — echte callproeven en platformgids voor OciDeck-opname Deze volgorde begint pas na een echte calladapter. De laatste proef controleert de volledige route op werkelijk ondersteunde platforms. ## Echte opnameproeven per platform - [#2545](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2545) — Opnamebewijs — echte OciDeck-call transcriberen op macOS - [#2546](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2546) — Opnamebewijs — echte OciDeck-call transcriberen op Windows - [#2547](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2547) — Opnamebewijs — echte OciDeck-call transcriberen op Linux - [#2548](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2548) — Opnamebewijs — echte OciDeck-call transcriberen op web ## Acceptatie - [ ] In een echte twee-deelnemerscall via iedere als ondersteund geclaimde adapter bevat de opname hoorbaar eigen uitgezonden en ontvangen spraak, zonder echo of dubbeltelling; een lokale mute en ontbrekende ontvangen track hebben voorspelbaar gedrag. - [ ] De call blijft werken als transcriptie wordt gestart/gestopt of faalt; opname start nooit vanzelf bij join en stopt zichtbaar bij leave/bronverlies. Dezelfde sessie blijft actief bij deck-/presentatiewissels. - [ ] Providerindicator en OciDeck-indicator worden afzonderlijk getest; vereiste toestemming/beleid en een geweigerde opname leiden tot een verklaarde, veilige uitkomst. - [ ] Lokale en optioneel gekozen servertranscriptie maken dezelfde corrigeerbare Markdown-uitvoer; netwerkproef bewijst dat alleen de expliciet gekozen serverroute audiobytes verzendt. - [ ] Fake-sessiontests dekken UI/levenscyclus; releasebewijs gebruikt daarnaast een echte call op elk geclaimd platform en noemt adapters/platforms zonder tracktap als niet beschikbaar. ## Bronnen OciDeck `lib/widgets/panels/call_panel.dart`, `lib/meetings/meeting_provider.dart`, `lib/meetings/meeting_event.dart`, `lib/state/meeting_session_provider.dart`, `docs/design/NATIVE_CALLS.md` §7–10, `docs/design/COLLABORATION.md` §7.1.6.
Author
Owner

Cierre del padre: los cinco deeltickets aterrizaron y el recorrido completo está en main. #2527 fuente de audio por track (PR #2595), #2528 controles/consentimiento en el callpanel, #2529 grabación durable vía pipeline de transcripción (PR #2596, d809a5b), #2530 transcript live+final con provenance de sources.json (PR #2597, 46d47ec) y #2531 guía de pruebas + provenance en web (PR #2598, b153a165). Plataformas afirmadas: macOS + web (probadas en llamadas reales #2541/#2544/#2545/#2548); Windows/Linux reportan noPerSourceTap honestamente — sin botón roto. Sin upload silencioso: live requiere ServerConsent.liveSession por sesión, batch requiere consent por archivo. Speaker labels nunca se inventan del roster. La evidencia de la matriz de aceptación quedó consolidada en docs/TRANSCRIPTION_SETUP.md (PR #2600, 948bd15).

Cierre del padre: los cinco deeltickets aterrizaron y el recorrido completo está en main. #2527 fuente de audio por track (PR #2595), #2528 controles/consentimiento en el callpanel, #2529 grabación durable vía pipeline de transcripción (PR #2596, d809a5b), #2530 transcript live+final con provenance de sources.json (PR #2597, 46d47ec) y #2531 guía de pruebas + provenance en web (PR #2598, b153a165). Plataformas afirmadas: macOS + web (probadas en llamadas reales #2541/#2544/#2545/#2548); Windows/Linux reportan noPerSourceTap honestamente — sin botón roto. Sin upload silencioso: live requiere ServerConsent.liveSession por sesión, batch requiere consent por archivo. Speaker labels nunca se inventan del roster. La evidencia de la matriz de aceptación quedó consolidada en docs/TRANSCRIPTION_SETUP.md (PR #2600, 948bd15).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#2526
No description provided.