FEAT: CameraSupervisorActor — supervision déclarative des process FFmpeg (redémarrage backoff par caméra) #71

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

Contexte

Proposition (issue de l'évaluation Akka.NET, ticket TECH lié) : remplacer la gestion try/catch impérative des process FFmpeg par une supervision parentale d'acteurs — l'idée la plus défendable du dossier. Un acteur parent par caméra avec un enfant FFmpegActor donne une politique de redémarrage déclarative (backoff, isolation des crashs par caméra) au lieu de la reconnexion manuelle actuelle.

Référence spec

Phase 15 (Agent Vidéo — capture + streaming). La spec exige la reconnexion automatique si crash FFmpeg.

État actuel

  • CameraStreamService.StartStreamAsync : lance FFmpeg, boucle de lecture, HasExited vérifié avant Kill(), WaitForExit(2000), reconnexion auto si crash — le tout impératif, dans le service.
  • Pas d'isolation fine : un problème de FFmpeg d'une caméra est géré dans le même chemin de code que les autres.
  • Ticket #22 (CPU approximatif) et #58 (statut caméra temps réel) voisins mais distincts.

Comportement attendu (pilote optionnel, après validation du critère de bascule)

  • Hiérarchie : CameraSupervisorActor (1 par agent) → CameraStreamActor (1 par caméra) → supervision FFmpeg enfant.
  • Politique : restart avec backoff exponentiel par caméra, isolation des crashs (une caméra qui crash n'impacte pas les autres).
  • État de vie par caméra centralisé dans l'acteur parent (alimenterait le statut temps réel, ticket #58).
  • Découplé du pipeline d'analyse (aucun changement côté FrameAnalyzerService).

Critères d'acceptation

  • Un crash FFmpeg d'une caméra → redémarrage backoff sans impact sur les autres caméras.
  • Politique de redémarrage testable unitairement (max retries, backoff, arrêt propre).
  • Comportement identique au pipeline actuel pour le cas nominal.
  • Décision d'adoption consignée (ticket TECH de référence).

Fichiers concernés

  • src/Heimdall.Agent/Services/CameraStreamService.cs
  • src/Heimdall.Agent/Heimdall.Agent.csproj (Akka 1.5.70 + Akka.Hosting 1.5.70 — Apache-2.0)

Liens

## Contexte Proposition (issue de l'évaluation Akka.NET, ticket TECH lié) : remplacer la gestion try/catch impérative des process FFmpeg par une supervision parentale d'acteurs — **l'idée la plus défendable du dossier**. Un acteur parent par caméra avec un enfant FFmpegActor donne une politique de redémarrage déclarative (backoff, isolation des crashs par caméra) au lieu de la reconnexion manuelle actuelle. ## Référence spec Phase 15 (Agent Vidéo — capture + streaming). La spec exige la reconnexion automatique si crash FFmpeg. ## État actuel - `CameraStreamService.StartStreamAsync` : lance FFmpeg, boucle de lecture, `HasExited` vérifié avant `Kill()`, `WaitForExit(2000)`, reconnexion auto si crash — le tout impératif, dans le service. - Pas d'isolation fine : un problème de FFmpeg d'une caméra est géré dans le même chemin de code que les autres. - Ticket #22 (CPU approximatif) et #58 (statut caméra temps réel) voisins mais distincts. ## Comportement attendu (pilote optionnel, après validation du critère de bascule) - Hiérarchie : `CameraSupervisorActor` (1 par agent) → `CameraStreamActor` (1 par caméra) → supervision FFmpeg enfant. - Politique : restart avec backoff exponentiel par caméra, isolation des crashs (une caméra qui crash n'impacte pas les autres). - État de vie par caméra centralisé dans l'acteur parent (alimenterait le statut temps réel, ticket #58). - Découplé du pipeline d'analyse (aucun changement côté FrameAnalyzerService). ## Critères d'acceptation - [ ] Un crash FFmpeg d'une caméra → redémarrage backoff sans impact sur les autres caméras. - [ ] Politique de redémarrage testable unitairement (max retries, backoff, arrêt propre). - [ ] Comportement identique au pipeline actuel pour le cas nominal. - [ ] Décision d'adoption consignée (ticket TECH de référence). ## Fichiers concernés - `src/Heimdall.Agent/Services/CameraStreamService.cs` - `src/Heimdall.Agent/Heimdall.Agent.csproj` (Akka 1.5.70 + Akka.Hosting 1.5.70 — Apache-2.0) ## Liens - Rapport : ticket TECH « Évaluation Akka.NET/Petabridge » - Source : https://getakka.net/articles/concepts/supervision.html
nonobis 2026-08-11 22:17:02 +02:00
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#71
No description provided.