FEAT: Pilote Akka.Streams — pipeline snapshot d'une caméra (backpressure + supervision de flux) #70

Closed
opened 2026-08-11 22:17:01 +02:00 by nonobis · 1 comment
Owner

Contexte

Proposition (issue de l'évaluation Akka.NET, ticket TECH lié) : valider Akka.Streams sur le pipeline snapshot existant, en pilote sur une seule caméra, avant toute migration globale. L'équivalent maison actuel (sémaphore 4, channel borné 100 DropOldest, boucle BackgroundService) est un équivalent minimal de Source/Flow/Sink avec backpressure natif, Buffer + OverflowStrategy, RestartingDecider et Throttle.

Référence spec

Phase 15 (Agent Vidéo — capture + streaming) et Phase 16 (IA Pipeline). Ne modifie pas le comportement métier.

État actuel

  • CameraStreamService : FFmpeg MJPEG par caméra, sémaphore 4, Channel<Snapshot> borné 100 DropOldest, compteur DroppedSnapshotCount.
  • SnapshotPipelineService : BackgroundService qui consomme le channel → FrameAnalyzerService.AnalyzeFrameAsync → SceneStateTracker.UpdateFromAnalysis + détection de mouvement.
  • Le pipeline fonctionne (Fixes #1) ; c'est une expérimentation de validation, pas un correctif.

Comportement attendu (pilote, 1 caméra)

  • Graphe Akka.Streams : Source(FFmpeg MJPEG) → Flow(analyse) → Sink(SceneStateTracker) matérialisé en IAsyncEnumerable.
  • Backpressure natif : quand l'analyse est lente, le flux se throttle automatiquement (au lieu de drop systématique).
  • RestartingDecider : redémarrage propre du graphe si l'analyse crash, sans perte de l'état de scène.
  • Comparaison mesurée vs actuel : débit (frames/s), pertes, CPU, complexité de code. Décision de bascule documentée dans le ticket.

Critères d'acceptation

  • Pilote activable par config (feature flag) sur 1 caméra, sans impact sur les autres.
  • Backpressure et redémarrage sur crash vérifiés par tests.
  • Benchmark comparatif (frames/s, dropped, CPU) vs pipeline Channels actuel.
  • Décision go/no-go consignée en commentaire du ticket (migration globale ou abandon).

Fichiers concernés

  • src/Heimdall.Agent/Services/CameraStreamService.cs
  • src/Heimdall.Agent/Services/SnapshotPipelineService.cs
  • src/Heimdall.Agent/Heimdall.Agent.csproj (PackageReference Akka.Streams 1.5.70, Akka.Hosting 1.5.70 — Apache-2.0, net6.0 → OK net10)

Liens

## Contexte Proposition (issue de l'évaluation Akka.NET, ticket TECH lié) : valider Akka.Streams sur le pipeline snapshot existant, en pilote sur **une seule caméra**, avant toute migration globale. L'équivalent maison actuel (sémaphore 4, channel borné 100 DropOldest, boucle BackgroundService) est un équivalent minimal de Source/Flow/Sink avec backpressure natif, Buffer + OverflowStrategy, RestartingDecider et Throttle. ## Référence spec Phase 15 (Agent Vidéo — capture + streaming) et Phase 16 (IA Pipeline). Ne modifie pas le comportement métier. ## État actuel - `CameraStreamService` : FFmpeg MJPEG par caméra, sémaphore 4, `Channel<Snapshot>` borné 100 `DropOldest`, compteur `DroppedSnapshotCount`. - `SnapshotPipelineService` : BackgroundService qui consomme le channel → `FrameAnalyzerService.AnalyzeFrameAsync` → `SceneStateTracker.UpdateFromAnalysis` + détection de mouvement. - Le pipeline fonctionne (Fixes #1) ; c'est une expérimentation de validation, pas un correctif. ## Comportement attendu (pilote, 1 caméra) - Graphe Akka.Streams : `Source(FFmpeg MJPEG) → Flow(analyse) → Sink(SceneStateTracker)` matérialisé en `IAsyncEnumerable`. - Backpressure natif : quand l'analyse est lente, le flux se throttle automatiquement (au lieu de drop systématique). - `RestartingDecider` : redémarrage propre du graphe si l'analyse crash, sans perte de l'état de scène. - Comparaison mesurée vs actuel : débit (frames/s), pertes, CPU, complexité de code. **Décision de bascule documentée** dans le ticket. ## Critères d'acceptation - [ ] Pilote activable par config (feature flag) sur 1 caméra, sans impact sur les autres. - [ ] Backpressure et redémarrage sur crash vérifiés par tests. - [ ] Benchmark comparatif (frames/s, dropped, CPU) vs pipeline Channels actuel. - [ ] Décision go/no-go consignée en commentaire du ticket (migration globale ou abandon). ## Fichiers concernés - `src/Heimdall.Agent/Services/CameraStreamService.cs` - `src/Heimdall.Agent/Services/SnapshotPipelineService.cs` - `src/Heimdall.Agent/Heimdall.Agent.csproj` (PackageReference Akka.Streams 1.5.70, Akka.Hosting 1.5.70 — Apache-2.0, net6.0 → OK net10) ## Liens - Rapport : ticket TECH « Évaluation Akka.NET/Petabridge » - Source : https://petabridge.com/platform/akka-net/streams/
Author
Owner

Abandonné — décision utilisateur : pas d'intégration Akka.NET (sans objet à ce stade).

Abandonné — décision utilisateur : pas d'intégration Akka.NET (sans objet à ce stade).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall#70
No description provided.