Files
PTT-Live/TODO.md
T
benoit 37205f0409 feat: ajout support Linux avec backends JACK et PipeWire
Phase 3.1 - Support Linux professionnel

Nouveaux backends audio:
- JACKBackend.js : support JACK Audio Connection Kit pour audio pro
- PipeWireBackend.js : support PipeWire (standard moderne Linux)
- Detection automatique dans AudioBridge (PipeWire > JACK > erreur)

Script installation:
- install/linux.sh pour Ubuntu/Debian/Arch/Fedora
- Installation automatique dependencies (Node.js, PipeWire/JACK)
- Telechargement LiveKit Server pour Linux (amd64/arm64)

Fonctionnalites:
- Detection serveur audio (PipeWire/JACK)
- Enumeration devices audio via pactl/jack_lsp
- Capture et lecture audio basse latence (pw-cat, jack_rec/play)
- Messages d'erreur detailles pour troubleshooting
- Compatibilite Ubuntu 22.04+, Debian 11+, Arch Linux, Fedora

TODO.md mis a jour: Phase 3.1 en cours
2026-05-26 13:37:18 +02:00

322 lines
10 KiB
Markdown

# 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
- [x] Structure dossiers (server/, client/, install/)
- [x] package.json serveur (Node.js, Express, LiveKit SDK)
- [x] package.json client (React, Vite, livekit-client)
- [x] Script install/macos.sh (télécharge livekit-server binaire)
- [x] Config YAML basique (1 groupe, 2 canaux)
- [x] .gitignore (node_modules, binaires, .env)
---
### 1.2 Serveur LiveKit + API
- [x] server/index.js : spawn livekit-server binaire
- [x] Configuration LiveKit (ports, clés API)
- [x] API REST : POST /token (génère token client)
- [x] API REST : GET /config (infos groupes)
- [x] Validation : LiveKit démarre (mode cloud pour Phase 1)
---
### 1.3 Bridge audio macOS
#### Backend CoreAudio
- [x] server/bridge/backends/CoreAudioBackend.js
- [x] Énumération devices (entrée/sortie)
- [x] Capture audio (48kHz, mono/stereo)
- [x] Lecture audio (48kHz)
- [x] Gestion buffer circulaire
#### Codec Opus
- [x] server/bridge/OpusCodec.js
- [x] Encoder PCM → Opus (configurable 32-320kbps, 20ms frame)
- [x] Decoder Opus → PCM
- [x] Configuration bitrate (par groupe ou global)
- [ ] Tests unitaires codec (différentes qualités)
#### Jitter Buffer
- [x] server/bridge/JitterBuffer.js
- [x] Buffer FIFO 40ms cible
- [x] Détection underrun/overrun
- [x] Statistiques latence
#### Intégration LiveKit
- [x] server/bridge/LiveKitClient.js
- [x] Connexion room en tant que participant
- [x] Publish track audio (Opus)
- [x] Subscribe tracks autres participants
- [x] Gestion reconnexion
#### Classe principale
- [x] server/bridge/AudioBridge.js
- [x] Détection backend (CoreAudio pour macOS)
- [x] Routing : CoreAudio → Opus → LiveKit
- [x] Routing : LiveKit → Opus → CoreAudio
- [x] Logs détaillés (latence, drops)
---
### 1.4 Client PWA React
#### Infrastructure
- [x] client/vite.config.js (PWA plugin)
- [x] client/public/manifest.json (via Vite PWA)
- [x] client/public/sw.js (Service Worker auto-généré)
- [x] client/src/main.jsx (setup React)
#### Composants UI
- [x] client/src/App.jsx
- [x] Layout principal
- [x] Connexion utilisateur (nom + groupe)
- [x] Affichage état connexion
- [x] client/src/components/PTTButton.jsx
- [x] Bouton PTT (maintenir pour parler)
- [x] États : idle / talking / listening
- [x] Feedback visuel (couleurs)
- [x] Feedback haptique (vibration)
- [x] client/src/components/UserList.jsx
- [x] Liste participants groupe actif
- [x] Indicateur qui parle (temps réel)
- [x] client/src/components/AudioIndicator.jsx
- [x] Niveau audio entrant (VU-mètre simple)
- [x] Niveau micro sortant
#### Hooks WebRTC
- [x] client/src/hooks/useLiveKit.js
- [x] Connexion room (token serveur)
- [x] Publish microphone
- [x] Subscribe participants
- [x] Gestion événements (participant join/leave)
- [x] Cleanup disconnect
- [x] PTT intégré dans PTTButton.jsx
- [x] Mode PTT : mute/unmute track selon bouton
- [x] Gestion touch events (mobile)
- [x] Gestion mouse events (desktop)
- [x] **Fix iOS/mobile** : audio unlock, HTTPS obligatoire, proxy WSS LiveKit
#### Styles
- [x] CSS mobile-first
- [x] Design bouton PTT (large, accessible)
- [x] Mode sombre (défaut)
---
### 1.5 Tests et validation Phase 1
#### Tests unitaires
- [x] Opus encode/decode (qualité audio)
- [x] Jitter buffer (buffer size stable)
- [ ] CoreAudio device detection (naudiodon crash - à résoudre plus tard)
#### Tests d'intégration
- [x] Serveur démarre sans erreur
- [x] Client obtient token valide
- [x] Client rejoint room LiveKit
#### Tests end-to-end
- [x] **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
- [x] Config YAML : multi-groupes, multi-canaux
- [x] Routing dynamique serveur (groupe → canaux audio)
- [x] Client : sélecteur groupe (dropdown)
- [x] Client : affichage canaux groupe actif
### 2.2 Modes PTT avancés
- [x] Mode continu : toggle ON/OFF (appui long 3s)
- [x] Vibration + indicateur visuel rouge (lock actif)
- [x] Préférences utilisateur (mode par défaut)
### 2.3 Interface admin
- [x] Page admin web (/admin)
- [x] Gestion groupes (CRUD)
- [x] Gestion utilisateurs connectés
- [x] Monitoring temps réel (latence, qualité)
- [x] Logs serveur (affichage live)
### 2.5 Configuration audio visuelle (PRIORITÉ)
#### Détection et sélection carte son
- [x] API GET /api/audio/devices (énumération cartes son CoreAudio/JACK)
- [x] API POST /api/audio/device (sélection + config sample rate/buffer)
- [x] Page admin : dropdown sélection carte son
- [x] Page admin : affichage infos carte (entrées/sorties, sample rate)
- [x] Backend : reload bridge audio sans redémarrer serveur
#### Nommage des canaux
- [x] API PUT /api/audio/channels/names (sauvegarde noms canaux)
- [x] API GET /api/audio/channels/names (récupération noms)
- [x] Page admin : formulaire nommage canaux (inputs/outputs)
- [x] Page admin : filtre "canaux nommés uniquement"
- [x] Sauvegarde automatique dans config.yaml
#### Matrice de routing (style Dante Controller)
- [x] API GET /api/audio/routing (récupération routing actuel)
- [x] API POST /api/audio/routing (sauvegarde routing)
- [x] Component React : AudioRoutingMatrix.jsx
- [x] Matrice inputs → groups (checkboxes)
- [x] Matrice groups → outputs (checkboxes)
- [x] Dropdowns gain par route (-12dB à +6dB)
- [x] Indicateurs niveaux temps réel (WebSocket)
- [x] Backend : GroupAudioRouter.js (routing par groupe)
- [x] Mix canaux physiques multiples → groupe
- [x] Distribution groupe → canaux physiques multiples
- [x] Gestion gains individuels
- [x] Support canaux partagés (mixage additif)
- [x] Backend : ConfigManager.js (lecture/écriture YAML)
- [x] Méthodes update pour device/channels/routing
- [x] Sauvegarde atomique avec backup auto
- [x] Émission événement config-updated
- [x] WebSocket audio-levels (monitoring temps réel)
- [x] Server WebSocket AudioLevelsServer.js
- [x] Hook React useAudioLevels
- [x] Composant VUMeter (mini/horizontal/vertical)
- [x] Intégration VU-mètres dans matrice routing
- [ ] Tests : routing multi-canaux, canaux partagés - Phase 3
### 2.4 Notifications
- [x] Web Push : appels privés (infrastructure prête)
- [x] Service Worker : gestion notifications
- [x] iOS : message onboarding "Installer sur écran d'accueil"
- [x] Permissions notification au premier lancement
---
## PHASE 3 — Intégrations audio pro
### 3.1 Support Linux
- [x] Backend JACK (server/bridge/backends/JACKBackend.js)
- [x] Backend PipeWire (server/bridge/backends/PipeWireBackend.js)
- [x] Script install/linux.sh
- [ ] Tests Ubuntu 22.04 LTS + Arch Linux
### 3.2 Dante
- [ ] Documentation setup DVS macOS
- [ ] Routing JACK ↔ DVS
- [ ] Tests multi-canaux (8+)
- [ ] Guide configuration réseau Dante
### 3.3 AES67
- [ ] Backend RTP multicast (Linux)
- [ ] PTP sync
- [ ] Tests interop Dante (mode AES67)
### 3.4 Production
- [ ] Script install Windows (install/windows.ps1)
- [ ] Tests charge : 30+ clients simultanés
- [ ] Optimisation réseau (QoS, DSCP)
- [ ] Documentation déploiement complet
- [ ] Guide troubleshooting
---
## Prochaines actions immédiates
### Phase 2 - TERMINÉE
1. ✅ Multi-groupes avec sélection dynamique (2.1)
2. ✅ Mode PTT continu par appui long (2.2)
3. ✅ Interface admin web (/admin) pour gestion groupes (2.3)
4.**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
5. ✅ Préférences utilisateur pour mode PTT par défaut (2.2)
6. ✅ Web Push notifications pour appels privés (2.4)
### Phase 3 - EN COURS
1. ✅ Backend JACK pour Linux (3.1)
2. ✅ Backend PipeWire pour Linux moderne (3.1)
3. ✅ Détection automatique backend Linux dans AudioBridge (3.1)
4. ✅ Script d'installation Linux (Ubuntu/Debian/Arch) (3.1)
5. ⏳ Tests sur Ubuntu 22.04 LTS et Arch Linux (3.1)
6. Documentation setup Dante/AES67 (3.2/3.3)
7. Tests charge 30+ clients (3.4)
---
## ⚠️ RÈGLES DE DÉVELOPPEMENT
### 🔄 Workflow obligatoire
1. **Avant une tâche** : Cocher `[x]` dans ce fichier TODO.md
2. **Pendant le travail** : Développer la fonctionnalité
3. **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
```bash
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)