O blog da AWS

Extração de frames em canais ao vivo

Por Cassiano Ricardo Tesseroli, Solutions Architect, AWS Brasil
Joāo Seike, Solutions Architect, AWS Brasil

 

A extração de frames é uma funcionalidade essencial para qualquer aplicativo que tem por objetivo analisar conteúdos de vídeo. Comumente obtemos dados relevantes do conteúdo utilizando ferramentas de IA/ML ou mesmo técnicas de visão computacional. Um frequente caso de utilização destes dados (conhecidos como metadados) é a busca por: objetos, pessoas ou lugares que em algum momento são exibidos no video. Por exemplo: Encontre todos os filmes em que o ator “The Rock” participou. Ou todas as séries que exibiram carros de corrida.

 

O que é um frame (Quadro)?

[1]Quando um vídeo é exibido, cada frame pisca na tela por um curto período de tempo e é imediatamente substituído pelo próximo. A persistência da visão mescla os quadros, produzindo a ilusão de uma imagem em movimento.

[2]O conceito de FPS “Frame per second” consiste na quantidade de frames (quadros) exibidos em apenas um 1 segundo. Exemplo da imagem abaixo:

Quando executamos a extração de frames, podemos configurar o número de imagens que serão extraídas por segundo.
Na AWS podemos extrair  frames de distintas formas, neste blog vamos explorar a utilização dos serviços gerenciados AWS Elemental MediaLive (extração) e Amazon Simple Storage Service (Amazon S3)

 

AWS Elemental MediaLive

O AWS Elemental MediaLive é um serviço de processamento de vídeo ao vivo de nível de transmissão. O serviço permite criar streams de vídeo de alta qualidade para transmissão de TV e entrega a dispositivos multitela conectados à Internet, como TVs conectadas, tablets, smartphones e decodificadores. O serviço funciona codificando os streams de vídeo ao vivo em tempo real, processando uma origem de vídeo ao vivo com tamanho maior e compactando-a em versões menores para distribuição aos visualizadores.

 

Amazon S3

O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos que oferece escalabilidade, disponibilidade de dados, segurança e performance líderes do setor. Isso significa que clientes de todos os tamanhos e setores podem usá-lo para armazenar e proteger qualquer volume de dados em vários casos de uso, como data lakes, sites, aplicações para dispositivos móveis, backup e restauração, arquivamento, aplicações empresariais, dispositivos IoT e análises de big data.

 

Passos de Implementação

O primeiro passo para iniciar a configuração é criar um bucket que utilizaremos como saída (Output) onde serão armazenado os quadros extraídos em formato de imagem (JPEG) armazenados no Amazon S3, posteriormente criaremos os canal no AWS Elemental MediaLive.

Passo-a-passo:

  1. Criação do bucket para armazenar os frames extraídos: na console da AWS utilize a busca para encontrar o Amazon S3, clique no link “S3” para abrir a pagina do serviço.
    Em seguida, na direita da tela pressione o botão “Create Bucket”.
    Digite o nome do bucket depois clique no botão “Create Bucket” localizado no fim da página, salve o nome do bucket para uso posterior.

    Obs.: O nome do bucket deve ser único e possuir entre 3 e 63 caracteres, a lista completa das regras esta no link.

    2. Após a criação do bucket, agora utilize a caixa de busca localizar o “MediaLive”:

 

  1. Clique em “Create Channel”.4. Adicione um nome para canal e escolha a role de execução (IAM role), caso não possua uma pré-existente utilize a opção “Create role from template” e será criada uma nova role com as permissões necessárias.

5. No menu da esquerda clique em “ADD” na opção “Input Attachments” e na sequencia “Create Input”.

  1. Adicione um nome para a entrada “Input” e selecione a opção “HLS”, depois no campo de texto “Input Source A” cole a URL que utilizaremos de teste:URL para teste:
    https://s3.amazonaws.com/mediaimmersion/medialive/vod/vanlife.m3u8

 

  1. Altere o valor do combo “Input class” para SINGLE_PIPELINE e pressione o botão “Create” localizado no final da página.Obs.: A opção de SINGLE_PIPELINE é utilizada quando não possuímos redundância do conteúdo enviado para o AWS Elemental MediaLive, nos casos de uso de produção, a recomendação é a opção: STANDARD_PIPELINE.

 

