Crie um pipeline de processamento de vídeo usando o Amazon Kinesis Video AWS Streams e o Fargate - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Crie um pipeline de processamento de vídeo usando o Amazon Kinesis Video AWS Streams e o Fargate

Criado por Piotr Chotkowski () e Pushparaju Thangavel () AWS AWS

Ambiente: PoC ou piloto

Tecnologias: análise; serviços de mídia

AWSserviços: AWS Fargate; Amazon Kinesis; Amazon S3

Resumo

Esse padrão demonstra como usar o Amazon Kinesis Video Streams e o AWSFargate para extrair quadros de um stream de vídeo e armazená-los como arquivos de imagem para processamento adicional no Amazon Simple Storage Service (Amazon S3). 

O padrão fornece um aplicativo de amostra na forma de um projeto Java Maven. Esse aplicativo define a AWS infraestrutura usando o AWSCloud Development Kit (AWSCDK). Tanto a lógica de processamento de quadros quanto as definições de infraestrutura são escritas na linguagem de programação Java. Você pode usar esse aplicativo de amostra como base para desenvolver seu próprio pipeline de processamento de vídeo em tempo real ou para criar a etapa de pré-processamento de vídeo de um pipeline de machine learning. 

Pré-requisitos e limitações

Pré-requisitos

Limitações

Esse padrão serve como uma prova de conceito ou como base para um maior desenvolvimento. Ele não deve ser usado na sua forma atual para implantações de produção.

Versões do produto

Arquitetura

Pilha de tecnologias de destino

  • Amazon Kinesis Video Streams

  • AWSTarefa de Fargate

  • Fila do Amazon Simple Queue Service (AmazonSQS)

  • Bucket do Amazon S3

Arquitetura de destino

Arquitetura para usar o Kinesis Video Streams e o Fargate para criar um pipeline de processamento de vídeo.

O usuário cria um stream de vídeo do Kinesis, carrega um vídeo e envia uma JSON mensagem que contém detalhes sobre o stream de vídeo de entrada do Kinesis e o bucket S3 de saída para uma fila. SQS AWSFargate, que está executando o aplicativo principal em um contêiner, retira a mensagem da SQS fila e começa a extrair os quadros. Cada quadro é salvo em um arquivo de imagem e armazenado no bucket S3 de destino.

Automação e escala

O aplicativo de amostra pode ser escalado horizontal e verticalmente em uma única região. AWS O escalonamento horizontal pode ser obtido aumentando o número de tarefas implantadas do Fargate AWS que são lidas da fila. SQS O dimensionamento vertical pode ser obtido aumentando o número de segmentos de divisão de quadros e publicação de imagens no aplicativo. Essas configurações são passadas como variáveis de ambiente para o aplicativo na definição do QueueProcessingFargateServicerecurso no AWSCDK. Devido à natureza da implantação do AWS CDK stack, você pode implantar esse aplicativo em várias AWS regiões e contas sem nenhum esforço adicional.

Ferramentas

Ferramentas

  • AWSCDKé uma estrutura de desenvolvimento de software para definir sua infraestrutura e recursos de nuvem usando linguagens de programação como TypeScript, Python JavaScript, Java e C#/.Net.

  • O Amazon Kinesis Video Streams é um serviço AWS totalmente gerenciado que você pode usar para transmitir vídeo ao vivo de dispositivos para a nuvem ou criar aplicativos AWS para processamento de vídeo em tempo real ou análise de vídeo orientada por lotes.

  • AWSO Fargate é um mecanismo de computação sem servidor para contêineres. O Fargate elimina a necessidade de provisionar e gerenciar servidores e permite que você se concentre no desenvolvimento de seus aplicativos.

  • O Amazon S3 é um serviço de armazenamento de objetos que oferece escalabilidade, disponibilidade de dados, segurança e desempenho.

  • SQSA Amazon é um serviço de enfileiramento de mensagens totalmente gerenciado que permite separar e escalar microsserviços, sistemas distribuídos e aplicativos sem servidor.

Código

  • Um arquivo .zip do projeto de aplicativo de amostra (frame-splitter-code.zip) está anexado.

Épicos

TarefaDescriçãoHabilidades necessárias

Inicie o daemon do Docker.

Inicie o daemon do Docker em seu sistema local. AWSCDKEle usa o Docker para criar a imagem usada na tarefa do AWS Fargate. Você deve executar o Docker antes de prosseguir para a próxima etapa.

Desenvolvedor, DevOps engenheiro

Crie o projeto.

Baixe o aplicativo de amostra frame-splitter-code (anexado) e extraia seu conteúdo em uma pasta na sua máquina local. Antes de implantar a infraestrutura, você precisa criar o projeto Java Maven. Em um prompt de comando, navegue até o diretório raiz do projeto e crie o projeto executando o comando: 

mvn clean install
Desenvolvedor, DevOps engenheiro

Inicialize o. AWS CDK

