fluxo de vídeo através de vários servidores

0

Eu tenho um problema peculiar.

O servidor 1A é um servidor com o qual os usuários interagem. Servidores 2B , 2C e 2D armazenam conteúdo de vídeo.

Em um site, uma tag de vídeo html é colocada

<video src="server1adomain.com/videos?video=Gy12C899">

Sempre que esse conteúdo é buscado, um script de back-end no servidor 1A determina em qual servidor (2B, 2C ou 2D) o vídeo é armazenado e busca-o. Vamos dizer que é em 2B. Eu não quero esperar que todo o vídeo seja buscado a partir de 2B e armazenado em 1A servidor, e só depois de todo esse tempo ser enviado para o usuário. Em vez disso, gostaria que um fluxo contínuo estivesse fluindo de 2B para 1A e para o usuário simultaneamente. Dessa forma, o usuário obtém os primeiros quadros do vídeo com o mínimo de atraso.

Qual é a solução padrão para esse problema? Eu olhei para src de vídeos no youtube, e todos parecem ser obtidos do mesmo domínio, então essa abordagem deve ser possível.

    
por sanjihan 28.06.2018 / 21:42

1 resposta

2

Existem várias soluções que são mais ou menos padrão do setor. Eu recomendaria contra a criação de outras soluções hacky para o seu problema.

Primeiro, os grandes sites de fluxo contínuo usam Redes de fornecimento de conteúdo (CDNs), onde o conteúdo real é hospedado. Esses servidores são diferentes dos servidores da Web (que hospedam a página da Web ou scripts) e operam de forma independente; Seu objetivo principal é hospedar o conteúdo de vídeo e armazená-lo mais perto da localização do usuário. O trabalho de seu aplicativo da Web seria substituir o link da fonte de vídeo que aponta para o servidor A com um link direto para o servidor de conteúdo - o que estiver mais próximo do usuário ou o que estiver respondendo mais rápido caso de balanceamento). No caso de seus servidores de segunda camada, você deve configurar um servidor da web neles (como o Nginx) e vincular os vídeos diretamente.

Observe que, quando você inspeciona as solicitações de rede do seu navegador no YouTube, elas usam domínios diferentes. O conteúdo do vídeo vem de uma fonte completamente diferente do site real - é mais provável que seja um servidor perto de você, com quem seu provedor de serviços de Internet tem uma conexão de peering direta.

Certifique-se de que seus vídeos, se forem arquivos MP4, tenham seus átomos MOOV no início do arquivo. Isso diminui o atraso de inicialização, uma vez que o cliente pode começar a reproduzir mesmo se o arquivo inteiro ainda não tiver sido transmitido. Com o ffmpeg, você pode fazer isso adicionando a opção -movflags +faststart durante a codificação (use ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4 para apenas corrigir um arquivo existente). Ou use o programa qt-faststart (ou alguma implementação dele) em um arquivo existente.

A melhor opção seria emparelhar a abordagem CDN com o uso de fluxo adaptável HTTP (DASH ou HLS). Aqui, em vez de uma fonte de vídeo em HTML5 simples que provavelmente é um arquivo grande, você faria o streaming de partes individuais do vídeo. Isso leva a tempos de inicialização mais rápidos e melhor gerenciamento de diferentes larguras de banda do cliente. No entanto, é muito mais complicado configurar do zero. Há, é claro, fornecedores que oferecem soluções de streaming do tipo DASH, em que você só precisa fornecer o vídeo de origem e implementar o player em seu site. Eles cuidarão da codificação e das coisas da CDN. Alguns exemplos são Bitmovin, Encoding.com ou Wowza.

    
por 28.06.2018 / 22:17