8. Na próxima etapa devemos anexar a entrada ao canal, selecione a entrada no combo “Input”, digite um nome no campo “Attachment Name” e pressione confirme “Confirm”.

 

  1. Nas configurações de entrada vamos modificar o valor do campo “Source End Behavior” para reproduzir o vídeo infinitamente (loop).

 

  1. No menu a direita adicione um Output:

 

 

  1. Selecione a opção “Frame Capture” e pressione o botão “Confirm”

 

 

 

  1. Agora vamos configurar as opções da captura de quadros (frames), preencha o campo “URL” com a URL do bucket criado no passo 01 e uma literal de sua escolha, no exemplo abaixo foi utilizado a palavra “quadros”, e clique em “Settings” na parte inferior da tela.

 

  1. Escolha o tamanho do quadro (“Width,Height)” que vamos extrair e periodicidade da extração (Capture Inverval, Capture Interval Units), no exemplo abaixo será capturado um quadro (frame) por Segundo
  2. Selecione a opção “Archive” e pressione “Confirm”.Adicionalmente, para utilizar a funcionalidade de captura de frames no AWS MediaLive obrigatoriamente devemos possuir um conteúdo sendo transmitido (LiveGroup). Vamos simular esse requisito utilizando a opção de saída (Output) “Archive” que irá salvar o conteúdo da entrada em um bucket S3, adicione uma nova saída (output) pressionando o botão “ADD” na parte esquerda da tela.

Selecione a opção “Archive” e pressione “Confirm”.

 

  1. Insira a URL do bucket criado no passo 01 junto com uma literal de sua escolha, no exemplo abaixo foi utilizado a letra “a”.

 

 

  1. Finalmente utilize a opção “Create Channel” na esquerda para criação do canal

  1. Agora vamos iniciar o canal, pressione o botão “Start”

  1. Depois de alguns segundos você deve verificar se o canal foi iniciado corretamente, o campo “State” ao lado do canal deve estar como “Running”

  1. No Amazon S3 já podemos encontrar os quadros (frames) extraídos.

 

Conclusão

Podemos facilmente capturar e armazenar os frames (quadros) de um conteúdo ao vivo apenas adicionando uma nova saída (output) no canal desejado. Com os frames (quadros) armazenados no Amazon S3 a utilização de outros serviços da AWS como o Amazon Rekognition ou Amazon Sagemaker se torna mais simples, uma vez que são nativamente integrados.

 

Limpeza do ambiente

Para evitar cobranças futuras, lembre-se de desligar os recursos que criamos:

  1. No canto superior direito da pagina do MediaLive, clique em “Stop”

2. Depois disso, em “Channel Actions” selecione “Delete channel”:

 

  1. No S3, selecione o bucket criado no inicio desse blog e no canto superior direito, clique em “Empty”.

Confirme o esvaziamento do bucket, digite “permanently delete” no campo de texto e clique em “Empty”.

4. No S3, selecione o bucket criado no inicio desse blog e no canto superior direito, clique em “Delete”:

Confirme a deleção digitando o nome do bucket no campo de texto e logo em seguida clique em “Delete bucket”.

 

Referências:

[1]E. G. Richardson, Iain (2003). H.264 and MPEG-4 Video Compression: Video Coding for Next-generation Multimedia. Chichester: John Wiley & Sons Ltd.

[2] James Davis (1986), “Humans perceive flicker artefacts at 500 Hz”, Sci. Rep.5: 7861

 

 


Sobre os autores

Cassiano Ricardo Tesseroli é Arquiteto de Soluçōes com mais de 15 anos de experiência no desenvolvimento de soluções de negócios, especialista em cargas de trabalho de Media voltadas para internet.

 

 

 

 

Joāo Seike é Arquiteto de Soluções da AWS, tem se especializado em workloads de mídia, serverless e atua auxiliando e apoiando clientes em sua jornada na nuvem.