Arquitectura do YouTube
Arquitectura do YouTube

Origem: link

Uploading

Quando um utilizador pretende carregar um vídeo para o YouTube, o mesmo tem que estar num dos formatos apresentados na tabela exibida em baixo.

Este processo inclui, associar um identificador ao vídeo (VideoID) e criar inúmeras “cópias” do mesmo, tanto com diferentes resoluções, de modo a contornar problemas de largura de banda, como em diferentes formatos, para que seja possível a visualização nos mais diversos dispositivos. Um exemplo ilustrativo é o upload de um vídeo em 1080p, em que são criadas versões com resoluções mais baixas, tais como 720p, 480p e 360p, como também em diferentes formatos, .MP4, 3GPP e WebM. Para além disto, os vídeos são ainda divididos em pequenas partes para contornar alguns problemas que possam surgir aquando da visualização.

As legendas automáticas são criadas também neste momento inicial, usando tecnologia de reconhecimento de voz, através de machine learning. A precisão nem sempre é ideal, todavia o utilizador pode corrigi-las manualmente, criar as suas próprias legendas ou até usufruir das sugestões dos outros utilizadores. Como alternativa é possível carregar um ficheiro de legendas, com um dos formatos apresentados na tabela exibida em baixo, de forma a indicar quando cada linha é exibida, de acordo com códigos de texto e de tempo.

* Sincronizar apenas o texto
** Sincronizar o texto e dar estilo e posicionamento às legendas
*** Sincronizar o texto e dar estilo e posicionamento às legendas para conteúdo televisivo (standards CEA-608 ou EBU-STL)
Armazenamento

Para melhor desempenho e organização, os vídeos e thumbnails, que podem ser 4x superiores ao número de vídeos, são guardados em servidores distintos.

É utilizada uma Content Delivery Network (CDN) ou seja, uma rede de servidores proxy espalhados globalmente, de modo a que o conteúdo seja acedido de forma eficiente e rápida, independentemente da localização do utilizador. Um dos benefícios deste sistema é a possibilidade de os vídeos mais visualizados serem replicados pelos diversos servidores proxy, aumentando assim a probabilidade do mesmo se encontrar próximo de qualquer utilizador. O contrário acontece com os vídeos menos visualizados, que estão guardados em apenas um servidor, o mais próximo da área geográfica onde o mesmo é mais visualizado.

Streaming

No momento em que o utilizador seleciona um vídeo para visualizar, é recebida uma página HTML com informações da localização do servidor encarregue por esse mesmo vídeo.
De seguida o utilizador carrega no botão play e é enviada, para o mesmo servidor, uma mensagem HTTP GET com o identificador do vídeo. Em resposta, o servidor envia uma mensagem HTTP 303 a fim de redirecionar o cliente para os servidores responsáveis pelo streaming do vídeo.

Desta forma é introduzido load balancing no sistema, otimizando o acesso aos servidores onde os vídeos estão armazenados.

Origem: link

Transmissão

Há dois fluxos principais entre o cliente e o YouTube, o primeiro com tempos de conexão mais longos, para a transmissão de pacotes de vídeo, e o segundo com tempos de conexão mais curtos, para controlo da ligação. A fim de garantir que os pacotes chegam ao destino é usado TCP, Transmission Control Protocol.

Devido a algumas deficiências na largura de banda da rede, a reprodução do vídeo poderá ser interrompida. Para minimizar esta situação, os servidores passam a enviar pacotes referentes a uma cópia do vídeo com menos resolução, no entanto quando a situação normaliza ou a largura de banda usada diminuí, o YouTube faz o inverso, ou seja, envia uma cópia do vídeo com mais resolução.

Na transmissão de vídeos em direto, é usado Real Time Streaming Protocol (RTSP), que estabelece e controla sessões de dados entre os servidores e o cliente. Em conjunto com este protocolo, são usados também o Real-time Transport Protocol (RTP), para transportar os dados de áudio e vídeo, e o Real-time Control Protocol (RTCP), para fornecer informações estatísticas, tais como taxa de pacotes perdidos, round-trip time e número de pacotes.

Codificação de Vídeo

