Aller au contenu

SimCam — Caméra smartphone

SimCam est une PWA (Progressive Web App) légère qui transforme n’importe quel smartphone ou tablette en caméra de simulation, offrant à SimServer un flux vidéo et audio en temps réel via WebRTC.

C’est une alternative intéressante en l’absence ou en complément de caméras IP. Plusieurs smartphones ou tablettes peuvent être utilisés simultanément pour offrir des angles de vue différents.

Capture vidéo

Résolution au choix (1080p, 720p, 480p), switch front/back, torche, zoom par slider ou pincement deux doigts.

Diffusion WebRTC

Publication vers go2rtc via le protocole WHIP. Le flux apparaît instantanément dans la régie SimStudio.

Contrôle à distance

SimServer peut piloter le zoom, couper le micro et mettre à jour les métadonnées de la caméra à distance.

Télémétrie temps réel

Heartbeat WebSocket toutes les 5 secondes : batterie, type réseau, débit, état du zoom, statut du flux.

Interface fullscreen

Prévisualisation plein écran, contrôles auto-masqués après 5 secondes, indicateur LIVE, VU-mètre audio 7 barres, timer de diffusion.

PWA installable

Fonctionne hors ligne, installable sur l’écran d’accueil, mises à jour automatiques, verrouillage écran actif pendant la captation.

  1. Ouvrir SimCam sur le smartphone ou la tablette depuis un navigateur web (Chrome, Safari, Samsung Internet).
  2. Installer l’application en suivant les instructions d’installation PWA, puis ouvrir l’application SimCam.
  3. Autoriser la caméra et le microphone quand le navigateur le demande.
  4. Se connecter au SimServer : entrez l’URL du SimServer ou scannez le QR code affiché sur le dashboard SimStudio.
  5. Appuyer sur Connecter pour lancer la diffusion — le flux apparaît automatiquement dans la régie SimStudio.

La barre de statut en haut de l’écran affiche en temps réel :

IndicateurDescription
LIVEBadge rouge animé visible pendant la diffusion
TimerDurée de diffusion au format MM:SS
VU-mètre7 barres colorées (vert → jaune → rouge) reflétant le niveau audio du micro
Micro coupéIcône micro barré quand le son est désactivé
RésolutionRésolution active (1080p, 720p, 480p)
RéseauType de connexion (WiFi, 4G, 3G) si supporté par l’appareil
BatterieNiveau en pourcentage et indicateur de charge si supporté par l’appareil
État WebSocketIndicateur de reconnexion ou de perte de connexion avec SimServer

Les contrôles apparaissent en bas de l’écran. Ils se masquent automatiquement après 5 secondes d’inactivité quand la caméra est active. Touchez l’écran pour les faire réapparaître.

BoutonAction
Changer de caméraBascule entre caméra avant et arrière (si disponible)
TorcheActive/désactive le flash LED (si disponible)
MicroCoupe/rétablit le son du microphone
Connecter / DéconnecterLance ou arrête la diffusion vers SimServer
ParamètresOuvre la page de réglages

Le zoom est disponible de deux manières :

  • Slider : barre de zoom avec graduations (1x, 2x, 5x, 10x selon les capacités de l’appareil)
  • Pincement : geste deux doigts directement sur la prévisualisation vidéo

SimServer peut également piloter le zoom à distance.

