Tecnologia Progressive Streaming, ou como assistir a vídeos em 4K na rede, sem frisos



Hoje, ninguém pode se surpreender com a velocidade da Internet a 100 Mbps, mas há um problema em como usá-lo. Todas as operações básicas não carregam totalmente a rede. Ao mesmo tempo, os formatos pesados ​​de áudio e vídeo de 4k-8k que você deseja assistir online são mais populares. E, olhando a alta velocidade da Internet, surge uma pergunta lógica - por que não? Como dominar a velocidade total fornecida pelo provedor? Tanto no lado do cliente quanto no lado do serviço. Considere todos esses problemas no artigo.

Fiz um produto de software realmente bom e quero contar com mais detalhes como tudo está organizado lá. Existem muitas novas tecnologias. Talvez porque ninguém tenha inventado nada nesse setor há muito tempo, e chegou a hora. Este artigo não é apenas para desenvolvedores, mas também para pessoas comuns. Tentei explicar tudo da maneira mais simples possível.

1. Vamos começar com os fundamentos básicos das tecnologias atuais de transferência de dados.
Existe uma grande lacuna no conhecimento de muitas pessoas sobre algoritmos de transferência de dados em alta velocidade - mais de 10 Mbit / s ... Vamos preencher essas lacunas:

Espaço # 1. O problema é que agora a totalidade das tecnologias de transmissão por rádio está focada na transmissão contínua de dados, como o melhor cenário.

Tudo o que é transmitido via wi-fi \ 3G \ 4G e até por cabo será transmitido mais rapidamente se a transmissão for constante, mesmo a uma velocidade menor que a máxima. Isso será muito mais rápido do que transmitir intermitentemente, mas na velocidade máxima.

Razões:

  • para retomar a comunicação, mais informações de serviço são adicionadas ao tráfego;
  • ao retomar a comunicação, o servidor pode diminuir a classificação do cliente e fornecer dados a uma velocidade mais baixa (possivelmente devido à aparência de outros clientes), ou não. Mesmo em uma rede wi-fi doméstica, o roteador pode diminuir a classificação, por exemplo, devido a um aspirador wi-fi. I.e. isso se aplica a todas as redes em que existem mais de 2 clientes. Em geral, quase para todos :-)

Espaço # 2. Ao copiar dados, qualquer programa usa um tipo de "bloco" que extrai dados da origem e os transfere para o destino. Portanto, esse intervalo, dependendo da taxa de transferência de dados, deve ter tamanhos diferentes . É fácil de entender: se você colher um balde de água com uma colher de chá, levará muito mais tempo do que colher uma caneca.

Espaço # 3. Para aumentar a velocidade do download de dados pela rede, a RAM deve ser usada. Os menores milissegundos de atraso ao gravar os dados recebidos são despejados em segundos, minutos e horas. Para impedir que isso aconteça, você precisa gravar os dados primeiro na RAM e, em seguida, em um "balde" mais volumoso em uma mídia permanente (disco rígido). Caso contrário, a velocidade de transferência de dados cairá drasticamente.

Isso basta para copiar o arquivo.

2. Essas lacunas são apenas a ponta do iceberg. Com a transferência normal de arquivos, isso é suficiente, mas e se o nosso arquivo for multimídia e precisarmos começar a reproduzi-lo online. Um arquivo multimídia moderno não pode se encaixar completamente na RAM; portanto, você deve salvá-lo em disco.

A melhor estratégia é construída a partir dos itens acima:

  • o carregamento de dados deve ocorrer independentemente da reprodução, continuamente;
  • para garantir a rebobinagem, é necessário criar outro fluxo de carregamento de dados;
  • para superar o friso na inicialização, devido ao recebimento de dados técnicos (codecs, etc.), é necessário pré-carregar. Empiricamente, encontrei a fórmula: o tamanho do arquivo inteiro é * 0,002 ou 0,2%.

Isso é suficiente para reproduzir arquivos Flac.

3. Acontece que, para o streaming on-line, que usará racional e totalmente o nosso canal de comunicação, você precisa de RAM e espaço em disco. Sem isso, o canal não será totalmente utilizado.

