Commit Graph

75 Commits

Author SHA1 Message Date
benoit d3558388ad fix: remplacement http-proxy-middleware par http-proxy natif
http-proxy-middleware ne gere pas correctement WebSocket upgrade avec HTTPS.
Utilisation de http-proxy natif pour proxy direct WSS vers WS.

Modifications:
- Remplacement createProxyMiddleware par httpProxy.createProxyServer
- Gestion native de l'upgrade WebSocket
- Reecriture URL /livekit -> / pour LiveKit
- Logs info niveau pour debug facilite
2026-06-19 14:02:04 +02:00
benoit 8d2b83be0a fix: amelioration gestion upgrade WebSocket pour proxy LiveKit
Ajout logs debug pour tracer les requetes WebSocket upgrade.
Gestion explicite des chemins /livekit et /audio-levels.
2026-06-19 13:58:27 +02:00
benoit 32158079c6 feat: ajout proxy WebSocket pour LiveKit en mode HTTPS
Permet au client PWA charge en HTTPS de se connecter a LiveKit via proxy WSS.

Modifications:
- server/index.js: ajout proxy http-proxy-middleware
- Route /livekit proxie vers http://localhost:7880
- Upgrade WebSocket active pour le proxy
- server/package.json: ajout dependance http-proxy-middleware

Fonctionnement:
- Client HTTPS se connecte a wss://localhost:3000/livekit
- Serveur Express proxie vers ws://localhost:7880
- Resout probleme mixed content (HTTPS ne peut pas WS)
2026-06-19 13:49:28 +02:00
benoit 1c5bdeddb5 feat: solution SSL 100% locale avec mkcert pour HTTPS de confiance
Problème résolu : certificats self-signed bloqués par navigateurs

Solution : mkcert génère certificats automatiquement approuvés
- CA locale installée sur système
- Certificats signés par cette CA
- Navigateurs font confiance automatiquement
- Pas de warnings SSL
- 100% local, pas de cloud/domaine

Nouveau script : setup-certificates.sh
- Installe mkcert (Homebrew/apt)
- Installe CA locale (mkcert -install)
- Détecte IP réseau automatiquement
- Génère certificats localhost + IP + *.local
- Configure server/.env (SSL_CERT, SSL_KEY)
- Configure client/.env (VITE_SERVER_URL)
- Met à jour vite.config.js avec HTTPS

Serveur modifié : server/index.js
- Lit certificats depuis process.env.SSL_CERT/SSL_KEY
- Fallback : ../certs/localhost.pem
- Message erreur si certificats introuvables

Documentation :
- SSL-SETUP.md : guide complet installation manuelle/auto
- SSL-SOLUTION.md : résumé technique
- README.md : ajout étape setup-certificates.sh

Résultat :
- Cadenas vert sur desktop (Chrome/Safari/Firefox)
- WebRTC fonctionne en HTTPS
- Smartphones : accepter certificat une fois (normal)
- Valable 10 ans, pas de renouvellement

Usage : ./setup-certificates.sh (2 minutes)
Ensuite : ./start.sh --dev ou ./start-desktop.sh
2026-06-19 13:10:19 +02:00
benoit 060453fe06 fix: application du buffer d'accumulation aux backends Linux (PipeWire/JACK)
- Ajout buffer d'accumulation dans PipeWireBackend (même pattern que CoreAudio)
- Ajout buffer d'accumulation dans JACKBackend
- pw-cat et jack_rec émettent aussi des chunks de taille variable
- Garantit frames fixes (960 samples) sur tous les backends
- Prévient audio haché/robotique sous Linux
2026-06-02 21:19:45 +02:00
benoit 2b88ea0ad5 fix: audio haché depuis carte son par chunks sox de taille variable
- Ajout buffer d'accumulation dans CoreAudioBackend pour garantir frames fixes
- sox envoie des chunks de taille variable → accumuler jusqu'à frameSize complet
- Émission de frames exactement 960 samples × 2ch × 2 bytes = 3840 bytes
- Adaptation automatique mono/stéréo selon config channels
- Audio fluide sans hachage/robotique vers clients LiveKit
2026-06-02 01:14:49 +02:00
benoit 9aff58c528 fix: déformation audio par saturation du mixage
Problème:
- Son complètement déformé (clipping massif)
- CoreAudio capture en 32-bit mais traité comme 16-bit
- Mixage additif sans normalisation

