Callbewijs — echte Jitsi-call op macOS #2541

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

Bovenliggend ticket: #2532
Afhankelijk van: #2540, #2533, #2534, #2535, #2536, #2537

Gebruikersdoel

Ik kan vanuit de OciDeck-macOSrelease echt aan een Jitsi-call deelnemen; een tweede onafhankelijke deelnemer hoort/ziet mij en ik hoor/zie die deelnemer.

Proefopzet

Toets de echt gebouwde macOS-app op Apple Silicon en, indien nog ondersteund, Intel als afzonderlijke configuraties. Controleer macOS-microfoon/camera/schermopnamepermissies, ingebouwde en externe audiobronnen, wissel van headset, slaap/herstart van de verbinding en het terugkeren van presentatiemodus. Een niet aanwezige tweede architectuur is niet getest, geen impliciete ondersteuning.

Werk

  • Draai de procedure uit de testomgeving op een schoon geïnstalleerd releaseartefact. Leg exact apparaat, OS/browser, OciDeck-commit, Jitsi-serverversie, netwerk en bronapparaten vast.
  • Bewijs preflight, twee gelijktijdige OciDeck-clients waar mogelijk, join, live deelnemers, audio/video beide richtingen, mute/camera, schermdelen indien geclaimd, reconnect, leave en gereserveerde netwerkbestemmingen. Een echte tweede client verifieert de ontvangen media.
  • Maak de uitkomst per capability zichtbaar in de productmatrix: beschikbaar, na toestemming te proberen, niet beschikbaar of niet getest. Zet een defect platformpad niet stil aan op grond van tests op een ander platform.

Acceptatie

  • Een echte tweepersoonscall op macOS heeft hoorbare audio beide richtingen en zichtbare video waar geclaimd; bediening en leave hebben op beide clients aantoonbaar effect.
  • Toestemming weigeren, apparaat verliezen, netwerk weg/terug en mislukte join geven een duidelijke status en laten geen verborgen call of hangende media achter.
  • Het bewijs bevat releaseartefact, platformversie, tweede client, serverversie, werkelijke uitkomst en resterende beperkingen; fake-/widgettests alleen zijn onvoldoende.
  • De macOS-gids noemt installatie, rechten, teststappen en herstel; een claim wordt pas vrijgegeven na de echte proef.

Basis

OciDeck macOS-release, lib/widgets/panels/call_panel.dart, docs/design/NATIVE_CALLS.md §7.1.

