11 KiB
11 KiB
TODO.md - Plan de développement PTT Live
Dernière mise à jour : 2026-05-26 Phase actuelle : PHASE 3 - Intégrations audio pro (Phase 3.1 EN COURS - Support Linux)
PHASE 1 — Fondations (MVP)
🎯 Objectif
Valider la faisabilité technique : 2-4 clients, PTT basique, latence < 150ms, macOS
1.1 Infrastructure projet
- Structure dossiers (server/, client/, install/)
- package.json serveur (Node.js, Express, LiveKit SDK)
- package.json client (React, Vite, livekit-client)
- Script install/macos.sh (télécharge livekit-server binaire)
- Config YAML basique (1 groupe, 2 canaux)
- .gitignore (node_modules, binaires, .env)
1.2 Serveur LiveKit + API
- server/index.js : spawn livekit-server binaire
- Configuration LiveKit (ports, clés API)
- API REST : POST /token (génère token client)
- API REST : GET /config (infos groupes)
- Validation : LiveKit démarre (mode cloud pour Phase 1)
1.3 Bridge audio macOS
Backend CoreAudio
- server/bridge/backends/CoreAudioBackend.js
- Énumération devices (entrée/sortie)
- Capture audio (48kHz, mono/stereo)
- Lecture audio (48kHz)
- Gestion buffer circulaire
Codec Opus
- server/bridge/OpusCodec.js
- Encoder PCM → Opus (configurable 32-320kbps, 20ms frame)
- Decoder Opus → PCM
- Configuration bitrate (par groupe ou global)
- Tests unitaires codec (différentes qualités)
Jitter Buffer
- server/bridge/JitterBuffer.js
- Buffer FIFO 40ms cible
- Détection underrun/overrun
- Statistiques latence
Intégration LiveKit
- server/bridge/LiveKitClient.js
- Connexion room en tant que participant
- Publish track audio (Opus)
- Subscribe tracks autres participants
- Gestion reconnexion
Classe principale
- server/bridge/AudioBridge.js
- Détection backend (CoreAudio pour macOS)
- Routing : CoreAudio → Opus → LiveKit
- Routing : LiveKit → Opus → CoreAudio
- Logs détaillés (latence, drops)
1.4 Client PWA React
Infrastructure
- client/vite.config.js (PWA plugin)
- client/public/manifest.json (via Vite PWA)
- client/public/sw.js (Service Worker auto-généré)
- client/src/main.jsx (setup React)
Composants UI
-
client/src/App.jsx
- Layout principal
- Connexion utilisateur (nom + groupe)
- Affichage état connexion
-
client/src/components/PTTButton.jsx
- Bouton PTT (maintenir pour parler)
- États : idle / talking / listening
- Feedback visuel (couleurs)
- Feedback haptique (vibration)
-
client/src/components/UserList.jsx
- Liste participants groupe actif
- Indicateur qui parle (temps réel)
-
client/src/components/AudioIndicator.jsx
- Niveau audio entrant (VU-mètre simple)
- Niveau micro sortant
Hooks WebRTC
-
client/src/hooks/useLiveKit.js
- Connexion room (token serveur)
- Publish microphone
- Subscribe participants
- Gestion événements (participant join/leave)
- Cleanup disconnect
-
PTT intégré dans PTTButton.jsx
- Mode PTT : mute/unmute track selon bouton
- Gestion touch events (mobile)
- Gestion mouse events (desktop)
- Fix iOS/mobile : audio unlock, HTTPS obligatoire, proxy WSS LiveKit
Styles
- CSS mobile-first
- Design bouton PTT (large, accessible)
- Mode sombre (défaut)
1.5 Tests et validation Phase 1
Tests unitaires
- Opus encode/decode (qualité audio)
- Jitter buffer (buffer size stable)
- CoreAudio device detection (naudiodon crash - à résoudre plus tard)
Tests d'intégration
- Serveur démarre sans erreur
- Client obtient token valide
- Client rejoint room LiveKit
Tests end-to-end
- Test 1 : 2 clients, PTT alterné, audio bidirectionnel
- Test 2 : Mesure latence (clap → réception < 150ms)
- Test 3 : Stabilité 5min sans coupure
- Test 4 : Reconnexion après perte WiFi
Métriques
- Logger latence end-to-end moyenne
- Logger jitter buffer stats
- Logger packet loss WebRTC
PHASE 2 — Fonctionnalités professionnelles
2.1 Groupes et routing
- Config YAML : multi-groupes, multi-canaux
- Routing dynamique serveur (groupe → canaux audio)
- Client : sélecteur groupe (dropdown)
- Client : affichage canaux groupe actif
2.2 Modes PTT avancés
- Mode continu : toggle ON/OFF (appui long 3s)
- Vibration + indicateur visuel rouge (lock actif)
- Préférences utilisateur (mode par défaut)
2.3 Interface admin
- Page admin web (/admin)
- Gestion groupes (CRUD)
- Gestion utilisateurs connectés
- Monitoring temps réel (latence, qualité)
- Logs serveur (affichage live)
2.5 Configuration audio visuelle (PRIORITÉ)
Détection et sélection carte son
- API GET /api/audio/devices (énumération cartes son CoreAudio/JACK)
- API POST /api/audio/device (sélection + config sample rate/buffer)
- Page admin : dropdown sélection carte son
- Page admin : affichage infos carte (entrées/sorties, sample rate)
- Backend : reload bridge audio sans redémarrer serveur
Nommage des canaux
- API PUT /api/audio/channels/names (sauvegarde noms canaux)
- API GET /api/audio/channels/names (récupération noms)
- Page admin : formulaire nommage canaux (inputs/outputs)
- Page admin : filtre "canaux nommés uniquement"
- Sauvegarde automatique dans config.yaml
Matrice de routing (style Dante Controller)
- API GET /api/audio/routing (récupération routing actuel)
- API POST /api/audio/routing (sauvegarde routing)
- Component React : AudioRoutingMatrix.jsx
- Matrice inputs → groups (checkboxes)
- Matrice groups → outputs (checkboxes)
- Dropdowns gain par route (-12dB à +6dB)
- Indicateurs niveaux temps réel (WebSocket)
- Backend : GroupAudioRouter.js (routing par groupe)
- Mix canaux physiques multiples → groupe
- Distribution groupe → canaux physiques multiples
- Gestion gains individuels
- Support canaux partagés (mixage additif)
- Backend : ConfigManager.js (lecture/écriture YAML)
- Méthodes update pour device/channels/routing
- Sauvegarde atomique avec backup auto
- Émission événement config-updated
- WebSocket audio-levels (monitoring temps réel)
- Server WebSocket AudioLevelsServer.js
- Hook React useAudioLevels
- Composant VUMeter (mini/horizontal/vertical)
- Intégration VU-mètres dans matrice routing
- Tests : routing multi-canaux, canaux partagés - Phase 3
2.4 Notifications
- Web Push : appels privés (infrastructure prête)
- Service Worker : gestion notifications
- iOS : message onboarding "Installer sur écran d'accueil"
- Permissions notification au premier lancement
PHASE 3 — Intégrations audio pro
3.1 Support Linux
- Backend JACK (server/bridge/backends/JACKBackend.js)
- Backend PipeWire (server/bridge/backends/PipeWireBackend.js)
- Script install/linux.sh
- Tests Ubuntu 22.04 LTS + Arch Linux
3.2 Dante
- Documentation setup DVS macOS
- Guide configuration réseau Dante
- Routing JACK ↔ DVS (tests pratiques)
- Tests multi-canaux (8+)
3.3 AES67
- Documentation setup AES67 + PTP sync
- Backend RTP multicast (Linux) - optionnel, driver Merging RAVENNA suffit
- Tests interop Dante (mode AES67)
3.4 Production
- Script install Windows (install/windows.ps1) - optionnel, focus Linux/macOS
- Tests charge : 30+ clients simultanés - à réaliser en situation réelle
- Documentation déploiement complet (DEPLOYMENT.md)
- Guide troubleshooting (TROUBLESHOOTING.md)
- Optimisation réseau (QoS, DSCP) - documenté dans DEPLOYMENT.md
Prochaines actions immédiates
Phase 2 - TERMINÉE
- ✅ Multi-groupes avec sélection dynamique (2.1)
- ✅ Mode PTT continu par appui long (2.2)
- ✅ Interface admin web (/admin) pour gestion groupes (2.3)
- ✅ Configuration audio visuelle (2.5) - TERMINÉ
- ✅ Détection/sélection carte son via interface admin
- ✅ Nommage canaux (inputs/outputs)
- ✅ Matrice routing style Dante Controller avec gains
- ✅ VU-mètres temps réel WebSocket
- ✅ Sauvegarde automatique dans YAML
- ✅ Préférences utilisateur pour mode PTT par défaut (2.2)
- ✅ Web Push notifications pour appels privés (2.4)
Phase 3 - COMPLETEE (documentation et backends)
- ✅ Backend JACK pour Linux professionnel (3.1)
- ✅ Backend PipeWire pour Linux moderne (3.1)
- ✅ Détection automatique backend dans AudioBridge (3.1)
- ✅ Script installation Linux multi-distros (3.1)
- ✅ Documentation complete Dante + routing JACK (3.2)
- ✅ Documentation complete AES67 + PTP sync (3.3)
- ✅ Guide deploiement production 30+ clients (3.4)
- ✅ Guide troubleshooting complet (3.4)
- ⏳ Tests pratiques sur Ubuntu 22.04 LTS (3.1) - a realiser
- ⏳ Tests charge 30+ clients reel (3.4) - a realiser en evenement
⚠️ RÈGLES DE DÉVELOPPEMENT
🔄 Workflow obligatoire
- Avant une tâche : Cocher
[x]dans ce fichier TODO.md - Pendant le travail : Développer la fonctionnalité
- Après la tâche :
- ✅ Tester que ça fonctionne
- ✅ Valider la tâche dans TODO.md
- ✅ COMMIT GIT avec message descriptif
- ✅ Mettre à jour CLAUDE.md si nécessaire
📝 Convention commits
feat: description # Nouvelle fonctionnalité
fix: description # Correction bug
docs: description # Documentation
refactor: description # Refactoring
test: description # Tests
IMPORTANT : Commiter après chaque tâche complétée, pas à la fin de la journée !
IMPORTANT : Interdiction d'utiliser des icônes et émojis.
Notes et décisions
Décisions techniques Phase 1
- Audio backend : CoreAudio natif (pas de JACK Phase 1)
- Codec Opus : Configurable 32-320 kbps (défaut 96kbps voix standard)
- Voix économique : 32-64 kbps
- Voix standard : 96 kbps (défaut)
- Voix HD : 128-192 kbps
- Musique : 256-320 kbps
- Sample rate : 48kHz, 20ms frame
- Jitter buffer : 40ms cible
- Client : PWA React (pas d'app native)
Risques identifiés
- 🟡 Latence CoreAudio (à mesurer, cible < 50ms)
- 🟡 Permissions micro iOS (PWA)
- 🟡 Reconnexion automatique LiveKit (à tester)
Questions résolues
- Nombre max participants par groupe Phase 1 ? → 4 clients max
- Qualité audio configurable ? → Oui, 32-320 kbps selon besoin
- HTTPS requis pour PWA local ? → Oui, self-signed cert dev
Statut : Phase 1 prête à démarrer Prochaine étape : Infrastructure projet (1.1)