Pular para o conteúdo
Arquitetura

Construindo uma Pipeline de Video Encoding

Como foi arquitetado do zero um sistema completo de processamento de vídeos com encoding adaptativo, notificações em tempo real, uso de filas e deploy eficiente na nuvem.

Por que isso é importante

Construindo uma Pipeline de Video Encoding. Como foi arquitetado do zero um sistema completo de processamento de vídeos com encoding adaptativo, notificações em tempo real, uso de filas e deploy eficiente na nuvem.

O desafio: codificar vídeos de forma eficiente e escalável

Se você já subiu um vídeo no YouTube e viu ele "processando", está testemunhando a
complexidade do encoding adaptativo — uma etapa fundamental que transforma vídeos em
múltiplas qualidades (240p, 480p, 720p, 1080p) para entregar a melhor versão possível ao
usuário dependendo da conexão.

Escolhendo ferramentas e decisões arquiteturais

O projeto começou com decisões críticas, como optar por Vite em vez de Next para o
dashboard de controle, e adotar a biblioteca Effect em TypeScript, que traz um modelo
funcional avançado para manipulação de efeitos, tratamento de erros e dependências.

Pipeline de encoding: do SQS ao storage final

A pipeline inicia com mensagens enviadas ao SQS da AWS contendo a URL do vídeo. Um
worker em Node consome a fila, inicia o encoding para quatro resoluções e, ao finalizar
cada uma, usa SNS para publicar eventos de progresso e ativa o upload automático para o
Cloudflare R2.

Streaming adaptativo com HLS

Ao final do processo, uma playlist HLS (Master Playlist) é gerada, vinculando todos os
segmentos criados. Isso permite que players modernos ajustem dinamicamente a resolução
do vídeo conforme a largura de banda do usuário.

Atenção

Encoding é extremamente pesado em CPU e disco. Garantir concorrência entre operações
de upload e conversão maximiza aproveitamento de recursos sem desperdiçar ciclos
ociosos.

Concorrência: processando múltiplas resoluções em paralelo

Para otimizar tempo, o script processa duas resoluções simultaneamente. Enquanto o 240p
é convertido e enviado para o R2, o 480p é processado em paralelo, e assim por diante.
Dessa forma, o CPU e o upload são aproveitados ao máximo.

Monitoramento técnico com tracing

Todo o processo implementa tracing granular que alimenta uma ferramenta como o Jaeger.
Com isso é possível visualizar cada etapa do processo, incluindo tempos precisos de
encoding, geração de thumbnails e upload para storage.

Notificações em tempo real com SNS

O SNS da AWS é integrado para enviar notificações de progresso ao sistema principal. O
usuário final consegue acompanhar os 20%, 40%, 60% do encoding até o processo atingir
100% com a playlist e thumbnails gerados.

Atenção

Usar SNS ou Websockets de forma acertada evita over-fetching no front-end, mantendo a
UX real-time fluida e sem polling desnecessário.

Como funciona o script principal (worker)

O script em Node lê mensagens do SQS, executa o ProcessEncode usando Effect TS, que lida
elegantemente com efeitos e erros. O processamento internamente utiliza um banco de
dados em memória (Map) apenas para simulação neste estágio local.

Effect TS: tipagem avançada para consistência total

Effect traz segurança de execução e garante lidarmos com todos os erros que possam
surgir. Se uma fila falta, o processador quebra imediatamente e você é alertado em tempo
de desenvolvimento.

Atenção

Sem tratar todos os erros possíveis, sua pipeline poderá travar silenciosamente,
desperdiçando ciclos e aumentando tempo de processamento.

Geração e upload automático de thumbnails

Ao final do encoding, quatro miniaturas são geradas do arquivo final. Essas thumbnails
são enviadas ao Cloudflare R2 para uso imediato no frontend do SaaS, exibindo sugestões
visuais mesmo antes da conversão total.

Gerando a Master Playlist final em HLS

A playlist é o arquivo central que conecta todos os segmentos para cada resolução. É ela
que players como o do YouTube ou JWPlayer usam para realizar streaming adaptativo.

Atenção

Com a Master Playlist corretamente estruturada, qualquer player compatível conseguirá
trocar de qualidade sem interferência do usuário final.

Hospedando de forma custo-eficiente na AWS

O encoding roda em instâncias sob demanda específicas, não requer servidores contínuos.
Usando filas desacopladas e serviços como R2 e SNS, esse sistema suporta dezenas de
vídeos com baixo custo e excelente performance.

O maior desafio: escalar sem gastar demais

O objetivo foi evitar dependência de software de terceiros caros e ganhar controle
total. Com uma arquitetura baseada nas primitives da AWS, é possível balancear
escalabilidade, resiliência e baixo custo.

Testando localmente antes do deploy

O script pode ser testado manualmente com o comando npm run manual. Ele simula um job
completo de encoding com vídeo pré-definido, essencial para inspeção de logs e ajustes
no processo.

Próximos passos: abrir o código?

No momento, o projeto ainda é privado, mas pode ser aberto no futuro baseado no
interesse da comunidade. Deixe um comentário indicando se isso seria útil no seu stack.

Checklist de Implementação

  • Configurou fila SQS para ingestão de vídeos
  • Implementou worker para processar tarefas de encoding
  • Realizou encoding adaptativo e geração de thumbnails
  • Publicou notificações via SNS
  • Criou playlist HLS final
  • Fez deploy escalável na AWS com controle de custos

Perguntas frequentes

Como funciona o script principal (worker)

O script em Node lê mensagens do SQS, executa o ProcessEncode usando Effect TS, que lida elegantemente com efeitos e erros. O processamento internamente utiliza um banco de dados em memória (Map) apenas para simulação neste estágio local.

Próximos passos: abrir o código?

No momento, o projeto ainda é privado, mas pode ser aberto no futuro baseado no interesse da comunidade. Deixe um comentário indicando se isso seria útil no seu stack.