2009-10-01 24 views
16

¿Qué piensan las personas que son los problemas más importantes cuando se desarrolla una aplicación que permitirá a los usuarios subir videos e imágenes a un servidor y que FFMPEG los transcodifique y los almacene en amazon S3? Tengo un par de opciones;¿Mejores prácticas para desarrollar servidores de transcodificación de video escalables en Amazon Web Services?

1) instale FFMPEG en el mismo servidor que maneja cargas de archivos, cuando un video se carga y almacena en instancia EC2, llame a FFMPEG para convertirlo y cuando termine, escriba el archivo en S3 y deseche el original.

¿Qué tan escalable es esto? ¿Qué sucede cuando muchos usuarios cargan al mismo tiempo? ¿Cómo administro múltiples procesos a la vez? ¿Cómo sé cuándo iniciar otra instancia y equilibrar la carga de esta configuración?

2) Tener un servidor para procesar las cargas (actualización de la base de datos, cambio de nombre de archivos, etc.) y un servidor para realizar la transcodificación. De nuevo, ¿cuál es la mejor forma de administrar múltiples procesos? ¿Debería mirar Amazon SQS para esto? ¿Puedo decirle al servidor de transcodificación que obtenga el archivo del servidor de carga o debería copiar el archivo al servidor de transcodificación? ¿Debo simplemente almacenar todos los archivos en S3 y SQS puede leer desde allí. Estoy tratando de tener el menor tráfico posible.

Estoy ejecutando un linux box como servidor de carga y tengo FFMPEG ejecutándose en esto.

Cualquier consejo sobre las mejores prácticas para configurar tal configuración sería apreciado. Muchas gracias

+5

Amazon Web Services lanzó recientemente un nuevo servicio web llamado [Amazon Elastic Transcoder] (http://aws.amazon.com/elastictranscoder "Amazon Elastic Transcoder"). – Adam

Respuesta

12

No creo que desee iniciar una nueva instancia de FFMPEG cada vez que alguien cargue un archivo para transcodificar. En cambio, es probable que desee comenzar la misma cantidad de procesos FFMPEG que la cantidad de CPU que tiene, luego ponga en cola los archivos de entrada que desea transcodificar y hágalos en el orden en que fueron recibidos. Podrías hacer esto en una sola computadora, no creo que el servidor que acepte las cargas y las coloque en la cola necesitará mucha CPU y probablemente coexista perfectamente con los procesos de FFMPEG.

Dependiendo de qué tan grande desee escalar (si desea hacer más que unos pocos procesos FFMPEG en una sola máquina) podría distribuirlo fácilmente, y aquí es donde SQS sería útil. Podría ejecutar 1 proceso FFMPEG por núcleo, y en lugar de buscar en una cola local para los datos, podría mirar al SQS. Luego, puede instanciar tantos procesos de transcodificación como necesite en diferentes máquinas.

El inconveniente de esto es que tendrá que transferir los videos sin formato desde el servidor que los acepta al servidor que necesita transcodificarlos. Podrías ponerlos en S3 y luego sacarlos de S3, pero no me acuerdo de la parte superior de la cabeza si tienes que pagar por eso. De forma alternativa, puede guardarlos en el disco duro de la máquina que los recibió y hacer que el proceso de transcodificación vaya allí para obtener los archivos sin formato.

+0

Muchas gracias por su respuesta. Ahora estoy en la etapa en que tengo el servidor que maneja las cargas que llaman a FFMPEG para procesar el video cargado, luego escribo el archivo codificado en Amazon S3. Mientras esto sucede, los scripts esperan hasta que todos los procesos hayan terminado, es decir, el usuario tiene que esperar a que el video codifique antes de que se cargue el siguiente video, etc. Estoy de acuerdo con usted en que puedo administrar la carga y codificación en una sola máquina pero ¿Cómo sugieres que ejecute la transcodificación en segundo plano, y cómo detecto cuándo un archivo ha sido transcodificado para copiarlo a S3? gracias de nuevo – undefined

+0

Así que usted tiene un proceso que está haciendo la transcodificación, ¿no puede el mismo proceso simplemente ponerlo en S3 cuando haya terminado con él? Tal vez cuando la aplicación web inicie el proceso de transcodificación, pueda pasar un argumento que diga al proceso de transcodificación en qué parte de S3 ponerlo. – teeks99

+0

Recuerde que FFMPEG puede tomar datos de STDIN y enviarlos a STDOUT. ¡No olvide mirar todas las opciones de línea de comando de transmisión disponibles! – jduncanator

1

Puede consultar Piper. Es una versión de código abierto de un producto que originalmente construí para una gran compañía de entretenimiento para manejar su transcodificación de video a escala.

Cuestiones relacionadas