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