🚀 Oferta especial: 60% OFF no CrazyStack - Últimas vagas!Garantir vaga →
Arquitetura

Construindo uma Pipeline de Video Encoding Adaptativo

Descubra 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.

CrazyStack
18 min de leitura
SaaSNodeAWSEncoding

Por que isso é importante

Transmissões de vídeo modernas dependem de codificações eficientes e adaptáveis para exibir conteúdo com qualidade e economia. Criar sua própria pipeline proporciona controle total, redução de custos e expansão de performance em projetos SaaS.

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

Domine React e Node com o CrazyStack

Aprenda técnicas avançadas de React com nosso curso completo