Files
videoteca/docs/adr/0004-pipeline-di-ingest.md

22 lines
1.7 KiB
Markdown

# 0004 — Pipeline di ingest e transcodifica
- **Stato**: **Proposto** — decide lo spike M0 (R-02)
- **Data**: 2026-10-11
## Contesto
PocketBase non transcodifica. Serve ffmpeg (processo esterno, gratuito). I hook JS possono eseguire comandi (`$os` espone l'esecuzione di comandi di shell), ma il motore non ha concorrenza interna a un handler.
## Opzioni
- **A. Hook su creazione record**: l'upload crea il record `processing`; un hook lancia ffmpeg. Se bloccante, la richiesta HTTP resta appesa per tutta la transcodifica → inadatto. Va verificato se si può avviare il processo in modo non bloccante (`$os.cmd(...).start()`): **non verificato**.
- **B. Script CLI separato** (`scripts/ingest`): lo script ricodifica e poi carica via API. L'upload "passa" dallo script, non dal browser. Semplice e robusto, UX meno immediata.
- **C. Worker che sonda i record `processing`** (script o processo separato) e li lavora in coda, uno alla volta (evita saturare la CPU).
## Decisione provvisoria
Preferire **C** (upload da browser → record `processing` → worker ricodifica → `ready`), con **B** come ripiego. **A** solo se lo spike dimostra che l'esecuzione non bloccante è affidabile.
## Requisiti indipendenti dall'opzione
Idempotenza (rilanciare non duplica); un job alla volta; file temporaneo scritto fuori da `pb_data/` e spostato a fine lavoro; all'avvio i record bloccati in `processing` vengono riconciliati; se l'output è più grande dell'originale si tiene l'originale; scritte statistiche (peso prima/dopo, durata, codec).
## Da verificare in M0
Esecuzione non bloccante da hook; limite di dimensione upload accettato da PocketBase per file grandi; comportamento a riavvio durante la lavorazione.