Portale di transcoding

From ARAV
Jump to: navigation, search

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

  1. formato (webm(vp8/vorbis) o ogg(theora/vorbis))
  2. bitrate audio
  3. bitrate video
  4. altezza
  5. 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:

  1. download
  2. encoding
  3. upload

Possibili scheduling:

  • ciclo: download; encoding; upload; ricomincia
  • una pipe continua: curl file.avi | ffmpeg ... | curl -T file.webm
  • ...
  • tre processi paralleli:
  1. download del job n+1; riposa finchè finito job n; ricomincia
  2. encoding del job n; n=n+1
  3. 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">

  1. include <ports.h>

</source>

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox