Cree un canal de procesamiento de vídeo con Amazon Kinesis Video Streams AWS y Fargate - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cree un canal de procesamiento de vídeo con Amazon Kinesis Video Streams AWS y Fargate

Creado por Piotr Chotkowski () y Pushparaju Thangavel () AWS AWS

Entorno: PoC o piloto

Tecnologías: análisis; servicios multimedia

AWSservicios: AWS Fargate; Amazon Kinesis; Amazon S3

Resumen

Este patrón muestra cómo utilizar Amazon Kinesis Video Streams y AWSFargate para extraer fotogramas de una transmisión de vídeo y almacenarlos como archivos de imagen para su posterior procesamiento en Amazon Simple Storage Service (Amazon S3)

El patrón proporciona una aplicación de muestra en forma de proyecto Java Maven. Esta aplicación define la AWS infraestructura mediante el AWSCloud Development Kit (AWSCDK). Tanto la lógica de procesamiento de fotogramas como las definiciones de infraestructura están escritas en el lenguaje de programación Java. Puede utilizar esta aplicación de muestra como base para desarrollar su propia canalización de procesamiento de video en tiempo real o para crear la etapa de preprocesamiento de video de una canalización con machine learning. 

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

Este patrón está concebido como prueba de concepto o como base para un desarrollo futuro. No se debe utilizar en su forma actual para implementaciones de producción.

Versiones de producto

Arquitectura

Pila de tecnología de destino

  • Amazon Kinesis Video Streams

  • AWSTarea Fargate

  • cola de Amazon Simple Queue Service (AmazonSQS)

  • Bucket S3 de Amazon

Arquitectura de destino

Arquitectura para usar Kinesis Video Streams y Fargate para crear una canalización de procesamiento de vídeo.

El usuario crea una transmisión de vídeo de Kinesis, carga un vídeo y envía un JSON mensaje con detalles sobre la transmisión de vídeo de Kinesis de entrada y el bucket de S3 de salida a una cola. SQS AWSFargate, que ejecuta la aplicación principal en un contenedor, extrae el mensaje de la SQS cola y comienza a extraer fotogramas. Cada fotograma se guarda en un archivo de imagen y se almacena en el bucket de S3 de destino.

Automatizar y escalar

La aplicación de ejemplo puede escalarse horizontal y verticalmente dentro de una sola región. AWS El escalado horizontal se puede lograr aumentando el número de tareas de AWS Fargate desplegadas que se leen de la SQS cola. El escalado vertical se puede lograr aumentando el número de subprocesos de división de fotogramas y publicación de imágenes en la aplicación. Estos ajustes se transfieren como variables de entorno a la aplicación en la definición del QueueProcessingFargateServicerecurso en el. AWS CDK Debido a la naturaleza de la implementación en AWS CDK pilas, puede implementar esta aplicación en varias AWS regiones y cuentas sin ningún esfuerzo adicional.

Herramientas

Herramientas

  • AWSCDKes un marco de desarrollo de software para definir la infraestructura y los recursos de la nube mediante lenguajes de programación como Python TypeScript JavaScript, Java y C#/.Net.

  • Amazon Kinesis Video Streams es un servicio totalmente AWS gestionado que puede utilizar para transmitir vídeo en directo desde los dispositivos a AWS la nube o crear aplicaciones para el procesamiento de vídeo en tiempo real o el análisis de vídeo orientado a lotes.

  • AWSFargate es un motor de cómputo sin servidor para contenedores. Fargate elimina la necesidad de aprovisionar y administrar servidores y le permite centrarse en el desarrollo de sus aplicaciones.

  • Amazon S3: es un servicio de almacenamiento de objetos de AWS que ofrece escalabilidad, disponibilidad de datos, seguridad y rendimiento.

  • Amazon SQS es un servicio de cola de mensajes totalmente gestionado que le permite desacoplar y escalar microservicios, sistemas distribuidos y aplicaciones sin servidor.

Código

  • Se adjunta un archivo .zip del proyecto de la aplicación de muestra (frame-splitter-code.zip).

Epics

TareaDescripciónHabilidades requeridas

Iniciar el daemon de Docker.

Inicie el daemon de Docker en su sistema local. AWSCDKUtiliza Docker para crear la imagen que se utiliza en la tarea AWS Fargate. Debe ejecutar Docker antes de continuar con el siguiente paso.

Desarrollador, ingeniero DevOps

Compilar el proyecto.

Descargue la aplicación de muestra frame-splitter-code (adjunta) y extraiga su contenido en una carpeta de su máquina local. Antes de poder implementar la infraestructura, debe crear el proyecto Java Maven. En el símbolo del sistema, navegue hasta el directorio raíz del proyecto y compile el proyecto ejecutando el comando: 

mvn clean install
Desarrollador, DevOps ingeniero

Bootstrap el AWSCDK.

(Solo para AWS CDK usuarios primerizos) Si es la primera vez que usa el AWSCDK, puede que tenga que arrancar el entorno ejecutando el comando: AWS CLI

cdk bootstrap --profile "$AWS_PROFILE_NAME"

donde $AWS_PROFILE_NAME contiene el nombre del AWS perfil que aparece en sus credenciales. AWS O bien, puede eliminar este parámetro para utilizar el perfil predeterminado. Para obtener más información, consulte la AWSCDKdocumentación.

Desarrollador, DevOps ingeniero