Presentemente, o YouTube usa maioritariamente dois codecs para vídeo, o H.264/MPEG-4 AVC e o VP9, dependendo do browser utilizado, como exemplificado nas Imagens abaixo. Todavia o VP9 é cerca de duas vezes mais eficiente que o H.264, razão pela qual ser o preferível pelo YouTube.

Estes têm um número reduzido de variantes, denominados coding profiles, como esquematizado nas tabelas apresentadas em baixo, para que o codificador e o descodificador estejam em sintonia nos recursos que ambos podem manipular. Cada variante possui níveis que indicam o grau de desempenho do descodificador, especificando a resolução máxima da imagem, velocidade dos fotogramas e bitrate máximo que o descodificador pode utilizar. Apenas a última variante de cada codec é que recupera todos os bits da imagem depois da descodificação, ao contrário de todas as outras que acacabam por perder bits, que são irrelevantes para o olho humano.

O número de bits usados para a crominância é variado, podendo ser metade nas linhas e colunas (4:2:0), metade apenas nas linhas (4:2:2) ou igual (4:4:4) ao número de bits usados na luminância. Esta diminuição do número de bits é possível porque o olho humano é menos sensível às cores. Desta forma é possível reduzir o tamanho dos vídeos, causando uma redução substancial da largura de banda usada para o streaming.

Origem: link

Diferença entre alguns codecs
Codificação de Áudio

O ouvido humano não é sensível a todas as frequências auditivas, e devido a este facto são usados codecs lossy, ou seja codecs que eliminam bits referentes às frequências que os humanos não ouvem, conseguindo assim reduzir o tamanho dos dados.

Os codecs de áudio utilizados pelo YouTube para comprimir os dados são o Advanced Audio Coding (AAC) e o Opus, como mostrado nas figuras apresentadas na secção referente à Codificação de Vídeo. Estes complementam os codecs de vídeo H.264 e VP9, respetivamente.

O codec AAC possui uma frequência de amostragem entre 8 kHz e 96 kHz e, permite o uso máximo de 48 canais áudio. Os bitrates comuns para este são 128 kbps, 192 kbps e 256 kbps.
No codec Opus a frequência de amostragem varia entre os 8 kHz e 48 kHz, e pode atingir 255 canais de áudio. Os bitrates do mesmo podem ser variar entre 6 kbps e 510 kbps, ou podem ser constantes.

Metadados

Para além da componente audiovisual, os vídeos também contêm diversas informações relativas aos dados, denominadas de metadados, cujo objetivo é fornecer informações relevantes aos sistemas informáticos.

O uso de metadados no YouTube é extremamente importante uma vez que é através destes que os utilizadores e o sistema obtêm informações relativamente aos vídeos. Dois casos de uso bastante recorrentes são o do título do vídeo, para fins de pesquisa, bem como o do contador de visualizações, para criar rankings.
No YouTube, os metadados podem ser considerados como fixos ou dinâmicos, isto é, variam ou não com tempo, respetivamente

Exemplos de dados fixos são:

  • Identificador do vídeo;
  • Identificador da categoria onde o vídeo se encontra;
  • Tempo de publicação do vídeo, ou tempo a que o vídeo foi tornado público;
  • Duração do vídeo, Título do vídeo;
  • Descrição do vídeo;
  • Título da categoria onde o vídeo se encontra;
  • Identificador do canal;
  • Tempo a que o canal foi criado;
  • Título do canal;
  • Descrição do canal;
  • Identificador do comentário;
  • Tempo de criação de um comentário;
  • Identificador da resposta a um comentário;

Exemplos de dados dinâmicos são:

  • Número de visualizações do vídeo;
  • Número de gostos do vídeo;
  • Número de não gostos do vídeo;
  • Número de comentários do vídeo;
  • Número de gostos de um comentário;
  • Número de não gostos de um comentário;
  • Tempo a que o comentário foi atualizado;
  • Texto do comentário;
  • Número de respostas de um comentário;
  • Número de subscritores de um canal;
  • Número de vídeos de um canal;
  • Número de visualizações de um canal;
  • Tempo visualizado, ou seja, momento atual do vídeo.