benoit bf960f49bb refactor: supprimer complètement les matrices de routing inputToGroup/groupToOutput
Le paradigme devient : pour brancher un canal physique sur un groupe,
créer un server audio user. Les matrices sont retirées de l'UI Electron,
de l'admin PWA, de l'API REST et du backend (GroupAudioRouter supprimé).
AudioBridgeManager ne génère plus de tokens per-group.
Option "aucune sortie" ajoutée pour les server audio users.
2026-07-03 14:55:37 +02:00
2026-05-26 16:29:10 +02:00

PTT Live

Système d'intercom professionnel WebRTC pour techniciens événementiels

Communiquez via smartphone (PWA) en WiFi, le serveur fait le pont avec l'installation audio professionnelle.


🚀 Démarrage rapide

🖥️ Application Desktop (Nouveau !)

Interface graphique complète pour gérer le serveur :

# Lancer l'application desktop
./start-desktop.sh

Fonctionnalités :

  • Dashboard temps réel (stats, utilisateurs)
  • Configuration audio (devices, bitrate)
  • Gestion groupes (CRUD)
  • QR Code pour connexion clients
  • Logs serveur filtrables

📖 Documentation complète : DESKTOP-APP.md


Installation Automatique (Recommandé)

Un seul script pour tout installer (détection automatique macOS/Linux) :

# 1. Installer dépendances + LiveKit
./install.sh

# 2. Configurer certificats SSL locaux (NOUVEAU - requis pour HTTPS)
./setup-certificates.sh

# 3. Démarrer le système (mode CLI)
./start.sh --dev

🔐 Certificats SSL : Le script setup-certificates.sh génère des certificats automatiquement approuvés (pas de warnings navigateur). Voir SSL-SETUP.md

L'installeur configure automatiquement :

  • LiveKit Server local (pas besoin de compte cloud)
  • Détection et configuration IP réseau
  • Backends audio (sox/PipeWire/JACK selon OS)
  • Toutes les dépendances

📖 Guide portable complet : README-PORTABLE.md


Installation Manuelle (avec LiveKit Cloud)

Alternative si vous préférez utiliser LiveKit Cloud

  1. Prérequis

  2. Installer les dépendances

    cd server && npm install
    cd ../client && npm install
    
  3. Configurer LiveKit Cloud

    Créer server/.env :

    LIVEKIT_URL=wss://votre-projet.livekit.cloud
    LIVEKIT_API_KEY=APIxxxxxxxxxx
    LIVEKIT_API_SECRET=xxxxxxxxxxxxxxxxxx
    USE_LOCAL_LIVEKIT=false
    
  4. Démarrer

    Terminal 1 :

    cd server && npm run dev
    

    Terminal 2 :

    cd client && npm run dev
    
  5. Tester : https://localhost:5173

    • Se connecter avec votre nom
    • Ouvrir second onglet avec autre nom
    • Maintenir bouton PTT pour parler !

📖 Guide LiveKit Cloud : docs/SETUP_LIVEKIT.md


📱 Utilisation

  • Bouton PTT : Maintenir pour parler, relâcher pour écouter
  • Desktop : Clic maintenu / Mobile : Appui tactile maintenu
  • Feedback : Vibration + couleur rouge quand vous parlez
  • VU-mètre : Visualisation niveau audio en temps réel


🐛 Dépannage : "Connexion impossible"

Cause : Clés LiveKit non configurées ou invalides.

Solution :

  1. Vérifier que server/.env existe avec vos vraies clés LiveKit Cloud
  2. L'URL doit être en wss:// (pas ws://)
  3. Redémarrer le serveur après modification
  4. Vérifier que le serveur tourne : curl http://localhost:3000/health

Voir le guide complet : docs/SETUP_LIVEKIT.md


📚 Documentation


🎯 État du projet

  • Phase 1 : MVP fonctionnel (WebRTC + PTT)
  • Phase 2 : Fonctionnalités avancées (groupes, routing, admin)
  • 🆕 Portable : Installation zéro-config macOS/Linux
  • Phase 3 : Intégrations audio pro (Dante, AES67)

Version actuelle : 0.2.0 (Portable - production-ready)


Architecture

AUDIO PRO                        CLIENTS MOBILES
(selon option)                   (navigateurs PWA)

Option 1 : Carte son externe ┐   ┌── 📱 Réalisateur
Option 2 : Dante (DVS/PCIe)  ├───┤── 📱 Cadreur
Option 3 : AES67 (RTP)       ┘   ├── 📱 Ingé son
                                  └── 📱 Régisseur
              ↕
        [ SERVEUR ]
        Bridge Audio
        LiveKit SFU
        API + PWA

Fonctionnalités

Groupes

  • Un utilisateur = un groupe actif à la fois
  • Un groupe = un ou plusieurs canaux audio
  • Croiser deux équipes = créer un groupe dédié

Modes de transmission

PTT classique   → Maintenir pour parler
Mode continu    → Toggle ON/OFF (configurable par user)