E aqui começa a ramificação dos algoritmos de carregamento de dados! Sem detalhes técnicos, darei a eles em um volume aproximado:

  • para que os dados não sejam baixados duas vezes, é necessário fazer uma colisão de fluxos. I.e. se começamos a pista e rapidamente voltamos para o meio, o primeiro fluxo, chegando ao meio, deve interromper seu trabalho.
  • para que os dados não sejam baixados duas vezes, um fluxo não deve ser criado se os dados já estiverem carregados.
  • Para reprodução normal, é necessária uma lógica complexa de interação entre o fluxo do player e os fluxos que baixam dados.

Fiz tudo isso e um pouco mais. Acabou sendo absolutamente fabuloso. Os dados voam e a reprodução não é interrompida. Os arquivos FLAC foram baixados completamente em 1-3 segundos de reprodução. E isso foi suficiente para reproduzir vídeo em Full HD.

4. O problema é que nossos arquivos de mídia são muito diferentes em tamanho. E com filmes em Blu-ray de 4k, que pesam entre 80 e 120 GB, nada funcionou. O jogador criou 15 threads no início e todos compartilharam a velocidade, o que, é claro, não era suficiente para o thread principal, que o jogador estava esperando. Os dados foram carregados na velocidade máxima, sim ... eles baixaram o canal completo, mas o vídeo em 4k travou e foi reproduzido mais lentamente que a apresentação de slides. Acontece que muitos fluxos são prejudiciais para o vídeo em 4k, mas onde fica a fronteira após a qual os benefícios no Full HD se transformaram em dano em 4k ?!

Como resultado, tudo descansou na velocidade do canal. Para otimizar threads, você precisa saber duas coisas:

a) A velocidade necessária para a reprodução, calculada: (tamanho / duração do arquivo em segundos) * 8.

b) A velocidade do carregamento de dados pelo fluxo principal com o qual o player está trabalhando atualmente.

Se gerenciamos o carregamento de dados, definitivamente temos a oportunidade de medir a velocidade do download. Agora, cada thread sabia sua velocidade (em Mbps) e isso não impõe custos adicionais ao desempenho. Certifique-se de identificar em qual stream o player está trabalhando. Tudo começa no modo usual, multiencadeado. Porém, assim que o player calcula a duração do arquivo de mídia em segundos e transmite esses dados, todos os fluxos obtêm uma velocidade fixa e necessária para a reprodução. Imediatamente após isso, todos os fluxos (exceto o principal) comparam a velocidade necessária com a velocidade do fluxo principal e, se a velocidade for menor, eles param. Além disso, o encadeamento principal aumenta lentamente sua velocidade e, assim que excede a velocidade necessária duas vezes (como eu fiz), interrompe todos os fluxos secundários da pausa.

De acordo com as observações, depois de algum tempo, a velocidade do fluxo principal cai novamente e todos os fluxos secundários entram em pausa novamente, e assim até que os dados sejam baixados ou a reprodução concluída. Essa estratégia flexível, quando o carregamento de dados é paralelizado e, se necessário, compactado em um fluxo, faz o download completo do canal de comunicação e, ao mesmo tempo, garante o download mais rápido possível dos dados necessários para a reprodução. Essa estratégia funciona igualmente bem em arquivos de 10 MB e 100 GB. Para jogar pela rede sem perda, é impossível encontrar algo melhor. Se você tiver alguma sugestão, terei prazer em discuti-las nos comentários.

Adequado para reproduzir arquivos de mídia de qualquer volume 4k-8k.

A transmissão progressiva é o tipo mais rápido de transmissão ao transmitir dados em sua qualidade original. Para aumentar a taxa de transferência de dados, ele usa RAM e multi-threading. Os dados são carregados de forma assíncrona no fluxo de reprodução, mas com interação ativa com ele. Durante a reprodução, a velocidade de aquisição de dados é medida e o número de fluxos ativos é adaptado ao canal de dados disponível.
Atualmente, no mundo, há uma grande tendência para aumentar o número de vídeos de alta resolução, e a popularidade dos dispositivos para reproduzi-lo está crescendo.


Fonte www.vox.com

O vídeo de taxa de bits em 4k é grande, mas não muito alto. O codec VP9 mais eficiente hoje compacta vídeo em 4K a 15 Mbps. com áudio sai cerca de 15,5. Um filme em Blu-ray de 100 GB tem uma taxa de bits de cerca de 60 Mb / s ... Qualquer pessoa no mundo que queira assistir a vídeos em 4K tem essas velocidades de Internet. Isso significa que vídeos em 4k podem ser assistidos online agora!

