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.