2009-10-01 13 views
16

Cosa pensano le persone sono i problemi più importanti quando si sviluppa un'applicazione che consente agli utenti di caricare video e immagini su un server e farli transcodificare da FFMPEG e memorizzati su Amazon S3? Ho un paio di opzioni;Le migliori pratiche per lo sviluppo di server di transcodifica video scalabile su Amazon Web Services?

1) installare FFMPEG sullo stesso server che gestisce i caricamenti di file, quando un video viene caricato e archiviato su un'istanza EC2, chiamare FFMPEG per convertirlo e al termine, scrivere il file nel secchio S3 e smaltire l'originale.

Quanto è scalabile? Cosa succede quando molti utenti caricano nello stesso momento? Come posso gestire più processi contemporaneamente? Come faccio a sapere quando avviare un'altra istanza e bilanciare il carico questa configurazione?

2) Avere un server per l'elaborazione di upload (aggiornamento del database, rinominazione di file ecc.) E un server per eseguire la transcodifica. Di nuovo qual è il modo migliore per gestire più processi? dovrei guardare Amazon SQS per questo? Posso dire al server di transcodifica di ottenere il file dal server di upload o dovrei copiare il file sul server di transcodifica? Dovrei solo memorizzare tutti i file su S3 e SQS può leggere da lì. Sto cercando di avere meno traffico possibile.

Sto eseguendo una casella Linux come server di caricamento e FFMPEG è in esecuzione su questo.

Qualsiasi consiglio sulle migliori pratiche per l'impostazione di tale configurazione sarebbe apprezzato. Molte grazie

+5

Amazon Web Services ha recentemente rilasciato un nuovo servizio Web chiamato [Amazon Elastic Transcoder] (http://aws.amazon.com/elastictranscoder "Amazon Elastic Transcoder"). – Adam

risposta

12

Non penso che vorrai avviare una nuova istanza FFMPEG ogni volta che qualcuno carica un file per la transcodifica. Invece, probabilmente vorrai avviare lo stesso numero di processi FFMPEG del numero di CPU che hai, quindi accodare i file di input che vuoi transcodificare e farli nell'ordine in cui sono stati ricevuti. Si potrebbe fare tutto questo su un solo computer, non penso che il server che accetta i caricamenti e li metta in coda avrà bisogno di molta CPU e probabilmente può coesistere bene con i processi FFMPEG.

A seconda della dimensione in cui si desidera ridimensionare (se si desidera eseguire più di alcuni processi FFMPEG su una singola macchina) è possibile renderlo facilmente distribuito, ed è qui che SQS sarebbe utile. È possibile eseguire 1 processo FFMPEG per core, e invece di cercare in una coda locale per i dati, potrebbe guardare allo SQS. Quindi puoi istanziare tutti i processi di transcodifica di cui hai bisogno, su macchine diverse.

Lo svantaggio di questo è che è necessario trasferire i video non elaborati dal server che li accetta al server che deve transcodificarli. Potresti metterli in S3 e poi prenderli da S3, ma non me lo ricordo in testa se devi pagare per quello. In alternativa, puoi semplicemente tenerli sul disco fisso della macchina che li ha ricevuti e fare in modo che il processo di transcodifica venga eseguito lì per ottenere i file raw.

+0

Grazie mille per la tua risposta. Ora sono nella fase in cui ho il server che gestisce gli upload che chiamano FFMPEG per elaborare il video caricato, quindi scrivo il file codificato su Amazon S3. Mentre questo accade anche se gli script attendono che tutti i processi siano terminati, cioè l'utente deve attendere la codifica del video prima dei successivi caricamenti video, ecc. Sono d'accordo con te che posso probabilmente gestire il caricamento e la codifica su una singola macchina ma come suggerisci di eseguire la transcodifica in background e come posso rilevare quando un file è stato transcodificato per copiarlo in S3? grazie ancora – undefined

+0

Quindi hai un processo che sta facendo la transcodifica, non è possibile che lo stesso processo lo inserisca in S3 una volta terminato? Forse quando l'app web-based dà il via al processo di transcodifica, può passare in un argomento che dice al processo di transcodifica dove in S3 metterlo. – teeks99

+0

Ricordare che FFMPEG può acquisire dati da STDIN e inviare a STDOUT. Non dimenticare di guardare tutte le opzioni di linea di comando streaming disponibili! – jduncanator

1

Si dovrebbe dare un'occhiata a Amazon Elastic Transcoder. Risolve quasi tutti i problemi che hai menzionato nella domanda.

1

È possibile verificare Piper. È una versione open source di un prodotto che ho originariamente costruito per una grande società di intrattenimento per gestire la transcodifica video su larga scala.

Problemi correlati