Despliegue la AWS CDK pila.

En este paso, debe crear los recursos de infraestructura necesarios (SQScola, depósito de S3, definición de tareas de AWS Fargate) en AWS su cuenta, crear la imagen de Docker necesaria para la tarea de AWS Fargate e implementar la aplicación. En el símbolo del sistema, navegue hasta el directorio raíz del proyecto y ejecute el comando:

cdk deploy --profile "$AWS_PROFILE_NAME" --all

donde se encuentra $AWS_PROFILE_NAME el nombre del AWS perfil que aparece en sus credenciales. AWS O bien, puede eliminar este parámetro para utilizar el perfil predeterminado. Confirme la implementación. Anote los valores QueueUrly Bucket del resultado de la CDK implementación; los necesitará en pasos posteriores. AWSCDKCrea los activos, los carga en tu AWS cuenta y crea todos los recursos de infraestructura. Puede observar el proceso de creación de recursos en la AWS CloudFormation consola. Para obtener más información, consulte la AWS CloudFormation documentación y la AWSCDKdocumentación.

Desarrollador, DevOps ingeniero

Cree una transmisión de video.

En este paso, creará una transmisión de video de Kinesis que servirá como transmisión de entrada para el procesamiento de video. Asegúrese de tener el AWS CLI instalado y configurado. En el AWSCLI, ejecute:

aws kinesisvideo --profile "$AWS_PROFILE_NAME" create-stream --stream-name "$STREAM_NAME" --data-retention-in-hours "24"

donde $AWS_PROFILE_NAME contiene el nombre del AWS perfil de sus AWS credenciales (o elimine este parámetro para usar el perfil predeterminado) y $STREAM_NAME es cualquier nombre de transmisión válido. 

Como alternativa, puede crear una transmisión de video mediante la consola de Kinesis siguiendo los pasos indicados en la documentación de Kinesis Video Streams. Anote el nombre del AWS recurso (ARN) de la transmisión creada; lo necesitará más adelante.

Desarrollador, DevOps ingeniero
TareaDescripciónHabilidades requeridas

Subir el video a la transmisión.

En la carpeta del proyecto de la aplicación de muestra frame-splitter-code, abra el archivo ProcessingTaskTest.java en la carpeta src/test/java/amazon/awscdk/examples/splitter. Sustituya las variables profileName y streamName por los valores que utilizó en los pasos anteriores. Para cargar el video de muestra en la transmisión de video de Kinesis que ha creado en el paso anterior, ejecute:  

amazon.awscdk.examples.splitter.ProcessingTaskTest#testExample test

Como alternativa, puede cargar el video mediante uno de los métodos descritos en la documentación de Kinesis Video Streams.

Desarrollador, DevOps ingeniero

Iniciar el procesamiento de video.

Ahora que ha cargado un video a la transmisión de video de Kinesis, puede empezar a procesarlo. Para iniciar la lógica de procesamiento, debe enviar un mensaje con detalles a la SQS cola que se AWS CDK creó durante el despliegue. Para enviar un mensaje mediante el AWSCLI, ejecute:

aws sqs --profile "$AWS_PROFILE_NAME" send-message --queue-url QUEUE_URL --message-body MESSAGE

donde $AWS_PROFILE_NAME contiene el nombre del AWS perfil de sus AWS credenciales (elimine este parámetro para usar el perfil predeterminado), QUEUE_URL es el QueueUrlvalor de la AWS CDK salida y MESSAGE es una JSON cadena con el siguiente formato: 

{ "streamARN": "STREAM_ARN", "bucket": "BUCKET_NAME", "s3Directory": "test-output" }

donde STREAM_ARN es el ARN de la transmisión de vídeo que creó en un paso anterior y BUCKET_NAME es el valor de Bucket de la AWS CDK salida. 

Al enviar este mensaje, se inicia el procesamiento del video. Como alternativa, puedes enviar un mensaje a través de la SQS consola de Amazon, tal y como se describe en la SQSdocumentación de Amazon.

Desarrollador, DevOps ingeniero

Ver imágenes de los fotogramas de video.

Puede ver las imágenes resultantes en el segmento de salida de S3, s3://BUCKET_NAME/test-output donde BUCKET_NAME está el valor del segmento de AWS CDK salida.

Desarrollador, DevOps ingeniero

Recursos relacionados

Información adicional

Elegir un IDE

Le recomendamos que utilice su Java favorito IDE para crear y explorar este proyecto.  

Limpieza

Cuando termine de ejecutar este ejemplo, elimine todos los recursos desplegados para evitar incurrir en costes de AWS infraestructura adicionales. 

Para eliminar la infraestructura y la transmisión de vídeo, utilice estos dos comandos en: AWS CLI

cdk destroy --profile "$AWS_PROFILE_NAME" --all
aws kinesisvideo --profile "$AWS_PROFILE_NAME" delete-stream --stream-arn "$STREAM_ARN"

Como alternativa, puede eliminar los recursos manualmente utilizando la AWS CloudFormation consola para eliminar la AWS CloudFormation pila y la consola Kinesis para eliminar la transmisión de vídeo de Kinesis. Tenga en cuenta que cdk destroy esto no elimina el depósito S3 de salida ni las imágenes de los repositorios de Amazon Elastic Container Registry (AmazonECR) (aws-cdk/assets). Debe eliminarlos manualmente.

Conexiones

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: attachment.zip