amazon ec2 - ¿Mejores prácticas para desarrollar un servidor de transcodificación de video escalable en Amazon Web Services?
amazon-ec2 ffmpeg (4)
Deberías echar un vistazo a Amazon Elastic Transcoder . Resuelve casi todos los problemas que ha mencionado en la pregunta.
¿Qué piensan las personas que son los problemas más importantes cuando se desarrolla una aplicación que permitirá a los usuarios cargar videos e imágenes en un servidor y que FFMPEG los haya transcodificado y almacenados en Amazon S3? Tengo un par de opciones;
1) instale FFMPEG en el mismo servidor que maneja las cargas de archivos, cuando un video se cargue y almacene en la instancia de EC2, llame a FFMPEG para convertirlo cuando haya terminado, escriba el archivo en el contenedor S3 y deseche el original.
¿Qué tan escalable es esto? ¿Qué sucede cuando muchos usuarios suben al mismo tiempo? ¿Cómo manejo múltiples procesos a la vez? ¿Cómo puedo saber cuándo debo iniciar otra instancia y equilibrar la carga de esta configuración?
2) Tener un servidor para procesar cargas (actualizar la base de datos, cambiar el nombre de los archivos, etc.) y un servidor para realizar la transcodificación. Una vez más, ¿cuál es la mejor manera de gestionar múltiples procesos? ¿Debería estar mirando Amazon SQS para esto? ¿Puedo decirle al servidor de transcodificación que obtenga el archivo del servidor de carga o debo copiar el archivo al servidor de transcodificación? Debo almacenar todos los archivos en S3 y SQS puede leer desde allí. Estoy tratando de tener el menor tráfico posible.
Estoy ejecutando una caja de Linux como servidor de carga y ejecuto FFMPEG en esto.
Cualquier consejo sobre las mejores prácticas para configurar dicha configuración sería apreciado. Muchas gracias
En realidad, hay muchos métodos que puedes usar para resolver tu problema:
1-Usando los trabajos cron de ec2, puede ejecutar un script php simple que verificará su base de datos (por ejemplo, cada 30 s) si hay algún video nuevo disponible para transcodificación (puede usar un atributo DB simple para esto, procesado: Booleano)
2-El uso del servicio aws Lambda para detectar cualquier nuevo video subido a su cubeta s3, activar la función lambda para obtener los pulgares y la transcodificación, enviar la salida a su cubeta de destino. Verifique que esta herramienta de @binoculars de @binoculars requiera cierta comprensión de js & gulp, pero es muy práctica y fluida.
3-Usando el transcodificador aws . Es bastante caro. Si te redondean al minuto más cercano, ese es un gran costo cuando tus videos son cortos. Si Netflix o Amazon ejecutan trabajos largos para transcodificar películas, ET tiene mucho más sentido.
No creo que quieras iniciar una nueva instancia de FFMPEG cada vez que alguien suba un archivo para transcodificar. En su lugar, es probable que desee iniciar la misma cantidad de procesos FFMPEG que la cantidad de CPU que tiene, luego encolar los archivos de entrada que desea transcodificar y hacerlos en el orden en que se recibieron. Podría hacer todo esto en una computadora, no creo que el servidor que acepta las cargas y las ponga en la cola necesite mucha CPU y probablemente pueda coexistir bien con los procesos FFMPEG.
Dependiendo de qué tan grande quiera escalar (si desea hacer algo 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 la cola local los datos, podría buscar el SQS. Luego, podría crear la instancia de tantos procesos de transcodificación como necesite, en diferentes máquinas.
El inconveniente de esto, es que deberá transferir los videos sin procesar del servidor que los acepta al servidor que necesita transcodificarlos. Podrías ponerlos en S3 y luego sacarlos de S3, pero no recuerdo la cabeza si tienes que pagar por eso. Alternativamente, 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 en bruto.
Puedes echarle un vistazo a Piper . Es una versión de código abierto de un producto que originalmente creé para que una gran compañía de entretenimiento manejara la transcodificación de video a escala.