DE QUE É FEITA A PLATAFORMA?
Para que uma plataforma deste género seja minimamente funcional e lucrativa, existem certos conceitos que não podem ficar para trás no que toca à conceção da arquitetura, nomeadamente a codificação de vídeo; as tecnologias usadas para o streaming ou Broadcast de conteúdo e também requisitos mínimos para a transmissão.
Nesta secção descrevemos em algum detalhe a arquitetura geral da Twitch de modo que consigamos entender melhor como é que esta plataforma se tornou tão popular e como foi possível construir um sistema que fornece vídeo em streaming de maneira eficiente e que poupe ao máximo a utilização de débito.
Desafios e estatísticas da Twitch
Antes de entrar em detalhe sobre a tecnologia utilizada, é importante notar que muitas das decisões relativas à tecnologia são motivadas pelo tamanho da Twitch e pelo seu rápido crescimento: cerca de 30mil pessoas a fazer streaming simultaneamente; picos de visualização de mais de 2milhões de streams de vídeo ao mesmo tempo; mais de 10mil milhões de mensagens por dia; mais de 50mil pedidos por segundo às web APIs e um crescimento de 800% no número de engenheiros a trabalhar na Twitch.
Isto significa que a Twitch tem de escalar tanto em termos arquiteturais como organizacionais. À medida que os sistemas crescem, os pontos de falhas vão sendo maiores.
Peças Principais
Na Twitch existem 6 peças de tecnologias fundamentais que permitem ter toda esta plataforma em funcionamento.
1 / Sistema de vídeo
2 / Chat
3 / Dados e Web API
4 / Aplicações para Clientes
5 / Infraestrutura de ciências de dados
6 / Ferramentas e infraestrutura operacionais
Como seria de esperar, vamos focar-nos exclusivamente no sistema de vídeo pois é o mais relevante para o âmbito deste artigo. De uma forma genérica, este inclui os seguintes componentes cruciais: ingestão de vídeo – que recebe vídeo via protocolo RTMP (real-time messaging protocol [2]) e envia-o para o sistema de transcodificação – que recebe o stream RTMP e transcodifica-o para múltiplos streams HLS (HTTP live streaming [4]); distribuição e edge – distribui os streams HLS para PoPs (Points of Presence [5]) geograficamente dispostos para que possam fornecer a melhor experiência de streaming e finalmente o VOD (video on demand) – que é o sistema de armazenamento do vídeo a ser transmitido para que possa ser armazenado e fornecido sob demanda.
A figura mostra uma arquitetura muito abstraída do sistema de vídeo da Twitch desde o momento da transmissão do vídeo, até à receção do mesmo.
Para analisar esta arquitetura é necessário estabelecer duas entidades: a Ingestão e a Distribuição e aprofundar os diferentes componentes inerentes a cada uma.
Ingestão
O sistema de ingestão tem 3 camadas diferentes desde a receção até à transcodificação.
O ponto de partida está no lado do streamer/criador de conteúdo que envia vídeo codificado para o Proxy de ingestão da Twitch como mostra a figura ao lado.
Streaming Encoder
O vídeo é codificado em H.264/MPEG-4 AVC através de um de dois encoders suportados pela Twitch: x264 e NVENC (NVIDIA Encoder [6][7]) sendo que o NVENC produz resultados muito superiores (mais qualidade com o mesmo tempo de processamento) quando utilizado numa placa gráfica NVIDIA.
A documentação [8] relativa à qualidade da codificação que a Twitch está disposta a receber refere apenas 4 especificações possíveis:
-
1080p 60fps – débito binário: 6000kbps
-
1080p a 30fps – débito binário: 4500kbps
-
720p a 60fps – débito binário: 4500kbps
-
720p a 30fps. – débito binário: 3000kbps
Para estas especificações também estão tabuladas certas configurações pré:
-
Tramas-B: 2
-
Intervalo de Trama-I (Intra): 2 segundos
-
Controlo de débito: CBR (constant bitrate encoding) [9]
PoP - Ingest Proxy
Após a codificação, como mencionado, o vídeo é enviado através de um PoP para o Ingest Proxy que, consequentemente, reencaminha para o sistema interno de Ingestão.
Quando já no sistema de ingestão (figura acima) o primeiro passo que o sistema segue é autenticar o stream e garantir que existe autorização para processá-lo; de seguida comunica com a base de dados para operações CRUD necessárias e finalmente coloca o stream numa fila para ser transcodificado no Transcode/Transmux Worker (figura em baixo).
Transcode/Transmux Worker
Este sistema de transcodificação tem o trabalho que ler da fila qual o próximo stream a ser processado e, através de programas internos desenvolvidos em C/C++/Go [1], faz a transcodificação do stream RTMP para vários streams HLS para poder disponibilizar várias resoluções para os diversos requisitos dos utilizadores.
VoD - Video on-demand
Após a transcodificação do stream RTMP em vários streams HLS estes são armazenados no sistema de vídeo sob demanda para que possam ser visualizados posteriormente, sem estarem a ser transmitidos em direto.
Distribuição
O sistema de distribuição entra em ação após ter sido recebido os múltiplos streams HLS. Estes streams são primeiro armazenados em Cache de nível 1 que depois são distribuídos pela camada de replicação.
Esta camada de replicação permite distribuir os streams pelos diversos PoPs em todo o mundo e consequentemente chegar ao utilizador.
PR - Protected Replication
Este módulo recebe do upstream PoP o vídeo replicado e armazena-o na sua HLS cache onde muito temporariamente o stream aguarda que seja enviado para o utilizador pelo Video Edge.
1. “Twitch Blog | Twitch Engineering: An Introduction and Overview,” Twitch Blog, 2015. https://blog.twitch.tv/en/2015/12/18/twitch-engineering-an-introduction-and-overview-a23917b71a25/ (accessed Apr. 20, 2022).
2. “What is RTMP? Real Time Messaging Protocol - Dacast,” Dacast, Jan. 14, 2022. https://www.dacast.com/blog/rtmp-real-time-messaging-protocol/ (accessed Apr. 20, 2022).
4. Wikipedia Contributors, “HTTP Live Streaming,” Wikipedia, Apr. 01, 2022. https://en.wikipedia.org/wiki/HTTP_Live_Streaming (accessed Apr. 20, 2022).
5. Techopedia, “Point of Presence (POP),” Techopedia.com, Dec. 12, 2012. https://www.techopedia.com/definition/1704/point-of-presence-pop (accessed Apr. 20, 2022).
6. “NVIDIA NVENC OBS Guide,” 2022. https://www.nvidia.com/en-us/geforce/guides/broadcasting-guide/ (accessed Apr. 20, 2022).
7. “NVIDIA VIDEO CODEC SDK,” NVIDIA Developer, Aug. 23, 2013. https://developer.nvidia.com/nvidia-video-codec-sdk#NVENCFeatures (accessed Apr. 20, 2022).
8. “Customer Support,” Twitch.tv, 2022. https://help.twitch.tv/s/article/broadcast-guidelines?language=en_US#recommended (accessed Apr. 20, 2022).
9. J. Ozer, “What is CBR, VBR, CRF, Capped-CRF? Rate Control Modes Explained - OTTVerse,” OTTVerse, Jul. 22, 2021. https://ottverse.com/what-is-cbr-vbr-crf-capped-crf-rate-control-explained/ (accessed Apr. 20, 2022).