Solution:
1. Sox convertit 32→16 bit automatiquement
2. GroupAudioRouter divise gain par nombre de sources
   Exemple: 2 inputs → groupe default = gain × 0.5 chacun

Résultat: Aucun clipping détecté, audio propre
2026-06-02 00:45:41 +02:00
benoit a803250f9f fix: routing audio macOS avec support multi-canaux et LiveKit
Corrections majeures pour le support audio sous macOS :

- CoreAudioBackend : syntaxe sox correcte avec `-t coreaudio "Device Name"`
- AudioBridge : dé-entrelacement stéréo → canaux séparés (ligne 410-424)
- AudioBridge : entrelacement canaux → stéréo pour sortie (ligne 490-522)
- AudioBridge : duplication mono → stéréo pour LiveKit (ligne 438-449)
- config.yaml : ajout `channels: 2` pour capture stéréo
- config.yaml : ajout groupes "Production" et "Technique"

Résultat :
- Capture stéréo fonctionnelle depuis Loopback Audio 4
- Routing : 2 inputs → 3 groupes → LiveKit + 2 outputs
- Format audio correct pour LiveKit (mono dupliqué en stéréo)
- Pas d'erreur "Taille frame incorrecte"

Problème restant : sox playback se ferme après 0.4s (EPIPE)
2026-06-02 00:33:26 +02:00
benoit f302b3f266 fix: persistance des groupes avec ConfigManager
- Conversion des routes groupes (GET/POST/PUT/DELETE) pour utiliser configManager
- Suppression de loadConfig() et saveConfig() locales (redondantes)
- Fix: les modifications de groupes sont maintenant persistées correctement
- Les groupes créés/modifiés/supprimés survivent au redémarrage du serveur
2026-06-01 23:24:38 +02:00
benoit c9ec10dfd9 fix: shutdown propre sans erreurs
Problèmes corrigés pendant l'arrêt serveur :
1. RangeError offset bounds : vérification availableSpace avant .set()
2. audioBackend null : vérification avant queueAudio()
3. LiveKit track not found : try/catch sur unpublishTrack

Shutdown maintenant sans erreurs fatales.
2026-05-28 16:13:35 +02:00
benoit d908cf4ee6 fix: API /admin/devices/list compatible macOS avec CoreAudio
Avant : Utilisait sox (IDs numériques, incomplet)
Après : Utilise CoreAudioBackend.getDevices() (noms devices réels)

- Retourne device.name comme ID (compatible inputDeviceName)
- Affiche channels, sampleRate, isDefault
- Fallback sur built-in devices si erreur
- Cohérent avec résolution AudioBridge (ligne 206-216)

Interface /admin maintenant 100% compatible macOS et Linux.
2026-05-28 16:07:01 +02:00
benoit 522a6255fe fix: API /admin/devices/list retourne vrais IDs PulseAudio/PipeWire
Avant : IDs numériques (0, 1, 2...) incompatibles avec PipeWireBackend
Après : IDs réels (alsa_input.pci-..., alsa_output.pci-...)

- Extraction deviceId depuis pactl (colonne 2)
- Filtrage des monitors (.monitor)
- Descriptions lisibles (Input: pci-..., Output: pci-...)
- Compatible avec config.yaml existant
2026-05-28 16:04:57 +02:00
benoit 5784aa68e1 clean: suppression logs debug audio
L'audio fonctionne correctement maintenant :
- Client PWA → LiveKit → Serveur → Haut-parleurs ✓
- Latence acceptable
- Qualité audio bonne

Fixes appliqués :
- Support Int16Array (LiveKit Node SDK format)
- Accumulation frames 240→960 samples
- Conversion directe Int16Array vers Float32
2026-05-28 15:52:23 +02:00
benoit 05e7f69ffb fix: support Int16Array depuis LiveKit Node SDK
LiveKit renvoie Int16Array directement au lieu de Buffer.
Ajout détection Int16Array dans _bufferToFloat32 avec conversion directe.