**Bovenliggend ticket:** [#2532](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2532) **Afhankelijk van:** [#2540](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2540), [#2533](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2533), [#2534](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2534), [#2535](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2535), [#2536](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2536), [#2537](https://pawprint.vigilis.online/LibreKAT/Ocideck/issues/2537) ## Gebruikersdoel Ik kan vanuit de OciDeck-macOSrelease echt aan een Jitsi-call deelnemen; een tweede onafhankelijke deelnemer hoort/ziet mij en ik hoor/zie die deelnemer. ## Proefopzet Toets de echt gebouwde macOS-app op Apple Silicon en, indien nog ondersteund, Intel als afzonderlijke configuraties. Controleer macOS-microfoon/camera/schermopnamepermissies, ingebouwde en externe audiobronnen, wissel van headset, slaap/herstart van de verbinding en het terugkeren van presentatiemodus. Een niet aanwezige tweede architectuur is `niet getest`, geen impliciete ondersteuning. ## Werk - Draai de procedure uit de testomgeving op een schoon geïnstalleerd releaseartefact. Leg exact apparaat, OS/browser, OciDeck-commit, Jitsi-serverversie, netwerk en bronapparaten vast. - Bewijs preflight, twee gelijktijdige OciDeck-clients waar mogelijk, join, live deelnemers, audio/video beide richtingen, mute/camera, schermdelen indien geclaimd, reconnect, leave en gereserveerde netwerkbestemmingen. Een echte tweede client verifieert de ontvangen media. - Maak de uitkomst per capability zichtbaar in de productmatrix: `beschikbaar`, `na toestemming te proberen`, `niet beschikbaar` of `niet getest`. Zet een defect platformpad niet stil aan op grond van tests op een ander platform. ## Acceptatie - [ ] Een echte tweepersoonscall op macOS heeft hoorbare audio beide richtingen en zichtbare video waar geclaimd; bediening en leave hebben op beide clients aantoonbaar effect. - [ ] Toestemming weigeren, apparaat verliezen, netwerk weg/terug en mislukte join geven een duidelijke status en laten geen verborgen call of hangende media achter. - [ ] Het bewijs bevat releaseartefact, platformversie, tweede client, serverversie, werkelijke uitkomst en resterende beperkingen; fake-/widgettests alleen zijn onvoldoende. - [ ] De macOS-gids noemt installatie, rechten, teststappen en herstel; een claim wordt pas vrijgegeven na de echte proef. ## Basis OciDeck `macOS`-release, `lib/widgets/panels/call_panel.dart`, `docs/design/NATIVE_CALLS.md` §7.1.
Author
Owner

Callbewijs — echte Jitsi-call op macOS (#2541)

Bewezen op het release-artefact (niet profile/debug) tegen de gepinde testbed, met een onafhankelijke browser-deelnemer. De proef wees drie echte defecten aan die fake-/wire-tests niet vingen; die zitten in dezelfde change (PR #2586, gemerged).

Identiteit van de proef

Veld Invulling
Datum + tester 2026-10-25, geautomatiseerde UI-drijving op fysieke machine
Releaseartefact build/macos/Build/Products/Release/OciDeck.app — flutter build macos --release, geverifieerde signatuur, v0.7.0 (42)
Client A ocideck @ PR #2586 (werkend diff), macOS native
Client B Google Chrome 156.0.8078.47, jitsi-meet-web van de testbed, probe/proof.js als meetinstrument (fake-device media)
OS + toolchain macOS 27.0.1 (26A434) arm64, MacBook Pro — Flutter 3.47.7 / Dart 3.13.5, flutter_webrtc 1.5.1
Jitsi-server stable-11248 (web/jicofo/jvb/prosody, digests vastgelegd)
Kamer ocideckbewijs2
Randapparaten OciDeck: echte mic + camera. Browser: fake-device

Resultaten

Stap Status Waarneming
host join + room-allocatie geslaagd browser 7e2da9cb in kamer; jicofo session-initiate
OciDeck anoniem binnen geslaagd preflight groen, nick ocideck_2358c7d6; session-accept ontvangen
tweeweg-audio geslaagd browser-state remoteTracks:"audio:live:" + remoteAudios:1
tweeweg-video geslaagd video:live:camera remote; OciDeck rendeert het browser-testbeeld live
mute/demute geslaagd audio:muted: bij join (default gedempt) → audio:live: na unmute
camera uit/aan geslaagd cam-TCC eerst, daarna live camera aan remote-kant
schermdelen geslaagd vensterkiezer → browser ziet screenshare:live:desktop en rendeert het OciDeck-venster; stoppen zet de camera automatisch terug op -v0
reconnect (leave → join) geslaagd nieuwe endpoint, session-accept binnen ~10 s, media loopt weer
leave geslaagd session-terminate <success/> → Member left → Removed participant; browser-remote leeg
mislukte join geslaagd http://127.0.0.1:9 → getypeerde fout "De server is niet bereikbaar of weigerde de verbinding."
toestemmingen geslaagd mic/cam/schermopname/bureaublad-TCC met eigen usage-teksten; her-vragen na tccutil reset werkt
media-E2EE-status geslaagd eerlijk als uit gerapporteerd + echte egress-lijst (172.20.0.5:10000, 127.0.0.1:10000)

Netwerkbewijs

Pad Waargenomen
Signalling ws → 127.0.0.1:8000/xmpp-websocket
SFU UDP → 127.0.0.1:10000 (jicofo/JVB, digests in bundel)
TURN/STUN + extern egress geen — egress-lijst toont alleen de JVB

Productmatrix — videovergadering op macOS

Vermogen Status Opmerking
Gast-join Jitsi beschikbaar preflight → session-accept
Tweeweg-audio beschikbaar live RTP beide richtingen
Tweeweg-video beschikbaar echte camera beide richtingen
Mute / camera-toggle beschikbaar muted↔live aan beide kanten gezien
Schermdelen (venster) na toestemming te proberen macOS-consent; daarna desktop-bron remote
Leave / reconnect beschikbaar Removed participant; rejoin <10 s
Mislukte join-melding beschikbaar getypeerde fout, geen hang
TCC-rechtenketen beschikbaar eigen teksten; her-vraag na intrekking
Apparaatverlies mid-call niet getest pad aanwezig (onEnded → localTrackLost); geen los apparaat op de testmachine, tccutil reset doodt een lopende capture niet
Netwerk weg/terug niet getest reconnect via leave+join getest, niet via echte uitval
Media-E2EE niet beschikbaar frame-cryptor ontbreekt op deze binding; rapportage eerlijk
Browserclient niet getest #2544
Intel-macOS niet getest geen Intel-machine aanwezig; geen impliciete claim

Bevindingen (opgelost in deze change)

  1. Geen uitgaande media — de JVB-offer maakte eigen recvonly-transceivers; de vooraf gecreëerde SendRecv-transceivers stonden wees (dir=[recvonly,recvonly]). Nu adopt + SendRecv vóór het antwoord.
  2. Source-add ging stilletjes niet uit — sender.parameters is een creatie-cache op deze binding; localSource() leest nu parameters → antwoord-SDP (a=ssrc/FID/msid) → outbound-rtp/legacy-ssrc-stats, begrensd, met pending-heraankondiging en zichtbare fout bij actief falen. Wire-vorm volgt de echte capture (alle ssrc's, FID, msid, videoType).
  3. Preflight hing — geen error-boundary in _preflightNow; dode server hing eeuwig op "Verbinden…". Nu getypeerde fout binnen seconden.

Beelden

Volledige geredigeerde bundel (servicelogs, digests, probe-state per 5 s): testbed/jitsi-meet/evidence/macos-2541/ lokaal — evidence/ is bewust gitignored; dit commentaar is het duurzame rapport. De productmatrix staat ook in docs/design/NATIVE_CALLS.md §7.1.

# Callbewijs — echte Jitsi-call op macOS (#2541) Bewezen op het **release-artefact** (niet profile/debug) tegen de gepinde testbed, met een onafhankelijke browser-deelnemer. De proef wees drie echte defecten aan die fake-/wire-tests niet vingen; die zitten in dezelfde change (PR #2586, gemerged). ## Identiteit van de proef | Veld | Invulling | |---|---| | Datum + tester | 2026-10-25, geautomatiseerde UI-drijving op fysieke machine | | Releaseartefact | `build/macos/Build/Products/Release/OciDeck.app` — `flutter build macos --release`, geverifieerde signatuur, **v0.7.0 (42)** | | Client A | `ocideck` @ PR #2586 (werkend diff), macOS native | | Client B | Google Chrome **156.0.8078.47**, jitsi-meet-web van de testbed, `probe/proof.js` als meetinstrument (fake-device media) | | OS + toolchain | **macOS 27.0.1** (26A434) arm64, MacBook Pro — Flutter 3.47.7 / Dart 3.13.5, flutter_webrtc 1.5.1 | | Jitsi-server | **stable-11248** (web/jicofo/jvb/prosody, digests vastgelegd) | | Kamer | `ocideckbewijs2` | | Randapparaten | OciDeck: echte mic + camera. Browser: fake-device | ## Resultaten | Stap | Status | Waarneming | |---|---|---| | host join + room-allocatie | geslaagd | browser `7e2da9cb` in kamer; jicofo `session-initiate` | | OciDeck anoniem binnen | geslaagd | preflight groen, nick `ocideck_2358c7d6`; `session-accept` ontvangen | | tweeweg-audio | geslaagd | browser-state `remoteTracks:"audio:live:"` + `remoteAudios:1` | | tweeweg-video | geslaagd | `video:live:camera` remote; OciDeck rendeert het browser-testbeeld live | | mute/demute | geslaagd | `audio:muted:` bij join (default gedempt) → `audio:live:` na unmute | | camera uit/aan | geslaagd | cam-TCC eerst, daarna live camera aan remote-kant | | schermdelen | geslaagd | vensterkiezer → browser ziet `screenshare:live:desktop` en rendeert het OciDeck-venster; stoppen zet de camera automatisch terug op `-v0` | | reconnect (leave → join) | geslaagd | nieuwe endpoint, `session-accept` binnen ~10 s, media loopt weer | | leave | geslaagd | `session-terminate` `<success/>` → `Member left` → `Removed participant`; browser-remote leeg | | mislukte join | geslaagd | `http://127.0.0.1:9` → getypeerde fout "De server is niet bereikbaar of weigerde de verbinding." | | toestemmingen | geslaagd | mic/cam/schermopname/bureaublad-TCC met eigen usage-teksten; her-vragen na `tccutil reset` werkt | | media-E2EE-status | geslaagd | eerlijk als **uit** gerapporteerd + echte egress-lijst (`172.20.0.5:10000, 127.0.0.1:10000`) | ## Netwerkbewijs | Pad | Waargenomen | |---|---| | Signalling | ws → 127.0.0.1:8000/xmpp-websocket | | SFU | UDP → 127.0.0.1:10000 (jicofo/JVB, digests in bundel) | | TURN/STUN + extern egress | geen — egress-lijst toont alleen de JVB | ## Productmatrix — videovergadering op macOS | Vermogen | Status | Opmerking | |---|---|---| | Gast-join Jitsi | beschikbaar | preflight → session-accept | | Tweeweg-audio | beschikbaar | live RTP beide richtingen | | Tweeweg-video | beschikbaar | echte camera beide richtingen | | Mute / camera-toggle | beschikbaar | muted↔live aan beide kanten gezien | | Schermdelen (venster) | na toestemming te proberen | macOS-consent; daarna `desktop`-bron remote | | Leave / reconnect | beschikbaar | `Removed participant`; rejoin <10 s | | Mislukte join-melding | beschikbaar | getypeerde fout, geen hang | | TCC-rechtenketen | beschikbaar | eigen teksten; her-vraag na intrekking | | Apparaatverlies mid-call | niet getest | pad aanwezig (`onEnded` → `localTrackLost`); geen los apparaat op de testmachine, `tccutil reset` doodt een lopende capture niet | | Netwerk weg/terug | niet getest | reconnect via leave+join getest, niet via echte uitval | | Media-E2EE | niet beschikbaar | frame-cryptor ontbreekt op deze binding; rapportage eerlijk | | Browserclient | niet getest | #2544 | | Intel-macOS | niet getest | geen Intel-machine aanwezig; geen impliciete claim | ## Bevindingen (opgelost in deze change) 1. **Geen uitgaande media** — de JVB-offer maakte eigen `recvonly`-transceivers; de vooraf gecreëerde `SendRecv`-transceivers stonden wees (`dir=[recvonly,recvonly]`). Nu adopt + `SendRecv` vóór het antwoord. 2. **Source-add ging stilletjes niet uit** — `sender.parameters` is een creatie-cache op deze binding; `localSource()` leest nu parameters → antwoord-SDP (`a=ssrc`/`FID`/`msid`) → `outbound-rtp`/legacy-`ssrc`-stats, begrensd, met pending-heraankondiging en zichtbare fout bij actief falen. Wire-vorm volgt de echte capture (alle ssrc's, FID, msid, videoType). 3. **Preflight hing** — geen error-boundary in `_preflightNow`; dode server hing eeuwig op "Verbinden…". Nu getypeerde fout binnen seconden. ## Beelden - [Preflight geslaagd (release)](https://pawprint.vigilis.online/attachments/5104daa8-c6a3-446e-9722-5e255488cbf6) - [Mic-TCC met eigen tekst](https://pawprint.vigilis.online/attachments/0c0e8295-4d2e-4cf5-9548-f4402d148829) · [Cam-TCC](https://pawprint.vigilis.online/attachments/1bb5610d-97ff-4970-8b3d-b7770ca10b0f) · [Schermopname-consent](https://pawprint.vigilis.online/attachments/0f728522-c5d1-41cf-8076-1dc430f1446c) - [Live call in de rail](https://pawprint.vigilis.online/attachments/6f3bb291-87b8-458e-aa4b-6ce9080e5fd3) · [Tweeweg A/V](https://pawprint.vigilis.online/attachments/c823775c-bf1b-4a97-9bd6-686a7b6932e0) - [Browser ziet OciDecks camera](https://pawprint.vigilis.online/attachments/13a3042d-8817-4543-8d11-7e3f22212c21) · [Browser ziet de schermdeling](https://pawprint.vigilis.online/attachments/cda1688d-f4f3-4fe4-94fc-a05ac50cc043) - [Mislukte join: getypeerde fout](https://pawprint.vigilis.online/attachments/818ecc22-29e8-4f0b-b3fd-6b7b4adf5cf1) Volledige geredigeerde bundel (servicelogs, digests, probe-state per 5 s): `testbed/jitsi-meet/evidence/macos-2541/` lokaal — `evidence/` is bewust gitignored; dit commentaar is het duurzame rapport. De productmatrix staat ook in `docs/design/NATIVE_CALLS.md` §7.1.
brenno 2026-10-25 14:59:32 +00:00
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#2541
No description provided.