Executando verificação de segurança...
Em resposta a [Não disponível]
1

Primeiramente parabéns cara, você começou cedo e está desbravando suas coisas sem medo.

Eu separaria seu projeto "Netflix' em duas etapas e com elas iria estudando e produzindo pequenas provas de conceito, da seguinte forma:

1- Armazenamento dos videos e streaming

Arquivos de vídeo são normalmente arquivos grandes e que podem vir em diversos formatos, dimensões e encodings de áudio e vídeo.

A primeira coisa que você precisa estudar são os formatos mais compatíveis com os diferentes browsers e dispositivos de tela, e baseado nisso, encontrar uma forma de reencodar esses vídeos alguns formatos chave como 1980x1028, 720x480 e 320x240.

O jeito mais simples seria você usar linux e algum programa como o ffmpeg para converter seus videos.

Assim que iniciar a conversão você vai perceber que converter vídeos é uma coisa demorada, que consome processamento, memória e disco, e para cada formato extra adicionado, mais disso tudo é consumido.

Futuramente no seu frontend, vai precisar incluir uma sessão de com o formulário de upload de arquivos, a depender de quem pode fazer isso e já nesse pedacinho que é o upload de arquivos, da para indicar várias coisas para estudar e incrementar suas habilidades.

Da para trabalhar upload de múltiplos arquivos em paralelo, reiniciar upload de um arquivo grande do ponto que falhou, fazer upload rápido de arquivos grandes usando fragmentação e paralelismo, controlar percentual e velocidade de upload pelo usuário, drag and drop dos arquivos, entre outros.

Mas pensando num upload simplese funcional, seu próximo problema é pensar numa estratégia de armazenamento de arquivos.
Cada upload bem sucedido traz um vídeo em seu formato original e que após ser encondado em digamos 4 formatos, serão 5 arquivos diferentes para escrever em disco.

Pensando em alguns usuários em paralelos fazendo uploads você rapidamente pode esgotar um HD grande simples ou sufocar ele com leitura e escrita, comprometendo a performance de todos os outros processos que rodem nela.

Então se você quiser ir a fundo, pode estudar técnicas de armazenamento mais avançadas como por exemplo usar discos redundantes na mesma máquina e quem sabe juntar eles via RAID, distribuir os arquivos em varias máquinas, usar um hardware específico de armazenamento, colocar em nuvem, etc...

Ainda pensando nos múltiplos usuários paralelos, você vai precisar de uma estratégia de fila de processamento em que você coloque os trabalhos de reencode e consiga limitar o consumo de recursos da máquina que irá processar isso, e tenha controle de quem, quando e o que está sendo executado. Existem varias estratégia para isso, mas a maioria pode ser resumida em uma logica de fila que recebe os trabalhos, um ou varios publicadores que adicionam trabalho ao fim da fila e o principal, os trabalhores que retiram o primeiro trabalho disponível e executam.

Nesse momento pode ser uma boa pensar numa estratégia de separar seu sistema em múltiplas máquinas para controlar melhor o consumo de recursos, CPU, memória, disco e também GPU.

Dito isso, cabe tanto estudar padrões de projeto capazes de te ajudar a abstrair alguns aspectos do seu código, quanto estudar ferramentas de façam configuração das máquinas para você como Terraform, Ansible, Puppet, entre outros.

O próximo passo é servir os arquivos reencodados via streaming e aqui a coisa não é tão complexa, basicamente seu servidor web que pode ser Apache, nginx ou outro, que vai precisar saber acessar o arquivo pedido via uma URL e fornecer cabeçalhos HTTP corretos que permitam download de pedaços do vídeo, retentativas do lado do player e cache de pedaços de arquivo, tudo isso respeitando questões de privacidade e permissões de acesso aos arquivos.

Porém servir múltiplos grandes arquivos via web tem varios problemas práticos como:

  1. travar uma maquina devido ao aumento no tempo de leitura dos dados em disco já que a leitura fica menos eficiente a cada novo arquivo solicitado em paralelo
  2. ou esgotar recursos de rede desde consumir o link de upload global do data center que hosteia suas máquinas
  3. ou zerar sua cota de transferência de dados em data centers
  4. ou até mesmo estrangular a capacidade de endereçamento TCP dos equipamentos de rede que trafegam os dados como switches e routers, prejudicando indiretamente outras máquinas como seu banco de dados que pode ficar indisponível porque o switch de rede está congestionado,
  5. ou como vídeos muito lentos em casos onde o acesso vem de local muito distante fisicamente do seu servidor, causando uma experiência ruim ao usuário.

Para esses casos cabe estudar além da estratégia de armazenamento, estratégias de cache de arquivos, servidores proxies e uso maquinas distribuídas geograficamente assim como fazem os serviços de CDN(Content Delivery Network).

Nesse momento já seria interessante estudar serviços de Cloud como AWS, Google, Azure, etc... E entender o que neles é útil. Assim como vale estudar serviços de VPS e tentar criar uma infraestrutura sozinho, só nisso há grandes aprendizados.

Não comentei coisas como banco de dados por se meio básico, mas um bom sistema web vai precisar de queries complexas, então estude SQL além do básico e aplicadas a um bom banco opensource como PostgreSQL, já um banco NoSQL como MongoDB pode ajudar armazenar dados brutos e coisas não normalizadas.

