🎥 Porque é quase impossível criar uma rede social com vídeos - Daykeeper
Atualmente, sou um estudante de 16 anos, e desde janeiro de 2024, venho desenvolvendo sozinho o DayKeeper, uma rede social com uma proposta diferente: transformar cada dia em uma memória significativa. Inspirada em plataformas como o Twitter e Instagram, os usuários do DayKeeper podem fazer postagens diárias com textos, imagens e vídeos.
Ao longo desse tempo, a ideia passou por várias transformações. Muita coisa mudou: a visão do projeto amadureceu, funcionalidades foram redesenhadas, e o código... bom, o código foi quase todo reescrito várias vezes. Um dos maiores desafios até agora? Suportar uploads de vídeos de forma escalável, segura e barata.
O Ambiente do DayKeeper
Para entender o problema, é preciso antes conhecer o ambiente do projeto:
- Banco de dados: MongoDB
- Armazenamento de arquivos: AWS S3 (imagens e vídeos)
- Moderação de conteúdo: Amazon Rekognition
- Notificações de verificação de vídeo: Amazon SNS (Simple Notification Service)
Claro, além de diversos outras coisas, como nodemailer para emails, passport para login com terceiros, firebase para notificações no aplicativo mobile, etc.
Para entender o processo que a requisição faz quando o usuário vai criar um post, podemos ver essa rota:
router.post(
"/create",
checkTokenMW,
multer(multerConfig("both")).array("files", 5),
handleMulterError,
createMediaDocsMW,
detectInappropriateFileMW,
postValidation,
createPost
)
Ou de forma mais explicada:
checkTokenMW: Garante que o usuário esteja autenticado.multer(...): Middleware para upload de arquivos (imagens ou vídeos).handleMulterError: Trata erros de upload.createMediaDocsMW: Cria documentos na collection medias, separando os arquivos do próprio post.detectInappropriateFileMW: Usa o Rekognition para moderar os arquivos. Imagens são moderadas instantaneamente; vídeos entram em análise assíncrona.postValidation: Valida dados do post.createPost: Cria o post com referências aos arquivos armazenados.
O Problema
1. Estrutura de armazenamento
Originalmente, imagens poderiam estar embutidas nos próprios objetos dos posts. Porém, vídeos exigem um processo assíncrono de moderação. Isso levou à criação de uma estrutura única: todos os arquivos (imagens e vídeos) são agora armazenados em uma collection separada chamada medias, com campos como status: 'pending', public, ou rejected.
2. Tempo de verificação
Enquanto imagens são analisadas em milissegundos, vídeos levam minutos para serem verificados. O sistema envia o vídeo para o Rekognition, aguarda o processamento e, via SNS, recebe um aviso quando a verificação termina. Durante esse tempo, o post permanece pendente.
3. Custos
Esse é o ponto crítico.
- Imagens:
- Custo: U$0.001 por imagem verificada
- 1.000 imagens/dia ≈ U$1/dia = U$30/mês
- Vídeos:
- Custo: U$0.10 por minuto
- 1.000 vídeos de 5 minutos ≈ U$500/mês
- Sem contar múltiplos vídeos por post
- Armazenamento no S3:
- U$0.023 por GB/mês
- PNG 1080x1080 ≈ 500 KB – 5 MB
- Vídeo 1080p (5 Mbps) ≈ 1.5 GB
- U$100/mês em S3 dá para:
- ~4.4 milhões de imagens PNG
- ~2.400 vídeos de 5 minutos
Resultado: Ter vídeos em uma rede social pode custar dezenas ou centenas de vezes mais do que imagens.
Possíveis Soluções
1. Ter fundos ($$$)
A solução mais óbvia, mas menos acessível para quem está começando. Se você tem investidores ou orçamento alto, pode pagar moderação completa de vídeo sem problemas. No meu caso, um estudante de 16 anos sem capital, isso não é viável.
2. Imposição de limites
Estabelecer limites rigorosos pode ser necessário:
- Vídeos de no máximo 3 minutos
- Limite de tamanho (ex: 700 MB)
- Compressão automática de todos os arquivos
- Limitação de uploads diários por usuário
Com essas restrições, é possível reduzir o custo por vídeo e armazenar mais conteúdo no mesmo espaço, tornando a operação mais acessível. Claro que, com isso, podem vir dificuldades, como uma piora na experiência do usuário, então é necessário o cuidado ao fazer essa mudança.
3. Sistema de moderação por confiança (Trust Factor)
Atualmente no DayKeeper, nem todos os arquivos passam obrigatoriamente pelo Rekognition.
-
Trust Factor: Usuários novos têm pontuação baixa e todos seus arquivos são verificados. Com o tempo, se seguirem as diretrizes e não forem banidos, ganham confiança e seus arquivos podem ser postados sem análise automática.
-
Sistema de Reports: Qualquer arquivo suspeito pode ser denunciado. Se for reportado diversas vezes, é analisado novamente, mesmo que tenha passado automaticamente.
-
Administração manual: Administradores podem ver denúncias, banir usuários e moderar conteúdo manualmente.
Junto disso, uma moderação aleatória de arquivos não verificados também irá acontecer constantemente no background, garantindo uma maior segurança no aplicativo.
Também sabemos que um usuário malicioso poderia tentar burlar o sistema de thumbnails (citado acima) então, caso um post receba uma certa quantidade de reports, uma verificação completa do vídeo será feita no background e, caso seja comprovado que o vídeo contém conteúdo impróprio, um banimento será aplicado automaticamente.
4. Verificação parcial de vídeos
Analisar todos os frames de um vídeo é custoso e, em muitos casos, desnecessário. Em vez disso, o DayKeeper verifica apenas alguns frames:
- 2 frames no início
- 2 no meio
- 2 no final
- 2 frames aleatórios
Isso representa cerca de 1 frame a cada 18 segundos em um vídeo de 3 minutos. Caso haja denúncias, o vídeo é re-analisado por completo em segundo plano.
Esses valores também podem variar dependendo do Trust Factor do usuário.
Também utilizar Queue com Redis e BullMQ
Quando fazemos a verificação do vídeo de forma que a aplicação irá criar e verificar thumbnails, precisamos saber que esse processo pode ser demorado e, em um caso com milhares de requisições simultâneas, pode sobrecarregar o servidor.
Junto do sistema de thumbnails, o Daykeeper utiliza uma moderation Queue para criar uma fila de tarefas para a moderação dos vídeos, deixando a aplicação escalável e segura.
5. Compressão de vídeos
Uma das maneiras mais claras de diminuir o custo de armazenamento dos vídeos a fazer com que todos os arquivos passem por um processo de compressão antes de serem enviados ao servidor.
Esse processo permite que vídeos maiores ocupem uma quantidade menor de espaço sem prejudicar sua qualidade, diminuindo muito o custo de armazenamento.
A solução do Daykeeper
A solução do Daykeeper é uma junção do sistema de moderação por confiançao com sistema de administradores e reports, sistema de verificação parcial de vídeos com a fila de moderação e a compressão de arquivos, tudo isso junto da imposição de limites claros para os usuários, como limite de stories, posts e, principalmente, arquivos que um usuário pode postar por dia.
A imposição de limites no Daykeeper também pode abrir espaço para uma inscrição premium dentro do aplicativo. Por mais que essa possa parecer uma prática ruim, ainda em uma rede social, acho mais plausível que outros meios, como venda de informações de usuários ou quantidade excessiva de anúncios, e se feita de maneira que não atrapalhe de forma significativa a experiência de usuários gratuitos, pode ser uma boa opção para a monetização do aplicativo.
Conclusão
Construir uma rede social com suporte a vídeos não é impossível, mas é um desafio real, especialmente para desenvolvedores independentes. Custos, tempo de moderação e complexidade técnica são obstáculos difíceis de ignorar.
No DayKeeper, estamos conseguindo contornar essas limitações com:
- Compressão de arquivos
- Verificação parcial de vídeos
- Sistema de confiança e denúncias
- Moderação humana
Sendo criativo nas soluções e pensando de forma que o aplicativo seja escalável, mesmo um projeto solo pode atingir um nível profissional. A chave está em equilibrar experiência do usuário, segurança e custos, tudo isso enquanto você constrói algo que acredita.
Caso você queira ver mais sobre o Daykeeper, você pode acessar o código aqui ou o nosso website.
Fonte: https://daykeeper.app