Transcriptie 19 — providerneutrale audiobron van een OciDeck-call #2527
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#2527
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bovenliggend callticket: #2526 · Epic: #2508
Afhankelijk van: een echte in-app calladapter, #2509, #2510, #2535 en de echte callproef #2538
Gebruikersdoel
Een opname van mijn OciDeck-call bevat mijn daadwerkelijk uitgezonden stem en de hoorbare andere deelnemers, zonder luidsprekerloopback of dubbele bronnen.
Basis en afhankelijkheid
Er is nog geen productieadapter voor het werkelijk deelnemen aan een call:
meeting_session_provider.darthoudt daarom in de draaiende app geen echte sessie vast.MeetingParticipant.audiois een opaqueMeetingTrackmet id/kind, geen PCM- of Opus-leesinterface.MeetingCapabilities.audiobetekent callaudio, niet opnamerecht of een beschikbare tap. Dit issue volgt op een werkende in-app adapter die de relevante mediatacks kan leveren.Werk
MeetingSession/MeetingMediaCorevoor opname: expliciet lokale uitgaande audio na mute en ontvangen remote audio na decodering, met tijdstempels en bronidentiteit. Houd de concrete WebRTC-track buiten de UI en buiten het bestaande opaqueMeetingTrack-presentatiecontract.Acceptatie
Code/ontwerp
lib/meetings/meeting_provider.dart,meeting_participant.dart,meeting_media_core.dart,meeting_media_core_webrtc.dart;docs/design/NATIVE_CALLS.md§3, §7.De naad staat op main (PR #2588,
cd5e12fbcfab).call_audio_source.dartis de providerneutrale tap: lokale uitgaande audio ná mute en remote audio ná decodering, met tijdstip en bron. flutter_webrtc 1.6 levert die samples niet (MediaRecorderschrijft een INPUT/OUTPUT-mix). De capability meldt daaromnoPerSourceTap.startCallAudioCapturegeeft niets terug. Een track-id en het opname-lampje starten geen opname, en alleen de microfoon is geen hele call.Dit issue blijft open. De acceptatie vraagt een echte tweepersoonscall op elk platform dat de tap beweert te kunnen; die proef is niet gedaan.
De naad staat op main (PR #2588,
cd5e12fbc). De capability meldt dat de huidige binding geen audiotap per deelnemer heeft, en een track-id of het lampje van de vergadering start niets.De echte tweepersoonsproef wordt los gedaan, in #2531 en #2545–#2548. Dit ticket gaat daarom dicht. Een opname van een echte vergadering is niet bewezen.
Geland via #2595 (merge
cb597ae8ce).Wat de bron nu is. De binding kon het niet → eigen fork van
flutter_webrtc(audioTrackFrames(track)→ per-track s16le PCM over een event-channel, gemerged in fork-main via LibreKAT/flutter_webrtc#1, upstream-patch flutter-webrtc/flutter-webrtc#2250). OciDeck:openCallAudioCapture(fact, taps)met concurrente merge —asyncExpandpauzeerde de taps-bron zolang een framestroom liep, dus eigen merge met één subscription per tap; resample 16k mono; post-mute onderdrukking in de tap zelf; sessie stempelt participantId via de roster.Bewijs (echte tweepersoonscalls, testbed stable-11248).
TAP-PROEF remote=6 local=6 remoteMaxAmp=9 mutedLocal=0 unmuteLocal=400— remote gedecodeerde PCM met amplitude, lokale frames stoppen bijsetMicrophone(false)en hervatten na unmute, tijdstempels monotoon.Eerlijke grens.
wholeCallwordt alleen geclaimd op macOS en web; Windows, Linux, iOS en Android meldennoPerSourceTaptot een echte proef het tegendeel zegt — geen dode opnameknop.Vrijgave vraagde een binding met per-bron audio-access — die is er nu.