Por último você precisa estruturar seu sistema de modo que ele tenha uma API que forneça dados para o frontend, resolvendo buscas, listando os formatos e também que sirva os dados de configuração também ao seu player de video.

Você pode testar um bom framework de desenvolvimento como Symfony ou Laravel para PHP ou Nest para NodeJS e acelerar sua velocidade de desenvolvimento.

Agora a segunda parte:

2- Frontend e Player de Vídeo

Aqui existe uma ampla variedade de coisas mas com seus conhecimentos em HTML e CSS já dava para fazer um site bacana.

O layout do seu site pode ser kibado de diversas fontes sem muitos problemas autorais já que quase todos são bem semelhantes.

Daria para agregar um valor a seus conhecimentos estudando algum framework frontend como React ou Vue que vão permitir organizar suas interfaces nos moldes mais requisitados do mercado, e pensando que talvez queira um trabalho extra pode se aventurar por Typescript e aprender um pouco de linguagem tipada.

Se ainda assim tiver dificuldades com layoutar tudo, você pode tentar usar algum conjunto de componentes prontos como Material, Bootstrap ou Bulma, que possuem versões já em React e Vue, e já sair usando.

E o principal e estrela do site, vai ser seu player de video.

Você basicamente pode colocar uma tag e ser feliz, mas grande parte da graça está num player customizado com botões, controles e tumbnail como manda o figurino.

Nisso você pode escolher o caminho fácil e chato de usar de escolher um biblioteca de player open source como a video.js que tem quase tudo pronto, ou voce pode escolher o caminho difícil e divertido de fazer seu player do zero, com seu CSS e controlando as coisas via javascript, mexendo diretamente com as web APIs de Video e Áudio.

Seja qual for a estratégia você vai precisar integrar sua API de backend que lista os formatos com seu player e aplicar as URLs dos arquivos para o formato ideal inicial e deixar o usuário trocar caso queira.

Nisso pode haver necessidade de ajustar o servidor web de modo que os headers HTTP sejam corretos e permitam pular entre partes do arquivo, ir e voltar, assim como cache e resumo dos downloads, a depender do funcionamento da biblioteca ou da API de vídeo se for usado diretamente.

Feito tudo isso, creio que tenha um resultado muito próximo a um exibidor de videos famoso.

Mas tenho algums extras de recomendação.

3- Extra extra extra

Um extra para fazer nesse projeto seria coletar thumbnail dos vídeos.

Sabe aquela função de scrollar pelo tempo do vídeo e ver um frame do que tem naquela posição? Pois é, você pode extrair esses frames e salver eles para exibir a medida que o usuário busca com o mouse/dedo na linha do tempo do vídeo.

A solução do ffmpeg serviria também para gerar a imagem das thumbs e deve ser pré-calculada.

Como estratégia você podefinir um número mágico de 50 frames e exibir a cada 2% do tempo de video a barra de progresso ou definir uma constante de 20 frames que é útil em caso de vídeos curtos.

Outro detalhe legal é fornecer formato de vídeos adaptativos como o HLS(HTTP Live Streaming). Esse formato consome mais espaço em disco, precisa de um controle muito fino via javascript para funcionar bem, porém quando programado corretamente, por si só consegue fornecer umas experiências de video única trocando a qualidade do vídeo dinamicamente de acordo com a qualidade da internet de quem assiste, mantendo a fluidez, igual faz a Netflix. Você pode até descartar alguns formatos se resolver adotar esse.

Por último, testar um algoritmo de recomendação de vídeos. É uma boa forma de entrar no mundo das IAs e machine learning é esse, recomendado vídeos.

Existem diversos exemplos de como simular recomendação de vídeo usando desde algoritmos simples de IA como perceptron até toolkits e engines completas, então não vou me detalhar nisso, mas voce pode treinar seu modelo usando databases de filmes ou anime, e se der um bom resultado aplicar o treino usado dados dos vídeos vistos pelos seus usuários.

No mais espero que seja uma jornada interessante e com bons desafios no seu futuro.

Sucesso o/

Carregando publicação patrocinada...
1

Primeiramente, muito obrigado! Vc não só me explicou como me deu umas ideias incríveis como a questão do player do vídeo.

Estou pensando em criar essa plataforma primeiramente sem pagamentos, para qualque um poder acessar, e depois criar a plataforma definitiva.

Muito obrigado pela sua contribuição!

1

É uma excelente opção, tem poucas plataformas privadas disso porque os custos são altos no início.

O maior custo vai ser sempre rede e transferência de dados, já que sem um bom link de internet no servidor você não vai ter sucesso.

Como eu falei, armazenamento é um problema, se você tem um HD de 2TB e um vídeo de 2min hipoteticamente tem 200mb, nesse HD cabem cerca de 10mil vídeos. E a conta cresce conforme vc aumenta seus arquivos de formatos, então seguindo o modelo tradicional precisa de uma solução boa de storage que cresça transparente e a baixo custo.

Pitra solução pros formatos é fazer encoding ao vivo, igual faz o Google e Youtube, que ao receberem os arquivos pre-processam o arquivo para uma versão mais fácil de reencodar, e fazem reencode ao vivo, de acordo com a seleção do usuário e servem o streaming a medida que o encode acontece.

Por fim, faça muitos softwares, eventualmente resolver problemas se torna uma habilidade e as ferramentas são as soluções passadas