(Somente para AWS CDK usuários iniciantes) Se for a primeira vez que você estiver usando o AWSCDK, talvez seja necessário inicializar o ambiente executando o AWS CLI comando:

cdk bootstrap --profile "$AWS_PROFILE_NAME"

onde $AWS_PROFILE_NAME contém o nome do AWS perfil a partir de suas AWS credenciais. Ou você pode remover esse parâmetro para usar o perfil padrão. Para obter mais informações, consulte a AWSCDKdocumentação.

Desenvolvedor, DevOps engenheiro

Implante a AWS CDK pilha.

Nesta etapa, você cria os recursos de infraestrutura necessários (SQSfila, bucket do S3, definição de tarefa do AWS Fargate) em sua AWS conta, cria a imagem do Docker necessária para a tarefa do Fargate e implanta o AWS aplicativo. Em um prompt de comando, navegue até o diretório raiz do projeto e execute o comando:

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

onde $AWS_PROFILE_NAME contém o nome do AWS perfil a partir de suas AWS credenciais. Ou você pode remover esse parâmetro para usar o perfil padrão. Confirme a implantação. Observe os valores QueueUrle do Bucket na saída da CDK implantação; você precisará deles em etapas posteriores. AWSCDKIsso cria os ativos, os carrega em sua AWS conta e cria todos os recursos de infraestrutura. Você pode observar o processo de criação de recursos no AWS CloudFormation console. Para obter mais informações, consulte a AWS CloudFormation documentação e a AWSCDKdocumentação.

Desenvolvedor, DevOps engenheiro

Crie um streaming de vídeo.

Nesta etapa, você cria um stream de vídeo do Kinesis que servirá como stream de entrada para processamento de vídeo. Verifique se você tem o AWS CLI instalado e configurado. No AWSCLI, execute:

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

where $AWS_PROFILE_NAME contém o nome do AWS perfil de suas AWS credenciais (ou remova esse parâmetro para usar o perfil padrão) e $STREAM_NAME é qualquer nome de stream válido. 

Como alternativa, você pode criar um stream de vídeo usando o console do Kinesis seguindo as etapas na documentação do Kinesis Video Streams. Anote o nome do AWS recurso (ARN) do fluxo criado; você precisará dele mais tarde.

Desenvolvedor, DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Faça o upload do vídeo para o stream.

Na pasta do projeto do aplicativo frame-splitter-code de amostra, abra o arquivo ProcessingTaskTest.java na pasta src/test/java/amazon/awscdk/examples/splitter. Substitua as variáveis profileName  e streamName pelos valores que você usou nas etapas anteriores. Para fazer o upload do vídeo de exemplo para o stream de vídeo do Kinesis que você criou na etapa anterior, execute:  

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

Como alternativa, você pode enviar seu vídeo usando um dos métodos descritos na documentação do Kinesis Video Streams.

Desenvolvedor, DevOps engenheiro

Inicie o processamento de vídeo.

Agora que você enviou um vídeo para o stream de vídeo do Kinesis, pode começar a processá-lo. Para iniciar a lógica de processamento, você precisa enviar uma mensagem com detalhes para a SQS fila AWS CDK criada durante a implantação. Para enviar uma mensagem usando o AWSCLI, execute:

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

where $AWS_PROFILE_NAME contém o nome do AWS perfil de suas AWS credenciais (remova esse parâmetro para usar o perfil padrão), QUEUE_URL é o QueueUrlvalor da AWS CDK saída e MESSAGE é uma JSON string no seguinte formato: 

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

onde STREAM_ARN é o ARN do stream de vídeo que você criou em uma etapa anterior e BUCKET_NAME é o valor do Bucket da AWS CDK saída. 

O envio dessa mensagem inicia o processamento do vídeo. Como alternativa, você pode enviar uma mensagem usando o SQS console da Amazon, conforme descrito na SQSdocumentação da Amazon.

Desenvolvedor, DevOps engenheiro

Visualize imagens dos quadros de vídeo.

Você pode ver as imagens resultantes no bucket de saída do S3, s3://BUCKET_NAME/test-output onde BUCKET_NAME está o valor do bucket da AWS CDK saída.

Desenvolvedor, DevOps engenheiro

Recursos relacionados

Mais informações

Escolhendo um IDE

Recomendamos que você use seu Java favorito IDE para criar e explorar esse projeto.  

Limpeza

Depois de concluir a execução deste exemplo, remova todos os recursos implantados para evitar custos adicionais de AWS infraestrutura. 

Para remover a infraestrutura e o stream de vídeo, use esses dois comandos no AWSCLI:

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

Como alternativa, você pode remover os recursos manualmente usando o AWS CloudFormation console para remover a AWS CloudFormation pilha e o console do Kinesis para remover o stream de vídeo do Kinesis. Observe que isso cdk destroy não remove o bucket S3 de saída nem as imagens nos repositórios do Amazon Elastic Container Registry (AmazonECR) (aws-cdk/assets). Você precisa removê-los manualmente.

Anexos

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: attachment.zip