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

1.7 KiB

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.