Echte audio en video in de Jitsi-call (#2535) #2583

Merged
brenno merged 1 commit from feat/jitsi-call-03-real-media into main 2026-10-24 22:38:31 +00:00
Owner

Summary

  • Echte flutter_webrtc-mediabinding: microfoon/camera over ICE/DTLS/SRTP naar de JVB, met RTCVideoRenderer per track als Flutter-texture
  • Jitsi-endpointkanaal (SCTP-datachannel): ClientHello/ServerHello-handshake + ReceiverVideoConstraints — zonder dit forwardt de brug geen video
  • Remote-track-eigendom via ForwardedSources + source-add json (de JVB stuurt één gedeelde stream; de track-msid is een UUID, dus eigendom komt uit signaling)
  • XMPP-laag beantwoordt nu disco#info (met de featureset die jicofo nodig heeft voor data-content + RTX) en XEP-0199 pings (to+xmlns — anders sluit prosody de stream)
  • Provider-neutrale seam: MeetingVideoSurface, MeetingDataChannel, audioOutputs/selectAudioOutput, localTrackLost, mediaE2ee, mediaEgressOrigins
  • CallPanel: echte Texture-tegels, eerlijke statusregel (E2EE + egress), audio-output-picker
  • macOS Info.plist: microfoon- en camera-usage-strings die eerlijk zijn over call-verkeer
  • UDP↔TCP-relais in het testbed (lima/colima forwardt geen UDP)
  • logger-dep voor libwebrtc-log-pin op severity error (geen SDP/adressen in logs)

Bewijs

Bewezen op macOS tegen de gepinde testomgeving met een echte browser als tegenpartij: Chrome's fake-device-testsignaal (een bewegende groene disc met timestamp) rendert als echte pixels in de OciDeck-texture. De integratietest (integration_test/jitsi_real_media_test.dart) verifieert ICE-liveness, remote-participant-video, texture-id, en niet-uniforme pixels.

Test plan

  • make check groen (format, analyze, conventions, full test suite, golden)
  • Sessie-tests (27) — join, mute, camera, chat, leave, renegotiate, endpoint-channel, device-loss
  • XMPP-tests (27) — ping, disco#info, feature-advertising
  • Signaling-tests — source-add/remove json parsing, ForwardedSources
  • macOS-integratietest met echte browser-tegenpartij — geslaagd
  • Visuele inspectie van de screenshot — echte video, geen zwart vlak

Generated with Devin

## Summary - Echte `flutter_webrtc`-mediabinding: microfoon/camera over ICE/DTLS/SRTP naar de JVB, met `RTCVideoRenderer` per track als Flutter-texture - Jitsi-endpointkanaal (SCTP-datachannel): `ClientHello`/`ServerHello`-handshake + `ReceiverVideoConstraints` — zonder dit forwardt de brug geen video - Remote-track-eigendom via `ForwardedSources` + `source-add` json (de JVB stuurt één gedeelde stream; de track-msid is een UUID, dus eigendom komt uit signaling) - XMPP-laag beantwoordt nu `disco#info` (met de featureset die jicofo nodig heeft voor `data`-content + RTX) en `XEP-0199` pings (`to`+`xmlns` — anders sluit prosody de stream) - Provider-neutrale seam: `MeetingVideoSurface`, `MeetingDataChannel`, `audioOutputs`/`selectAudioOutput`, `localTrackLost`, `mediaE2ee`, `mediaEgressOrigins` - CallPanel: echte `Texture`-tegels, eerlijke statusregel (E2EE + egress), audio-output-picker - macOS `Info.plist`: microfoon- en camera-usage-strings die eerlijk zijn over call-verkeer - UDP↔TCP-relais in het testbed (lima/colima forwardt geen UDP) - `logger`-dep voor libwebrtc-log-pin op severity `error` (geen SDP/adressen in logs) ## Bewijs Bewezen op macOS tegen de gepinde testomgeving met een echte browser als tegenpartij: Chrome's fake-device-testsignaal (een bewegende groene disc met timestamp) rendert als echte pixels in de OciDeck-texture. De integratietest (`integration_test/jitsi_real_media_test.dart`) verifieert ICE-liveness, remote-participant-video, texture-id, en niet-uniforme pixels. #### Test plan - [x] `make check` groen (format, analyze, conventions, full test suite, golden) - [x] Sessie-tests (27) — join, mute, camera, chat, leave, renegotiate, endpoint-channel, device-loss - [x] XMPP-tests (27) — ping, disco#info, feature-advertising - [x] Signaling-tests — source-add/remove json parsing, ForwardedSources - [x] macOS-integratietest met echte browser-tegenpartij — geslaagd - [x] Visuele inspectie van de screenshot — echte video, geen zwart vlak Generated with [Devin](https://devin.ai)
De call draait nu echt media: microfoon en camera gaan over de echte
ICE/DTLS/SRTP-verbinding naar de videobrug, en de tegenpartij verschijnt
als bewegende videotegel. Het Jitsi-endpointkanaal (SCTP-datachannel)
vertelt welke bronnen de brug forwardt; de XMPP-laag beantwoordt nu
server-pings en disco#info zoals een echte client. De statusregel meldt
de echte media-uitgang en encryptie-status; een uitvoerkeuze schakelt het
geluid om. Bewezen op macOS tegen de gepinde testomgeving met een echte
browser als tegenpartij: Chrome's testsignaal — een bewegende groene
disc — rendert als echte pixels in de OciDeck-texture.

Twee deployment-geheimen dwong die proef af: jitsi-meet joint zonder
media als het voorkomens-scherm via de link uit staat, en lima/colima
levert geen UDP aan de host — daarvoor staat nu een UDP↔TCP-relais in
de testomgeving.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit 3333276f55 into main 2026-10-24 22:38:31 +00:00
Sign in to join this conversation.
No description provided.