Ajout logs RMS/dBFS pour diagnostiquer niveau audio.
2026-05-28 15:31:41 +02:00
benoit 5534a43b0a debug: ajout logs diagnostic format audio LiveKit
Affiche sampleRate, channels, buffer type et premiers bytes
pour diagnostiquer le bruit audio
2026-05-28 15:28:28 +02:00
benoit 1941e9c8a1 fix: accumulation frames LiveKit 240→960 samples avant routing
Problème : LiveKit envoie des frames de 240 samples (5ms @ 48kHz)
mais GroupRouter attend 960 samples (20ms). Cela causait :
- Bruit audio (720 samples de silence ajoutés à chaque frame)
- Latence de plusieurs secondes (buffers qui s'accumulent)

Solution :
- Ajout liveKitFrameAccumulators Map pour chaque groupe
- Accumulation de 4 frames LiveKit (240×4 = 960) avant routing
- Nettoyage logs verbeux dans AudioBridge et GroupAudioRouter

Résultat attendu :
- Audio clair (pas de silence injecté)
- Latence réduite (~20ms au lieu de plusieurs secondes)
2026-05-28 15:21:26 +02:00
benoit cfeb275d18 fix: convert Uint8Array to Buffer in _bufferToFloat32
LiveKit SDK returns audio data as Uint8Array/ArrayBuffer, not Node.js Buffer.
Added Buffer.from() conversion before readInt16LE operations.

Fixes: TypeError: buffer.readInt16LE is not a function
Permet à l'audio reçu des clients d'être converti en Float32 pour lecture.
2026-05-28 15:05:01 +02:00
benoit adadbfeeb7 fix: utilisation de TrackKind.KIND_AUDIO au lieu de string 'audio'
L'API LiveKit Node utilise des enums numériques pour track.kind :
- TrackKind.KIND_AUDIO = 1
- TrackKind.KIND_VIDEO = 2

La comparaison avec 'audio' échouait, maintenant on utilise l'enum correctement.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-28 14:52:38 +02:00
benoit aab23dc51f feat: réduction drastique des logs LiveKit
Filtrage des logs :
- LIVEKIT_LOG_LEVEL=info au lieu de debug
- Suppression logs DEBUG, signal requests/responses
- Garde uniquement INFO, WARN, ERROR importants

Rend les logs bien plus lisibles pour le debug applicatif.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-28 14:44:49 +02:00
benoit c562415a3d fix: écoute TrackPublished pour détecter tracks audio publiés après connexion
Problème : participant.trackPublications vide au moment de ParticipantConnected
Solution : écouter RoomEvent.TrackPublished et s'abonner au track audio dès sa publication

Flow : Client connecte → ParticipantConnected → Client publie track → TrackPublished → Souscription

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-28 14:42:22 +02:00
benoit 65357c29cc fix: souscription manuelle aux tracks audio des participants
Problème : RoomEvent.TrackSubscribed ne se déclenchait jamais avec @livekit/rtc-node
Solution :
- Itération manuelle sur participant.trackPublications quand participant se connecte
- Création AudioStream immédiate si track audio disponible
- Factorisation code dans _handleAudioTrack()

Cela devrait permettre de recevoir l'audio des clients PWA.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-28 14:40:02 +02:00
benoit 5fd46fb2a3 debug: ajout logs détaillés pour événements LiveKit tracks
Ajout de logs pour :
- RoomEvent.TrackPublished : détecte quand un participant publie un track
- RoomEvent.TrackSubscribed : logs plus détaillés avec kind et sid
- Permet de diagnostiquer pourquoi AudioBridge ne reçoit pas les tracks audio

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-28 14:35:23 +02:00
benoit 13d066b188 fix: création AudioStream avec syntaxe correcte LiveKit Node SDK
Correction import et utilisation d'AudioStream :
- Import AudioStream depuis @livekit/rtc-node
- new AudioStream(track, sampleRate, channels) au lieu de new track.AudioStream(...)

Cela devrait permettre la réception des frames audio depuis les clients PWA.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-28 14:26:05 +02:00
benoit 6630ced079 feat: support multi-rooms LiveKit (un par groupe)
Architecture refactorisée pour supporter plusieurs connexions LiveKit simultanées :
- AudioBridge : Map<groupName, LiveKitClient> au lieu d'un seul client
- AudioBridgeManager : génère un token JWT par groupe avec room dédiée
- Routing audio bidirectionnel par groupe :
  * FLUX 1 (carte son → LiveKit) : envoie vers le bon client selon groupName
  * FLUX 2 (LiveKit → carte son) : reçoit audio avec groupName correct
- Chaque groupe a sa propre room LiveKit (nom = groupId slugifié)

Fixes l'issue où les clients connectés à "production" ne recevaient pas
l'audio car AudioBridge était connecté uniquement à "main".

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-28 14:15:40 +02:00
benoit 7e6798cf92 fix: mapping correct devices PipeWire inputTargetDevice/outputTargetDevice
- AudioBridge passe inputTargetDevice et outputTargetDevice à PipeWire
- Fix: PipeWire utilisait targetDevice au lieu de input/outputTargetDevice
- Devrait maintenant démarrer les streams pw-cat correctement
2026-05-28 14:04:05 +02:00
benoit 061872b2d7 fix: update config.yaml 2026-05-28 13:58:01 +02:00
benoit 3041863286 fix: configuration devices audio Linux PipeWire
- config.yaml: utilise devices ALSA réels au lieu de builtin-output
- inputDeviceId: alsa_input.pci-0000_00_01.0.analog-stereo
- outputDeviceId: alsa_output.pci-0000_00_01.0.analog-stereo
2026-05-28 13:57:15 +02:00
benoit d5850a5918 fix: utiliser chemin absolu pour pactl dans PipeWireBackend
- /usr/bin/pactl au lieu de 'pactl' pour éviter problèmes PATH
- Correction dans getDevices(), getDefaultInputDevice(), getDefaultOutputDevice()
- Fix 'pactl: not found' malgré installation de pulseaudio-utils
2026-05-28 13:52:27 +02:00
benoit 52c2a0d326 fix: logs debug AudioBridge + install pulseaudio-utils
- Ajout logs FLUX 2 (réception audio LiveKit → carte son)
- Ajout logs GroupRouter pour debug routing
- install/linux.sh: ajout pulseaudio-utils (requis pour pactl)
2026-05-28 13:33:02 +02:00
benoit 574ca7e95d fix: détection automatique binaire LiveKit local vs PATH
- Linux : utilise server/bin/livekit-server (installé par install.sh)
- macOS : utilise livekit-server du PATH (Homebrew)
- Corrige erreur 'livekit-server: not found' sous Linux
2026-05-28 13:20:15 +02:00
benoit e84ed7c731 fix: routes API accessibles sous /api en production
- Création d'un apiRouter Express pour toutes les routes API
- Routes montées sous /api ET à la racine (rétrocompatibilité)
- QR code corrigé : HTTPS en mode production
- start.sh : affichage URL HTTPS corrigé
- Résout le problème de connexion en mode production
2026-05-27 22:31:41 +02:00
benoit 6b13981dad feat: support HTTPS en mode production
- Ajout support HTTPS au serveur Express avec certificats auto-signés
- Variable d'environnement ENABLE_HTTPS pour activer/désactiver HTTPS
- start.sh active automatiquement HTTPS en mode production (pas --dev)
- Messages d'aide clarifiés avec URLs HTTPS et avertissement certificat
- WebSocket Audio Levels supporte wss:// en mode HTTPS

Mode dev : HTTPS sur port 5173 (Vite) + HTTP API sur 3000
Mode prod : HTTPS sur port 3000 (Express sert client + API)
2026-05-27 15:36:52 +02:00
benoit 244aadcf8b fix: génération QR code dans show-qr.sh fonctionnelle
- Réinstallation qrcode-terminal dans server/ (utilisé par show-qr.sh)
- Script Node inline dans show-qr.sh qui utilise le package depuis server/
- QR code s'affiche correctement au lancement
2026-05-27 15:17:10 +02:00
benoit d1cbf1fd21 chore: suppression dépendance qrcode-terminal du serveur
Utilisé via npx dans show-qr.sh, plus besoin dans server/node_modules
2026-05-27 15:15:32 +02:00
benoit 999fbf0412 feat: QR code dans script séparé show-qr.sh pour logs propres
- Création show-qr.sh : génère et affiche QR code avant lancement serveur
- Détection auto mode dev/prod pour URL correcte
- start.sh appelle show-qr.sh puis lance serveur silencieusement
- Logs serveur uniquement dans server.log (terminal propre)
- Suppression génération QR dans server/index.js (plus nécessaire)
- Suppression dépendance qrcode-terminal dans server (utilisé via npx dans show-qr.sh)
2026-05-27 15:14:22 +02:00
benoit 73e141c5db feat: QR code terminal + redirection HTTPS automatique
1. QR Code dans le terminal
   - Package qrcode-terminal installé
   - Génération QR code au démarrage serveur
   - Affiche URL dev (5173) ou prod (3000) selon build
   - Scan facile depuis smartphone

2. Redirection HTTP → HTTPS (mode dev)
   - Middleware redirection automatique
   - http://IP:3000https://IP:5173 (dev Vite)
   - Mode prod : à gérer avec nginx/caddy

3. URLs corrigées partout
   - start.sh : URLs HTTPS
   - install/macos.sh : HTTPS
   - install/linux.sh : HTTPS
   - Messages cohérents avec SSL

4. .gitignore
   - Ignore dev-dist/ (fichiers générés Vite)

Améliore drastiquement l'UX : scan QR + accès HTTPS direct.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-27 14:48:26 +02:00
benoit 79cda9653b fix: messages installation et serveur statique production
1. Messages finaux install scripts
   - Mise en avant de ./start.sh (recommandé)
   - Méthode manuelle en alternatif
   - Port production corrigé (3000 au lieu de 5173)

2. Serveur statique production (server/index.js)
   - Sert client/dist/ si build existe
   - Route / serve index.html en production
   - Mode dev : retourne info API JSON
   - Permet ./start.sh mode prod fonctionnel

Fix issues identifiés : messages obsolètes + production non fonctionnelle.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-27 14:39:02 +02:00
benoit 94e03fcc5d chore: amélioration .gitignore et templates .env
1. .gitignore mis à jour
   - Ignore server/.env et client/.env (générés)
   - Préserve .env.example (templates)
   - Ignore server.log et PID files runtime

2. server/.env.example créé
   - Template documenté pour mode local/cloud
   - Instructions AUTO pour LIVEKIT_URL
   - Clés par défaut devkey/secret documentées

Finalise la configuration portable zéro-config.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-27 14:24:40 +02:00
benoit 324ff11be9 feat: scripts portables et API détection devices audio
1. API /admin/devices/list
   - Auto-détection devices audio macOS (sox)
   - Support Linux (JACK/PipeWire/PulseAudio)
   - Fallback Windows (placeholder Phase 3)

2. Scripts d'installation multi-OS
   - install.sh : détection OS automatique
   - install/linux.sh : génération .env auto (comme macOS)
   - Messages améliorés avec IP détectée

3. Script start.sh unifié
   - Lance serveur + client (dev ou prod)
   - Détection IP réseau au démarrage
   - Modes : ./start.sh (prod) ou ./start.sh --dev
   - Cleanup propre (trap SIGINT/SIGTERM)

Améliore drastiquement la portabilité du projet.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-27 13:27:53 +02:00
benoit b35f80fc7c feat: configuration portable - URLs et devices auto-détectés
Changements pour rendre l'installation portable :

1. Config réseau auto-détectée
   - config.yaml : LIVEKIT_URL = AUTO (au lieu de IP hardcodée)
   - Devices audio : null par défaut (auto-détection)

2. Client .env dynamique
   - Ajout client/.env.example avec documentation
   - VITE_API_URL configurable pour dev/prod

3. Vite config dynamique
   - Utilisation de loadEnv() pour variables d'environnement
   - Proxies configurables via VITE_API_URL et VITE_LIVEKIT_URL

4. Install script amélioré
   - Détection automatique IP réseau au moment install
   - Génération .env client avec IP détectée
   - Messages informatifs avec IP du serveur

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-27 13:14:14 +02:00
benoit f2e1a50d6d fix: résolution device IDs et correction sox capture args
Corrections pour le routing audio carte son → LiveKit :

**Fixes audio backend**
- AudioBridgeManager : extraction des device IDs depuis config.audio.device
- AudioBridge : ajout résolution device ID → device name pour CoreAudio/sox
- CoreAudioBackend : correction index args sox capture (args[2] au lieu de args[1])

**Résultat**
-  Sox capture fonctionne : lit depuis "Microphone MacBook Pro"
-  Audio capturé et envoyé vers routing
-  Sox playback se ferme après 0.2s (problème persistant à corriger)

**Autres modifications**
- Logging centralisé (Logger.js)
- IP corrigée : 192.168.0.146
- Suppression système channels[] legacy dans groupes

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-26 22:01:53 +02:00
benoit a5879a2ea9 fix: corrections audit - connexion audio bridge, optimisations
- Implémente connexion AudioBridge → LiveKitClient pour flux audio bidirectionnel
  * Envoi audio carte son vers clients (sendAudioData)
  * Réception audio clients vers carte son (via event audioData)
- Supprime LiveKitServerBridge.js (code mort jamais utilisé)
- Retire console.log DEBUG de LiveKitClient.js
- Remplace device IDs hardcodés par null dans config.yaml (auto-détection)
- Optimise allocations buffers audio avec pool réutilisable
  * Pool de Float32Array et Buffer PCM (max 50 buffers)
  * Réduit pression GC pour 30+ clients simultanés

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-26 19:22:02 +02:00
benoit 1c89546b61 fix: crash EPIPE lors ecriture dans sox stdin ferme
- Ajout error handler sur playbackProcess.stdin (capture EPIPE)
- Verification stdin.writable avant write
- Stop playback loop si stdin non disponible
- Evite crash serveur lors stop/reload AudioBridge
2026-05-26 15:36:00 +02:00
benoit f873dc25f6 fix: crash lors deconnexion LiveKit (destructuring undefined)
- LiveKitClient.emit('disconnected') envoie maintenant {reason}
- AudioBridge gere disconnected avec data optionnel (data?.reason)
- Corrige TypeError Cannot destructure property 'reason' of undefined
- Permet reload AudioBridge sans crash serveur
2026-05-26 15:33:39 +02:00
benoit e89b20295e debug: ajout logging detaille dans updateAudioDevice
- Log etapes: update, save, emit event
- Try/catch pour capturer erreurs
- Aide debugging crash serveur lors sauvegarde config audio
2026-05-26 15:31:44 +02:00
benoit 2338562b4f fix: ajout error handling pour getDefault audio devices
- Try/catch dans getDefaultInputDevice et getDefaultOutputDevice
- Cherche d'abord device avec isDefault.input/output = true
- Fallback sur premier device avec canaux disponibles
- Retourne null en cas d'erreur au lieu de crash
2026-05-26 15:30:20 +02:00
benoit 2acd652df0 fix: detection correcte des cartes son CoreAudio avec nombre de canaux reel
- Parse coreaudio_device_input/output depuis system_profiler (nombre canaux)
- Ajoute sampleRate reel par device
- Ajoute metadata: manufacturer, transport, isDefault
- Filtre devices sans input ni output
- Corrige l'API pour exposer les 11 devices au lieu de 2
2026-05-26 15:18:41 +02:00
benoit 61b3bedcae fix: creation LocalAudioTrack depuis AudioSource pour publication
- Import LocalAudioTrack depuis @livekit/rtc-node
- Utilise LocalAudioTrack.createAudioTrack() pour creer track depuis source
- Corrige erreur 'Cannot read properties of undefined (reading handle)'
- Permet publication correcte du track audio du bridge
2026-05-26 14:56:18 +02:00
benoit cc4f5ca35a feat: generation automatique token JWT pour AudioBridge participant
- Import AccessToken depuis livekit-server-sdk
- Generation token avec identity 'AudioBridge' et metadata role:bridge
- Permissions completes (publish, subscribe, data)
- Utilise devkey/secret du serveur LiveKit
- Permet au bridge de se connecter en tant que participant authentifie
2026-05-26 14:32:16 +02:00
benoit be05755677 fix: migration vers @livekit/rtc-node pour bridge audio serveur
- Remplacement livekit-client (navigateur) par @livekit/rtc-node (serveur Node.js)
- Support natif AudioSource/AudioFrame pour gestion PCM bas niveau
- Réception audio via AudioStream asynchrone (for await)
- Publication track audio via AudioSource.captureFrame()
- Permet au serveur d'agir comme participant LiveKit complet
- Suppression dépendance livekit-client inutile côté serveur
2026-05-26 14:26:32 +02:00