V0.8.2 — Relecture des enregistrements
Publiée le 19/10/2026.
Documentation fonctionnelle
Ce que change la version pour les collaborateurs
Pourquoi
Depuis la 0.8.0 et la 0.8.1, le Site enregistre en continu et suit l’espace et les débits, mais l’Administrateur ne pouvait pas relire cet historique : la seule preuve était l’inspection du volume Docker. Il lui fallait choisir un moment sur la Conservation et lire la vidéo d’une Caméra depuis ArgOS.
Ce qu'on peut faire maintenant
-
Relire l’historique d’une Caméra depuis l’onglet Enregistrement : un clic sur sa ligne du résumé ouvre sa timeline sur toute la Conservation.

-
Voir d’un coup d’œil où il y a de la vidéo : plages enregistrées en couleur, trous en gris ; le Segment en cours d’écriture n’est pas proposé, et les Segments fermés depuis apparaissent seuls (rafraîchissement toutes les 10 s).

-
Cliquer un moment sur la timeline pour lire le Segment qui le couvre, depuis son début ; au clavier, Entrée ou Espace sur la timeline passe au Segment suivant.

-
Cliquer dans un trou pour lire le Segment le plus proche.

-
Mettre en pause et reprendre, en suivant la progression dans le Segment.

-
Accélérer à ×2, ×4, ×8 ou ×16 pour parcourir vite une longue Conservation.

-
Laisser la lecture enchaîner seule sur le Segment suivant, à la même vitesse.

-
Relire sans réencodage ; un poste qui ne décode pas le H.265 le dit clairement, comme au Live.

-
Comprendre l’absence de vidéo : une Caméra sans enregistrement affiche « Aucun enregistrement sur cette période ».

-
Relire seulement derrière la session : une session expirée renvoie à la connexion, rien n’est relu.

