Files
PTT-Live/TODO.md
T
benoit 637cc3e3a7 feat: interface admin complète pour gestion système (Phase 2.3)
Implémentation complète de l'interface d'administration web :

Backend (server/api/admin.js) :
- Endpoints CRUD pour gestion des groupes (GET/POST/PUT/DELETE /admin/groups)
- Gestion utilisateurs connectés en temps réel (GET/DELETE /admin/users)
- Monitoring statistiques système (GET /admin/stats)
- Affichage logs serveur avec filtrage (GET /admin/logs)
- Configuration audio globale (PUT /admin/config/audio)
- Système de tracking des connexions/déconnexions
- Export fonctions registerUser, unregisterUser, addLog

Frontend (client/src/Admin.jsx + Admin.css) :
- Interface admin complète avec 4 onglets (Groupes, Utilisateurs, Stats, Logs)
- Gestion groupes : création, modification, suppression avec formulaires
- Gestion canaux audio par groupe (inputs/outputs)
- Liste utilisateurs connectés avec déconnexion forcée
- Dashboard statistiques temps réel (connexions, uptime, mémoire)
- Viewer logs avec code couleur par niveau (debug/info/warn/error)
- Rafraîchissement auto toutes les 3s
- Design responsive et mode sombre

Intégration système :
- Routes admin montées sous /admin dans index.js
- Enregistrement automatique des utilisateurs lors de la génération de token
- Logs serveur centralisés dans le système admin
- Routing simple frontend pour /admin (main.jsx)

🎛️ Interface accessible via https://localhost:5173/admin

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-24 20:13:20 +02:00

7.8 KiB

TODO.md - Plan de développement PTT Live

Dernière mise à jour : 2026-05-24 Phase actuelle : PHASE 2 - Fonctionnalités professionnelles (En cours - Phase 2.3 complétée)


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.4 Notifications

  • Web Push : appels privés
  • 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
  • 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 - Suite

  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. ⏭️ Préférences utilisateur pour mode PTT par défaut (2.2)
  5. ⏭️ Web Push notifications pour appels privés (2.4)

Phase 3 - Préparation

  • Support Linux (JACK/PipeWire backends)
  • Intégration Dante/AES67
  • Tests charge 30+ clients

⚠️ 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

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 !


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)