Apesar da simplicidade do algoritmo descrito acima, a implementação parece muito complicada. As tecnologias de streaming com deterioração na qualidade do vídeo e do áudio são forçadas a estragar o conteúdo devido à falta de implementação do algoritmo correto de transferência de dados. Suponho que muitas pessoas e empresas tenham (acima) lacunas de conhecimento e, é claro, dificuldades na implementação desse algoritmo. Portanto, ele escreveu um artigo para simplificar o entendimento desse método de streaming.

Será um pouco mais difícil criar esse algoritmo usando direitos autorais, mas em geral também é possível. Ao salvar em disco e ler, é necessário criptografar dados. Parece uma ação inimiga contra o usuário, mas o que fazer. Algumas empresas estão fazendo isso.

Agora, vamos ver as desvantagens do streaming convencional, em comparação com o progressivo:

  • é impossível pré-carregar o próximo arquivo \ para prever e preparar a próxima ação;
  • mesmo com uma desconexão temporária da Internet / interrupções na velocidade, um friso perceptível de som / imagem aparecerá;
  • o canal de comunicação não é totalmente utilizado e metade do tempo de reprodução fica ocioso, no momento em que ainda há muitos dados para carregar;
  • a incapacidade de reproduzir vídeo 4k-8k, mesmo via wi-fi sem frisos. Rajadas constantes de comunicação e saltos de velocidade ao máximo não aguentam, mesmo o wi-fi doméstico durante todo o filme é de 2 horas ou mais;
  • isso impõe uma carga ainda maior ao reproduzir conteúdo em 4K, pois o player precisa manter na RAM de 200 a 300 MB de dados de vídeo (na velocidade necessária de 60 Mb / s). Ao reproduzir um algoritmo de streaming progressivo, isso não é mais necessário, pois a reprodução é de um disco, não de uma rede.

Sob esses pontos, fica claro o que transmitir, como antes, não é mais possível. Obviamente, você pode aumentar a velocidade \ memória \ cache em dez vezes, mas por que, se as velocidades atuais já são suficientes e o problema está nos algoritmos. Algoritmos ruins, mais cedo ou mais tarde, param. Hoje, o streaming progressivo é a única tecnologia que permite assistir de forma estável e confortável filmes em 4K de 100 Gigabytes on-line.

Como exemplo de como a tecnologia funciona, escrevi um aplicativo de multimídia - o media library player. Ele suporta todos os formatos. Para demonstrar os recursos, você precisa executá-lo. Abra o site de demonstração e vá para a árvore de diretórios "Films (TOP) / 4k movies". Lá você pode selecionar qualquer filme e assisti-lo. Para suportar todos os formatos, você deve mudar o módulo do player do ExoPlayer para o VlcPlayer.
Nesse cenário, todos os algoritmos de aquisição de dados acima serão usados. Meu aplicativo suporta os seguintes protocolos: nmdc \ http \ ftp \ samba, bem como a nuvem Mega.nz.

Os arquivos de vídeo 4K com 100 GB são reproduzidos com atrasos mínimos e baixados para a memória na velocidade mais alta possível. Você pode pré-carregar mais dados simplesmente pausando, mas isso geralmente não é necessário. A reprodução é sempre estável, se não estável, a velocidade do canal é próxima da velocidade necessária para a reprodução.

Devido às lacunas descritas acima, a política das maiores empresas não está certa, o que diminui o progresso e muitas vezes impede o uso completo dos dispositivos e canais de comunicação disponíveis.

O aplicativo prevê salvar o cache em mídia externa, mas devido à estranha complicação de acesso à mídia externa do Google, atualmente é suportado principalmente por dispositivos Samsung e Android versão 5.0 ou superior. No futuro, será exibido o suporte completo para mídia USB externa.

Em geral, o algoritmo melhora significativamente a qualidade e a velocidade do download de dados durante o streaming, arquivos pequenos de 30 a 50 MB e grandes de 50 a 120 GB.

Em perspectiva, pode ser usado:

  • para reprodução de alta qualidade de conteúdo de mídia 4k-8k em telefones celulares, televisões e outros dispositivos;
  • em realidade virtual para exibição de cenas volumétricas em alta resolução;
  • em combinação com protocolos ponto a ponto do tipo torrent ;
  • para reprodução de música de alta qualidade em alta resolução em qualquer dispositivo. Testes experimentais mostraram que 2 Mbps de um canal de comunicação instável é suficiente para isso.

Source: https://habr.com/ru/post/pt452766/


All Articles