¿Cuál es la mejor arquitectura para convertir archivos de video cargados?

El problema requiere implementar una arquitectura compleja de un servicio dedicado para la transcodificación de archivos de video en paralelo. La gran idea de implementar el servicio para recibir primero el archivo cargado para procesar, luego comenzará la transcodificación concurrente del archivo de video cargado en el formato / tamaño deseado y, cuando termine, devolverá la respuesta de las URL públicas del archivo transcodificado en JSON o formatos consumibles Ajax similares. . El mejor resultado podría lograrse si el servicio se aloja en otro dominio / host (o un conjunto de, dependiendo de la frecuencia de trabajo esperada) con recursos informáticos adecuados, es decir, CPU y memoria, y accede a través de CORS desde la carga del archivo (envío del trabajo ) dominios. De esa manera, el resto de la aplicación de usuario final no se verá afectada. Además, los archivos transcodificados podrían cargarse directamente en almacenes en la nube como cubos de Amazon que evitarán que las máquinas donde se aloja el servicio de transcodificación se llenen de espacio de almacenamiento y la solución sería más escalable.

Ahora centrémonos en los instrumentos tecnológicos que elegiría para implementar dicho servicio:

1. La parte de carga de archivos en HTML se implementaría utilizando el complemento de carga de archivos jQuery [https://github.com/blueimp/jQuer… que ha incorporado soporte para CORS y navegadores heredados.
2. El servicio se implementaría usando nodejs debido a que es soporte nativo para el manejo de tareas asíncronas. De hecho, recomendaré tomar el servicio de nodo de los ejemplos de jQuery File Upload Plugin y modificarlo / modificarlo en consecuencia.
3. A continuación, utilizaría algunas bibliotecas de nodos (empaquetadas y disponibles como módulos) como async (para el procesamiento paralelo de trabajos), node-fluent-ffmpeg (para facilitar el acceso a ffmpeg desde el nodo JavaScript) y knox (para cargar fácilmente al bucket s3 tan pronto como el proceso sea realizado por un proceso). Si desea seguir este enfoque, encontrará todas estas bibliotecas en el registro npm y podrá instalarlas con los comandos “npm install” con su nombre.

Descargo de responsabilidad: seguramente creo que la implementación seguramente se puede hacer con otros idiomas como go o similar, pero como no tengo experiencia con ellos, no puedo señalar los recursos correctos, pero la idea general debería ser la misma. Además, creo que esto no debe intentarse con lenguajes de script como PHP que no tienen compatibilidad integrada para concurrencia o al menos hilos.

No sé cuántos años tiene tu pregunta. Lo haría bastante simple:

  1. Ya ha solucionado el problema de carga.
  2. Configuraría gearman con un backend persistente (mysql).
  3. Crearía un script de trabajo que se conecta a gearman y acepta trabajos de transcodificación. Un trabajo para cada calidad a la que desea convertir.
  1. Cuando termine un trabajo, actualice su base de datos y registre un valor que diga “El video se puede reproducir”. Agregaría una columna “is_playable” tinyint (1) donde 0 significa no, 1 significa sí.
  • Una vez que tenga un archivo de video, use “ffmpeg -i $ filename” para obtener información sobre el archivo de video, principalmente para asegurarse de que ffmpeg comprenda el formato del archivo de video.
  • Después de verificar que es un video, envíe un trabajo por cada calidad del archivo de video que desee. Asegúrese de que el trabajo de menor calidad se envíe con alta prioridad, y también envíe este trabajo primero. Esto asegura que los videos se puedan reproducir lo antes posible. Además, si se agrega otro trabajo mientras se procesa el primer trabajo, la calidad más baja de ese otro video se convertirá antes que cualquiera de las versiones de mayor calidad para el primer video.
  • Utilicé una configuración similar a esta y pude convertir 3000 videos a una velocidad agregada de aproximadamente 3 segundos por video (videos promedio de 10 minutos) usando máquinas Amazon EC2.

    El cuello de botella era el almacenamiento compartido en el que estaban alojados los videos (NFS en ese momento). Ese cuello de botella ya no existe, por supuesto.

    Con respecto a su pregunta final acerca de notificar al usuario cuando el video está listo usando Ajax: Normalmente, la transcodificación de videos toma al menos el 50% de la duración del video. La solución más simple es dejar que el cliente sondee el servidor cada 15 segundos para ver si la columna “is_playable” se ha vuelto positiva.

    More Interesting

    ¿Cuáles son algunas de las mejores películas y programas de televisión en Netflix?

    ¿La transmisión de video reemplazará totalmente a DVD y Blu-Ray en la próxima década?

    ¿Verán los administradores de red la descarga y transmisión de un archivo de video de la misma manera?

    ¿Cuál es una forma económica de configurar una cámara para mirar a mi cachorro mientras estoy en el trabajo o fuera?

    ¿Por qué la gente descarga películas en lugar de transmitirlas, arriesgando virus?

    ¿Cuál es el mejor sitio para aprender sobre la transmisión en vivo?

    ¿Qué utilizó la tecnología de transmisión de video para la plataforma de cursos en línea utilizada por udemy, coursera y zenius.net para crear contenido de video de almacenamiento rápido?

    ¿Qué servicio de transmisión de video es el más rentable para TV y películas, mientras que tiene una gran selección al mismo tiempo?

    ¿Cómo puedo grabar videos de sitios web como Netflix o Lovefilm?

    ¿Cuáles son algunas de las diferencias entre el negocio de la transmisión de música frente a la transmisión de películas?

    ¿Cuál es la mejor configuración del servidor NAS para mi iMac para transmitir a mi Apple TV y iPad de forma local y remota? Estoy considerando Synology y la aplicación FileBrowser.

    ¿Qué método es mejor, descarga HTTP o transmisión RTMP?

    ¿Dónde puede encontrar películas gratis en línea?

    ¿Es lo mismo descargar y transmitir un archivo de video?

    ¿Cuál es el mejor televisor para comprar para alguien que solo ve Netflix y muestra en DVR?