Documentation technique
Spec versionnée : docs/specs/v0.8.2-relecture-des-enregistrements.md
Issue parente : #127
V0.8.2 — Relecture des enregistrements
Problem Statement
Depuis 0.8.0 / 0.8.1, le Site enregistre en continu des segments fMP4 et en suit l’espace et les débits, mais l’Administrateur ne peut pas parcourir ni relire cet historique dans l’UI : la preuve reste l’inspection du volume Docker. Il lui faut choisir un moment sur la période de Conservation et lire la vidéo de chaque Caméra depuis ArgOS.
Solution
Sur la page Enregistrement (dashboard 0.8.1 conservé), l’Administrateur sélectionne une Caméra (clic sur une ligne du résumé), puis :
- voit une timeline couvrant la fenêtre de Conservation du Site, avec une couleur sur les plages où des segments existent (trous visibles ailleurs) ;
- clique un instant → le viewer se positionne au début du segment qui couvre cet instant (ou le plus proche) — seek précis reporté / documenté pour la refonte 1.0.0 ;
- lit dans le navigateur (play / pause, progression dans le segment ou enchaînement au suivant, vitesses ×1 / ×2 / ×4 / ×8 / ×16), derrière la session comme le Live ;
- ignore le segment encore ouvert (écriture en cours) jusqu’à fermeture ;
- H.265 : même exigence que le Live (pas de réencodage) ; message clair si le poste ne décode pas.
Le chemin technique (playback MediaMTX derrière nginx vs API qui liste / sert) est tranché par un spike court puis un ADR de cette version. Pas de téléchargement / export (Plus tard). Une Caméra à la fois (multi plus tard). UI simple acceptable ; polish 1.0.0.
User Stories
Sélection et parcours
- En tant qu’Administrateur, je veux sélectionner une Caméra depuis le résumé de la page Enregistrement, pour relire son historique sans quitter cette page.
- En tant qu’Administrateur, je veux une timeline sur toute la Conservation du Site, avec les plages enregistrées colorées et les trous visibles, pour voir où il y a de la vidéo.
- En tant qu’Administrateur, je veux cliquer sur la timeline pour mettre à jour le viewer au début du segment concerné, pour choisir un moment sans gérer des fichiers.
- En tant qu’Administrateur, je veux pouvoir sélectionner une Caméra sans segment : timeline vide + message « Aucun enregistrement sur cette période », pour comprendre l’absence de vidéo.
- En tant qu’Administrateur, je ne veux pas lire le segment encore en cours d’écriture, pour éviter un lecteur cassé ; le Live couvre « maintenant ».
Lecture
- En tant qu’Administrateur, je veux lire la relecture dans le navigateur derrière ma session ArgOS, comme le Live, pour ne pas exposer les segments sans auth.
- En tant qu’Administrateur, je veux play / pause, une progression dans le segment courant (ou l’enchaînement au suivant), et des vitesses ×1 / ×2 / ×4 / ×8 / ×16, pour parcourir vite une longue Conservation.
- En tant qu’Administrateur, je veux que le H.265 se comporte comme au Live (lisible si mon poste le permet, sinon message clair), sans réencodage dans cette version.
Vocabulaire et décisions
- En tant que mainteneur, je veux que le glossaire définisse Relecture (et la timeline d’enregistrement si besoin), pour un vocabulaire stable.
- En tant que mainteneur, je veux un ADR qui tranche le transport de relecture (après spike), et que la limite « clic = début de segment » soit documentée pour la refonte 1.0.0.
- En tant que mainteneur, je veux que la doc d’inspection volume indique que la relecture UI existe désormais, pour ne plus laisser croire que Docker est la seule voie.
Implementation Decisions
- Étendre
Enregistrement.tsx: sélection Caméra via le résumé existant ; bloc viewer + timeline sous le dashboard (layout simple). - API (ou équivalent) pour exposer les plages / segments fermés d’une Caméra sur la fenêtre de Conservation (dérivés du volume
camera-\<id>/). - Transport de la vidéo : spike MediaMTX playback (permission déjà en config) vs API +
\<video>/ playlist ; ADR nouveau ; nginx +auth_requestsi proxy/flux/…. - Segments ouverts exclus de la relecture.
- Clic timeline → début de segment ; documenter dans spec / ADR / notes pour seek précis ultérieur.
- Vitesses via le lecteur web (
playbackRateou équivalent) ; pas ×32. - Glossaire + ADR ; mise à jour doc inspecter-les-enregistrements + README si besoin.
- Hors CI Sonar comme critère de merge ; bugs #86 / #95 hors périmètre.
Testing Decisions
Un bon test vérifie un comportement observable (API, fichiers, UI, auth), pas le détail interne MediaMTX couche par couche.
Seams :
- API : liste / plages de segments fermés pour une Caméra ; exclusion du fichier ouvert ; bornes liées à la Conservation.
- Auth : relecture refusée sans session (comme
/flux/). - UI : sélection Caméra ; timeline colorée + trous ; clic met à jour le viewer ; message sans segment ; play / vitesses.
- Fichiers : fixtures de segments sous
camera-\<id>/pour plages et lecture. - Tests humains : Caméra simulée qui enregistre, attendre un segment fermé, parcourir la timeline, relire à différentes vitesses ; H.264 (et H.265 si poste capable).
Out of Scope
- Téléchargement / export des enregistrements (Plus tard, feuille de route).
- Sélection / relecture de plusieurs Caméras en parallèle (version ultérieure).
- Seek précis à la seconde dans un segment (documenté pour refonte 1.0.0).
- Vitesse ×32.
- Plages horaires d’enregistrement (déjà hors 0.8.2 sur la feuille).
- Réencodage H.265 → H.264.
- Bind / multi-disque (0.8.3 envisagée).
- Correction des bugs #86 et #95.
- Fil rouge 1.0.0 / refonte UI globale.
Changements apportés aux versions antérieures
| Version | Élément | Avant | Après | À annoter |
|---|---|---|---|---|
| 0.8.0 / ADR 0011 | Exposition HTTP des segments | Pas d’exposition HTTP ; inspection volume seulement | Relecture UI authentifiée (chemin tranché par ADR 0.8.2) | v0.8.0, ADR 0011, #115 |
| 0.8.1 | Page Enregistrement | Dashboard stockage / débits / réglages seulement | + sélection Caméra, timeline et viewer de relecture | v0.8.1, #121 |
Further Notes
- Limite à rappeler en 1.0.0 : un clic sur la timeline positionne au début du segment (~1 min), pas un seek précis à la seconde. Prévoir seek fin / timeline plus riche à la refonte UI.
- Multi-cam relecture et téléchargement / export sont des suites produit distinctes (Plus tard / à numéroter).