Feat : preview timeline vignette
This commit is contained in:
32
README.md
32
README.md
@@ -112,6 +112,8 @@ node /opt/stream-control-agent/agent.cjs --check
|
||||
| `SESSION_SECRET` | Clé HMAC des sessions (32+ octets aléatoires) |
|
||||
| `ENROLLMENT_TOKEN` | Jeton d'auto-enregistrement ; vide = désactivé |
|
||||
| `DB_PATH` | Fichier SQLite |
|
||||
| `PREVIEWS_DIR` | Vignettes de diffusion conservées, une par stream |
|
||||
| `PREVIEW_DELAY_MS` | Attente avant de copier la vignette d'un stream qui démarre |
|
||||
| `STATUS_INTERVAL_MS` | Fréquence de remontée d'état des agents |
|
||||
| `AGENT_TIMEOUT_MS` | Délai avant de déclarer un agent hors-ligne |
|
||||
|
||||
@@ -669,6 +671,35 @@ gardée — deux pistes séparées obligeraient l'œil à faire l'alignement lui
|
||||
globale rend visibles les chevauchements : deux streamers en direct en même temps sur une
|
||||
seule VM, et ce qui, faute de machine libre, est passé à côté.
|
||||
|
||||
### Une vignette par diffusion, conservée
|
||||
|
||||
**Survoler une barre bleue montre une image de ce stream-là**, même des mois après. C'est ce
|
||||
qui permet de reconnaître une diffusion d'un coup d'œil dans une frise qui, sans ça, n'aligne
|
||||
que des rectangles interchangeables.
|
||||
|
||||
L'image est **copiée sur le serveur**, et non pointée vers la plateforme : la vignette servie
|
||||
en direct sur l'onglet **Streamers** vient du CDN de Stripchat, qui la remplace toutes les
|
||||
demi-heures environ. Passé la diffusion, son URL ne renvoie plus rien d'exploitable — rien de
|
||||
ce qui s'affiche en direct ne survit au stream. D'où la copie, prise pendant qu'elle existe
|
||||
encore.
|
||||
|
||||
Une seule par diffusion, jamais remplacée ensuite : c'est une illustration destinée à
|
||||
reconnaître un stream, pas un suivi de son déroulé. Elle est prise **une minute après le début
|
||||
du stream** (`PREVIEW_DELAY_MS`), pour la même raison que le délai d'amorçage de
|
||||
l'enregistrement automatique : les premières secondes d'un flux montrent souvent un écran de
|
||||
démarrage ou une pièce vide, et un passage éclair en public au sortir d'un show privé ne
|
||||
mérite pas d'illustration. Une diffusion plus courte que ce délai n'en aura donc pas.
|
||||
|
||||
Les fichiers vivent dans `data/previews/` (`PREVIEWS_DIR`), à côté de la base et non dedans —
|
||||
ce sont des dizaines de kilo-octets chacun, que SQLite n'a aucune raison de porter. Ne plus
|
||||
suivre un profil efface ses diffusions en cascade côté SQLite, mais SQLite ne connaît rien du
|
||||
disque : un **ménage quotidien** (et au démarrage) supprime les images que plus aucune
|
||||
diffusion ne réclame.
|
||||
|
||||
La route qui les sert accepte le jeton de session en paramètre d'URL — une balise `<img>` ne
|
||||
permet pas d'ajouter un en-tête, comme pour le flux temps réel. Le fichier ne changeant jamais
|
||||
une fois écrit, il est servi avec un cache immuable.
|
||||
|
||||
### Ce qui est enregistré, et comment
|
||||
|
||||
| Table | Écrite par | Une ligne = |
|
||||
@@ -783,6 +814,7 @@ Toutes les routes hors `/api/login` exigent `Authorization: Bearer <jeton de ses
|
||||
| `PATCH` | `/api/agents/:id` | Nom, notes, paramètres OBS, auto-connexion, surveillance, navigateur, preset |
|
||||
| `PATCH` | `/api/watchlist/:id` | Libellé, agent assigné, notifications, automatisme, favori, priorité, interruption |
|
||||
| `GET` | `/api/timeline?days=&targetId=` | Diffusions et captures ; sans `targetId`, tous les profils |
|
||||
| `GET` | `/api/timeline/sessions/:id/preview` | Vignette conservée d'une diffusion (jeton accepté en query) |
|
||||
| `POST` | `/api/agents/:id/token` | Régénère le jeton (coupe la session en cours) |
|
||||
| `DELETE` | `/api/agents/:id` | Supprime l'agent |
|
||||
| `POST` | `/api/agents/:id/command` | `{ action, params }`, attend le résultat de l'agent |
|
||||
|
||||
Reference in New Issue
Block a user