Portale di transcoding
sito che permette di fare encoding video da qualsiasi formato a ogg/theora+vorbis e a webm/vp8+vorbis
e' composto dal portale e dai worker il portale e' composto da una interfaccia e da una coda
Contents |
interfaccia di ingresso
upload e inserimento dei parametri di encoding
- formato (webm(vp8/vorbis) o ogg(theora/vorbis))
- bitrate audio
- bitrate video
- altezza
- larghezza
con captcha
coda
uno 'stato' e' fatto di una coppia nome-valore
struttura:
- uuid
- tempo
- name
- value
stati e loro valori:
- new url_input
- start worker_id
- encoding progress
- done url_output
endpoint:
- /put/<uuid>/<name>/<value> inserisce nuova entry.
- /get/<uuid>/<name>/<value> torna tempo+uuid+name+value. accetta wildcard (*)
- /last-status-of-uuid/<uuid> torna status piu recente dell'uuid
- /first-uuid-with-last-status/<name>/<value> torna l'uuid piu vecchio con lo status piu recente <name>/<value>. accetta wildcard (*)
procedura:
interfaccia: http://tranq.arkiwi.org/put/87y8e37y/new/aHR0cDovL3RyYW5xLmFya2l3aS5vcmcvaW5wdXQvYW50aV9mYXNjaXNtby5tcGc=
worker "lavoratore": http://tranq.arkiwi.org/first-uuid-with-last-status/new/* torna 87y8e37y
worker "lavoratore": http://tranq.arkiwi.org/put/87y8e37y/start/lavoratore
worker "lavoratore": http://tranq.arkiwi.org/first-uuid-with-last-status/start/lavoratore controlla di aver vinto
worker "lavoratore": http://tranq.arkiwi.org/get-object/87y8e37y ricava parametri
worker "lavoratore": http://tranq.arkiwi.org/put/87y8e37y/encoding/15
worker "lavoratore": http://tranq.arkiwi.org/put/87y8e37y/encoding/35
interfaccia: http://tranq.arkiwi.org/first-uuid-with-last-status/done/* torna nulla
[...]
worker "lavoratore": http://tranq.arkiwi.org/put/87y8e37y/done/aHR0cDovL2xhdm9yYXRvcmUub3J0aWNoZS5uZXQvb3V0cHV0L3Bhc3RyYW5vLm9ndg==
interfaccia: http://tranq.arkiwi.org/first-uuid-with-last-status/done/* torna 87y8e37y
interfaccia: spedisce avviso all'utente.
interfaccia: elimina file di input
lavoratore: dopo 24 ore elimina file di output
worker
su base gstreamer o ffmpeg, si occupa di fare l'encoding vero e proprio
gstreamer e' carino perche ben generico, configurabile via xml e per la possibilita di mettere plugin
ffmpeg e' un po piu aggiornato e performante
gstreamer-ffmpeg ?
worker, alcune altre idee
È un demone fattibile per esempio in un solo script.sh Ci si trovano tre processi:
- download
- encoding
- upload
Possibili scheduling:
- ciclo: download; encoding; upload; ricomincia
- una pipe continua: curl file.avi | ffmpeg ... | curl -T file.webm
- ...
- tre processi paralleli:
- download del job n+1; riposa finchè finito job n; ricomincia
- encoding del job n; n=n+1
- upload del job n-1; cancella job n-1; riposa finchè finito job n; ricomincia
Così ogni worker sta trattando max 3 job: n-1, n, n+1 . Andrebbe bene? Volendo il "lookahead" dei processi 1 e 2 potrebbe essere più lungo ma sceglierei di no come politica del sistema.
Decidiamo comunque che il demone gestisce un unico processo di encoding in un dato momento. Almeno finchè si usa un encoder che già di per sè sfrutta più core. Però sicuro ne possono girare più di uno sullo stesso host. Magari fare benchmark <source lang="C">
- include <ports.h>
</source>