SimCam propose plusieurs façons de se connecter au SimServer :

  • QR Code : scannez le QR code affiché sur le dashboard SimStudio ou sur le réseau WiFi KerSim
  • Saisie manuelle : entrez directement l’URL du SimServer (ex. https://192.168.4.1)
  • URL automatique : ajoutez ?studio=https://... à l’URL de SimCam pour une connexion automatique

Avant de lancer la diffusion, SimCam vérifie la connectivité avec SimServer via un test de sonde (/api/system/health). Un indicateur visuel confirme que SimServer est joignable.

Une fois connectée, la caméra échange des données avec SimServer via une connexion WebSocket permanente :

Un heartbeat est envoyé toutes les 5 secondes avec :

  • Niveau de batterie et état de charge
  • Type de réseau et débit estimé
  • Niveau de zoom actuel
  • État de la connexion réseau

SimServer peut envoyer des commandes en temps réel :

CommandeEffet
ZoomAjuste le niveau de zoom de la caméra
Mute / UnmuteCoupe ou rétablit le microphone
MétadonnéesMet à jour le nom, la position et la description de la caméra

La page de paramètres permet de configurer :

  • Nom : libellé affiché dans la régie (ex. « Caméra salle 1 »)
  • Position : emplacement de la caméra (ex. « Angle supérieur gauche »)
  • Description : texte libre (ex. « Vue d’ensemble de la salle »)

Ces informations sont transmises à SimServer à la connexion et peuvent être modifiées à distance.

Choix entre trois résolutions :

  • 1080p (1920×1080) — qualité maximale
  • 720p (1280×720) — compromis qualité/bande passante
  • 480p (640×480) — bande passante réduite

Français ou anglais. L’interface se met à jour instantanément.

  • Identifiant unique de l’appareil
  • Modèle de l’appareil
  • État des permissions (caméra, microphone, batterie)
  • Forcer la mise à jour : recharge l’application pour appliquer une nouvelle version
  • Relancer le tutoriel : réinitialise le parcours de premier lancement

Au premier démarrage, un tutoriel en 4 étapes guide l’utilisateur :

  1. Bienvenue — Présentation de SimCam et de son rôle dans l’écosystème KerSim
  2. Connexion — Comment se connecter au SimServer (URL ou QR code)
  3. Permissions — Autoriser l’accès à la caméra et au microphone
  4. Diffusion — Lancer le flux en appuyant sur Connecter

Le tutoriel peut être relancé à tout moment depuis les paramètres.

SimCam détecte automatiquement les nouvelles versions déployées sur SimServer :

  1. Après un déploiement, le backend redémarre avec un nouveau build_id (hash git)
  2. À la reconnexion WebSocket, SimCam compare son build_id compilé avec celui du backend
  3. Si les versions diffèrent, une bannière propose de recharger l’application
  4. Après rechargement, une notification toast confirme la mise à jour

Vous pouvez aussi forcer la mise à jour depuis Paramètres > À propos > Forcer la mise à jour.

SimCam est une application Vue.js 3 avec TypeScript dans le dossier apps/cam/ du monorepo KerSim :

TechnologieUsage
Vue 3 + Composition APIFramework UI (<script setup lang="ts">)
TypeScriptTypage strict
Tailwind CSS 4Styles avec design tokens partagés
PiniaState management persistant
vue-i18n v10Internationalisation (français/anglais)
VitePWAService Worker, manifest, cache offline
WebSocket natifCommunication temps réel avec SimServer
WebRTC (WHIP)Publication du flux vidéo/audio vers go2rtc
ComposableRôlePackage
useCameraCapturegetUserMedia, switch caméra, résolution, torche, zoomapps/cam
useCameraPublishPublication WebRTC vers go2rtc (protocole WHIP)apps/cam
useSimCamSocketWebSocket natif (register, heartbeat, commandes distantes)apps/cam
useOnboardingTour guidé au premier lancementapps/cam
useAudioLevelNiveau audio micro en temps réel (VU-mètre)shared
useBatteryStatusBattery API (niveau, charge, support)shared
useNetworkStatusNetworkInformation API (type réseau, débit, support)shared
useOrientationLockVerrouillage orientation paysageshared
useWakeLockEmpêche la mise en veille de l’écranshared
Smartphone (SimCam)
├─ getUserMedia() → MediaStream local (vidéo + audio)
├─ RTCPeerConnection → SDP offer
├─ POST /api/go2rtc/webrtc?dst=simcam-xxx → SDP answer
└─ Flux WebRTC → go2rtc → SimServer → Régie SimStudio
VueRouteDescription
CameraView/Interface principale fullscreen (capture + diffusion)
ConnectView/connectConnexion au SimServer (URL, QR code, test)
SettingsView/settingsRésolution, langue, identité, permissions, mise à jour
APIUsage
getUserMediaCapture vidéo et audio
Permissions APIÉtat des autorisations (caméra, micro)
Battery Status APINiveau de batterie et état de charge
Network Information APIType de réseau et bande passante
Screen Orientation APIVerrouillage en mode paysage
Screen Wake Lock APIEmpêche la mise en veille pendant la captation
Visual Viewport APICalcul précis de la hauteur visible (compatibilité Samsung)
Fenêtre de terminal
cd apps/cam && npm install # Installer les dépendances
cd apps/cam && npm run dev # Serveur dev (localhost:5174)
cd apps/cam && npm run build # Build production (dist/)
cd apps/cam && npm test # Tests unitaires (Vitest)
cd apps/cam && npm run test:coverage # Couverture de code (seuil 80%)