Notifications

  • Son + vibration (appels privés)
  • Web Push via PWA
  • iOS : PWA obligatoire (iOS 16.4+)

Options Audio

Option 1 — Carte son externe USB/PCIe

✅ Simple, multi-OS, pas de licence
✅ Idéal pour développement et petites installations
✅ Brancher → fonctionne
⚠️  Limité en canaux (8-32 selon modèle)
⚠️  Nécessite câblage physique vers la régie

Exemples : MOTU 16A, RME AIO, Focusrite Scarlett 18i20

Option 2 — Dante

✅ Standard pro événementiel
✅ 512+ canaux sur réseau IP
✅ Latence < 1ms sur LAN dédié
⚠️  DVS : licence ~300€, support Linux non officiel
⚠️  Nécessite macOS ou Windows pour DVS
⚠️  Alternative : carte PCIe Brooklyn II (plus stable)

Implémentation : Dante Virtual Soundcard → JACK → Bridge

Option 3 — AES67 (RTP multicast)

✅ Standard ouvert, pas de licence
✅ Compatible Linux natif
✅ Interopérable avec Dante (mode AES67)
⚠️  Configuration réseau plus complexe (PTP, multicast)
⚠️  Moins d'équipements compatibles que Dante pur

Implémentation : RTP multicast → PipeWire/JACK → Bridge

Stack Technique

SERVEUR
────────────────────────────────
LiveKit Server   binaire Go, SFU WebRTC self-hosted
Bridge Audio     Node.js, cœur du système
JACK / PipeWire  abstraction audio OS (Linux/macOS)
CoreAudio        backend macOS natif
WASAPI / ASIO    backend Windows
libopus          transcodage PCM ↔ Opus
Config           YAML (groupes, routes, canaux)

CLIENT
────────────────────────────────
PWA React        interface mobile
livekit-client   SDK WebRTC
Web Push API     notifications

Bridge Audio

[Source audio]  →  JACK/PipeWire/CoreAudio
                →  Jitter Buffer (cible 40ms)
                →  Encodage Opus (96kbps voix)
                →  LiveKit Room

[LiveKit Room]  →  Décodage Opus
                →  Mix si groupe multi-canaux
                →  JACK/PipeWire/CoreAudio
                →  [Sortie audio]

Déploiement

PAS DE DOCKER — binaires natifs uniquement

$ git clone ...
$ ./install/linux.sh     # ou macos.sh / windows.ps1
$ node server/index.js

✅ LiveKit SFU démarré     (port 7880)
✅ Bridge audio actif
✅ Interface web servie    (port 3000)
Structure de lancement
──────────────────────
index.js
 ├── spawn livekit-server   (binaire Go téléchargé à l'install)
 ├── AudioBridge.start()    (backend détecté automatiquement)
 └── express static         (sert la PWA)

Structure du Projet

project/
├── server/
│   ├── index.js              # Point d'entrée unique
│   ├── livekit-server        # Binaire (téléchargé à l'install)
│   ├── bridge/
│   │   ├── audio.js          # Détection + abstraction
│   │   ├── backends/
│   │   │   ├── jack.js
│   │   │   ├── pipewire.js
│   │   │   ├── coreaudio.js
│   │   │   └── wasapi.js
│   │   ├── livekit.js
│   │   ├── opus.js
│   │   └── jitter.js
│   ├── api/                  # Admin REST
│   └── config/
│       └── config.yaml
│
├── client/                   # PWA React
│   └── src/
│       ├── components/
│       │   ├── PTTButton.jsx
│       │   ├── GroupSelector.jsx
│       │   └── UserList.jsx
│       └── hooks/
│           ├── useLiveKit.js
│           └── usePush.js
│
└── install/
    ├── linux.sh
    ├── macos.sh
    └── windows.ps1

Phases de Développement

PHASE 1 — Fondations
─────────────────────
→ LiveKit server (binaire local)
→ Bridge basique Option 1 (carte son USB)
→ PWA React : PTT, un groupe, deux clients
→ Valider latence WebRTC WiFi

PHASE 2 — Fonctionnalités
──────────────────────────
→ Groupes multiples + routing YAML
→ PTT lock + mode continu
→ Interface admin
→ Notifications push

PHASE 3 — Intégrations audio
──────────────────────────────
→ Option 2 : Dante (DVS ou PCIe)
→ Option 3 : AES67 (Linux natif)
→ Scripts install multi-OS
→ Tests charge WiFi (30+ clients)

Points de Vigilance

🔴 Dante + Linux   → DVS non supporté officiellement
                     Prévoir macOS/Windows ou AES67

🔴 iOS             → PWA obligatoire pour notifications
                     À communiquer dès la connexion

🟡 JACK / Xruns   → Kernel RT recommandé en production
                     (PREEMPT_RT sur Linux)

🟡 Réseau WiFi    → AP dédié recommandé
                     QoS/DSCP sur flux audio
                     Tester avec charge réelle
S
Description
No description provided
Readme 1.7 MiB
Languages
JavaScript 82.8%
CSS 10.1%
Shell 5.2%
HTML 1.9%