Aller au contenu principal

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.

    Caméra sélectionnée, timeline ouverte

  • 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).

    Timeline : plages enregistrées et trou

  • 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.

    Clic dans une plage

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

    Clic dans le trou

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

    Pause

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

    Lecture à ×16

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

    Enchaînement au Segment suivant

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

    H.265 non décodé

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

    Caméra sans Segment

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

    Session expirée

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​

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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​

  1. 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.
  2. 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.
  3. 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​

  1. En tant que mainteneur, je veux que le glossaire définisse Relecture (et la timeline d’enregistrement si besoin), pour un vocabulaire stable.
  2. 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.
  3. 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_request si 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 (playbackRate ou é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émentAvantAprèsÀ annoter
0.8.0 / ADR 0011Exposition HTTP des segmentsPas d’exposition HTTP ; inspection volume seulementRelecture UI authentifiée (chemin tranché par ADR 0.8.2)v0.8.0, ADR 0011, #115
0.8.1Page EnregistrementDashboard stockage / débits / réglages seulement+ sélection Caméra, timeline et viewer de relecturev0.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).