Um pouco sobre streaming de vídeo ao vivo
Tags: video, streaming
Published: 2022-08-19 16:16:09

---
title: Um pouco sobre streaming de vídeo ao vivo
published: true
tags: video, streaming
---

![Imgem contendo as etapas do vídeo. No começo, uma pessoa com seu computador dando play e na sequência o request indo pra CDN, packager, envolvendo a fonte do vídeo e o encoder](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j6kgj9ozcyioaw06nl4c.png "Workflow live")

Motivado pela dica do @leandronsp sobre assuntos técnicos, trago nesse artigo uma introdução a vídeo ao vivo. Atualmente trabalho no time de vídeo ao vivo da Globo, uma das maiores empresas de mídia da América Latina.

Vídeo ao vivo tem temperado a web há mais de década. Nossas conexões ficaram mais rápidas e nossa vontade de ver vídeo com mais qualidade aumentou com o passar do tempo. A experiência ao assistir vídeo foi ficando cada vez melhor à medida que as pessoas ficaram mais exigentes: buscamos o melhor áudio, melhor imagem e sem falhas nem *buffering*.

Pra entender um pouco da complexidade que envolve uma transmissão de vídeo ao vivo, vamos voltar um pouco e entender como chegamos até aqui.

## Um pouco do passado

Em 1996, a Macromedia inventou o protocolo RTMP (Real-Time Messaging Protocol) destinado a envio de vídeo, áudio e dados. O intuito do protocolo era garantir uma rápida performance e um padrão pra envio de dados em tempo real, e que esses dados pudessem ser decodificados por um player, o Flash.

*Embora exista muita piada em cima do término do Flash, o Flash foi por mais de duas décadas um ótimo player de vídeo, tendo sido base para algoritmos de encoding/decoding futuramente*

O fato de muitos sites de streaming do passado exigirem a instalação de Flash não era à toa. RTMP era o protocolo usado pelas empresas. O player conectava em uma URL diretamente no servidor que estava recebendo o vídeo e as pessoas assistiam diretamente do servidor, usando RTMP diretamente. Mesmo sem Flash atualmente, você pode usar um player como VLC para tocar uma transmissão ao vivo RTMP.

## Como funciona?

Protocolos, players, encoding e decoding. Ok, mas pra que tudo isso?

Uma transmissão ao vivo passa por muitas etapas antes de chegar no seu dispositivo tocador de vídeo.

A partir de agora alguns termos em inglês vão ser utilizados pela falta uso das mesmas em português.

### Ingest

A fonte do vídeo é a primeira etapa. É nela que definimos qual o modo de captura do vídeo e pra onde vamos publicar a transmissão. O software [OBS](https://obsproject.com/) ficou muito famoso por ser usado por gamers que fazem streaming na Twitch/Facebook/Youtube. O que essas pessoas estão fazendo é o *ingest* do vídeo.

Há outras formas de publicar um vídeo. É possível usar o [ffmpeg](https://ffmpeg.org/) como fonte e publicar em um endereço RTMP ou HTTP.

### Encoding

Essa etapa vai depender muito de como o produto de vídeo aborda o ingest. Quando a fonte é um OBS, apenas um input é enviado para um servidor e, lá nesse serviço, o vídeo passa por um processo de encoding que acaba criando várias qualidades do seu vídeo, para que ele possa ser assistido por diferentes dispositivos e, também, para que sua rede de internet se adapte melhor às qualidades oferecidas. Redes de computadores sofrem degradações diárias que fazem com que seu vídeo não toque na melhor qualidade, pois isso o produto deve pensar nesses casos de uso.
O processo de oferecer mais de uma qualidade de vídeo é essencial para o bom funcionamento da tecnica ABR (Adaptive Bitrate Streaming), usada para escolher a melhor experiência para o player de vídeo e, consequentemente, pra você.

A etapa de encoding pode ser diferente quando a entrada de vídeo é um SDI (Serial Digital Interface). SDI é uma interface (cabo) usado para trafegar os dados de uma câmera para o encoder. É usando um SDI que eventos ao vivo de grande porte são transmitidos. A fonte do vídeo passa pelo cabo, sem nenhum tipo de codificação, e vai pro encoder processar. No encoder a pessoa técnica terá como escolher como o vídeo vai ser processado (codec de vídeo, codec de áudio, resolução, de metadata e outras dezenas de opções).

### Packaging

Essa etapa é onde o vídeo é empacotado em diferentes formatos. Todo player de vídeo precisa saber como ler uma URL de um vídeo e tocar o conteúdo descrito nela. É aqui que entram protocolos como HLS e DASH e também os segmentos de vídeo. O processo de empacotar um vídeo é sobre como os segmentos (chunks, que são pedacinhos do vídeo) são criados e como eles são organizados, que são os manifestos de vídeo (também chamados de playlists).

Uma playlist é uma forma de descrever as qualidades de vídeo oferecidas pela plataforma e, também, os chunks oferecidos por essas playlists.

### Delivery

Nos primórdios de streaming de vídeo, apenas uma qualidade era ofertada e a escalabilidade da plataforma era complexa e custosa.

Atualmente, a entrega de vídeo precisa ser rápida e melhor localizada. Quanto mais perto o servidor estiver de você, melhor vai ser sua experiência. Diferente de acessar um site, os dados trafegados em um vídeo são muito maiores do que páginas web que acessamos no dia a dia, e não temos como tomar vantagem do cache local pois o vídeo muda, enquanto as folhas de estilo ou scripts de uma página não.

Para ter uma entrega mais adequada, a plataforma de vídeo precisa saber como entregar o servidor mais perto da pessoa assistindo. Estamos falando de CDNs (Content Delivery Network), que são redes de entrega de conteúdo que contém inteligência de roteamento e cache para entregar uma experiência personalizada e com menos latência.

Outro ponto importantíssimo sobre CDNs é caching. Servidores que entregam o conteúdo são protegidos com camadas de cache que reduzem o impacto nos servidores de conteúdo, fazendo com que o mesmo arquivo possa ser requisitado com muito menos latência e resiliência.

### Play

A parte inicial de um vídeo é o play. Plataformas de streaming têm e evoluem seus próprios players à medida que features vão sendo adicionadas e codecs de vídeo novos precisam ser suportados. A melhora da experiência só é possível se todas as etapas estiverem alinhadas.

Para o player isso não é diferente. Players precisam estar aptos para tocar o conteúdo entregue pela CDN, caso contrário, seu vídeo nem começará a tocar. E, para estar apto, o player deve possuir suporte ao decoding dos segmentos de vídeo.

---

Essa é uma breve introdução sobre vídeo. No próximo, vamos nos aprofundar melhor em alguns termos como codec, CDN, player, buffering, etc.

Uma das camisetas aqui da Globo é essa, descrevendo as etapas pra entregar vídeo ao vivo

![foto da camiseta da Globo que é preta com palavras em branco, uma por linha "Ingest Encode Deliver Play" e o símbolo da Globo logo abaixo à direita](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2yh1ysdx4vnczullx5nq.jpg "camiseta da Globo")