Como Criar um Servidor de Streaming para TV: Guia Completo para Transmitir Canais, Vídeos e Conteúdo ao Vivo

Aprenda todas as etapas para criar um servidor de streaming para Smart TV

Cri­ar um servi­dor de stream­ing para TV deixou de ser uma ativi­dade restri­ta às grandes emis­so­ras. Atual­mente, peque­nas empre­sas, pro­du­tores inde­pen­dentes, igre­jas, esco­las, canais region­ais, platafor­mas OTT e cri­adores de con­teú­do podem trans­mi­tir vídeos e canais ao vivo dire­ta­mente para Smart TVs, celu­lares, com­puta­dores e dis­pos­i­tivos como Roku, Fire TV e Android TV.

No entan­to, um servi­dor de stream­ing profis­sion­al não é ape­nas um com­puta­dor com alguns vídeos armazena­dos. Ele pre­cisa rece­ber o sinal, proces­sar áudio e vídeo, ger­ar difer­entes qual­i­dades, cri­ar playlists, entre­gar os arquiv­os aos espec­ta­dores, con­tro­lar aces­sos e supor­tar muitos usuários simultâ­neos.

Em uma estru­tu­ra mod­er­na, o servi­dor tam­bém pode ser conec­ta­do a aplica­tivos para:

  • Sam­sung Smart TV;
  • LG webOS;
  • Roku;
  • Android TV;
  • Google TV;
  • Apple TV;
  • nave­g­adores;
  • smart­phones;
  • tablets.

O pro­to­co­lo mais usa­do para esse tipo de dis­tribuição é o HLS — HTTP Live Stream­ing. Ele divide a trans­mis­são em pequenos seg­men­tos e uti­liza playlists com exten­são .m3u8. O dis­pos­i­ti­vo pode alternar auto­mati­ca­mente entre difer­entes qual­i­dades de vídeo con­forme a veloci­dade da inter­net do usuário. A Apple man­tém a especi­fi­cação e as recomen­dações ofi­ci­ais do HLS, incluin­do stream­ing adap­ta­ti­vo, baixa latên­cia, leg­en­das, áudio alter­na­ti­vo e pro­teção de con­teú­do.

Neste guia, você apren­derá como con­stru­ir uma estru­tu­ra fun­cional usan­do:

  • servi­dor Lin­ux;
  • Dock­er;
  • SRS;
  • FFm­peg;
  • NGINX;
  • HLS;
  • HTTPS;
  • DNS;
  • CDN;
  • aplica­tivos para Smart TV.

Tam­bém ver­e­mos segu­rança, escal­a­bil­i­dade, cus­tos, mon­i­tora­men­to, trans­mis­são lin­ear e os erros mais comuns.


🎯 O que é um servidor de streaming?

Um servi­dor de stream­ing é uma infraestru­tu­ra respon­sáv­el por rece­ber, proces­sar e dis­tribuir con­teú­do audio­vi­su­al pela inter­net.

Imag­ine uma emis­so­ra trans­mitin­do uma pro­gra­mação ao vivo. O sinal sai de um estú­dio, de um com­puta­dor com OBS Stu­dio, de uma câmera ou de um sis­tema de automação. Esse sinal é envi­a­do ao servi­dor por um pro­to­co­lo de entra­da.

O servi­dor recebe a trans­mis­são e pode:

  1. con­vert­er o vídeo;
  2. reduzir ou aumen­tar a res­olução;
  3. ger­ar difer­entes qual­i­dades;
  4. dividir o con­teú­do em seg­men­tos;
  5. cri­ar a playlist do canal;
  6. entre­gar o con­teú­do aos espec­ta­dores;
  7. reg­is­trar métri­c­as;
  8. blo­quear aces­sos inde­v­i­dos;
  9. gravar o con­teú­do;
  10. encam­in­har o vídeo para uma CDN.

O aplica­ti­vo insta­l­a­do na Smart TV não recebe dire­ta­mente o sinal da câmera. Ele nor­mal­mente recebe uma URL como:

https://stream.seusite.com/live/canal1/master.m3u8

Essa URL apon­ta para uma playlist HLS.

O aplica­ti­vo abre a playlist, iden­ti­fi­ca as qual­i­dades disponíveis e começa a baixar os seg­men­tos de vídeo. Quan­do a conexão pio­ra, o play­er pode escol­her uma ver­são mais leve. Quan­do mel­ho­ra, ele vol­ta para uma qual­i­dade supe­ri­or.

Essa capaci­dade é chama­da de stream­ing adap­ta­ti­vo, ou ABR — Adap­tive Bitrate Stream­ing.


🧩 Como funciona a arquitetura de streaming

Uma estru­tu­ra profis­sion­al pode ser divi­di­da em sete partes:

Fonte → Ingestão → Codificação → Empacotamento → Servidor de origem → CDN → Aplicativo

1. Fonte do conteúdo

A fonte pode ser:

  • câmera;
  • mesa de corte;
  • OBS Stu­dio;
  • arqui­vo MP4;
  • playlist de vídeos;
  • encoder físi­co;
  • pro­gra­ma de automação de TV;
  • sinal via satélite;
  • sis­tema de play­out;
  • out­ro servi­dor.

2. Ingestão

A ingestão é a entra­da do sinal no servi­dor.

Os pro­to­co­los mais comuns são:

  • RTMP;
  • SRT;
  • RTSP;
  • WHIP;
  • MPEG-TS sobre UDP;
  • RIST.

O RTMP ain­da é ampla­mente uti­liza­do na con­tribuição de vídeo porque pos­sui com­pat­i­bil­i­dade com OBS, FFm­peg e muitos encoders. Para conexões instáveis ou trans­mis­sões a lon­ga dis­tân­cia, SRT pode ser mais resistente a per­da de pacotes. O SRS supor­ta ingestão e con­ver­são entre pro­to­co­los como RTMP, SRT, HLS, WebRTC e HTTP-FLV.

3. Codificação e transcodificação

A cod­i­fi­cação trans­for­ma o vídeo bru­to em um for­ma­to com­prim­i­do, como:

  • H.264;
  • H.265/HEVC;
  • AV1.

A transcod­i­fi­cação cria novas ver­sões do vídeo.

Por exem­p­lo:

1080p — 6 Mbps
720p — 3 Mbps
480p — 1,5 Mbps
360p — 800 Kbps

Quem está com uma inter­net ráp­i­da recebe 1080p. Quem está em uma rede mais lenta pode rece­ber 480p ou 360p.

4. Empacotamento

Depois de cod­i­fi­ca­do, o vídeo é orga­ni­za­do em um for­ma­to de dis­tribuição, como:

  • HLS;
  • MPEG-DASH;
  • CMAF;
  • Smooth Stream­ing.

Para alcançar o maior número pos­sív­el de tele­vi­sores, o HLS cos­tu­ma ser uma escol­ha ini­cial segu­ra.

5. Servidor de origem

O servi­dor de origem man­tém:

  • playlists .m3u8;
  • seg­men­tos .ts;
  • seg­men­tos .m4s;
  • arquiv­os de leg­en­da;
  • chaves de crip­tografia;
  • gravações;
  • ima­gens;
  • metada­dos.

O servi­dor de origem não deve nec­es­sari­a­mente aten­der soz­in­ho a todos os espec­ta­dores. Em pro­je­tos maiores, ele ali­men­ta uma CDN.

6. CDN

A CDN repli­ca ou armazena o con­teú­do em servi­dores dis­tribuí­dos geografi­ca­mente.

Sem uma CDN, todos os usuários solici­tam os seg­men­tos dire­ta­mente ao seu VPS. Isso pode esgo­tar rap­i­da­mente:

  • a ban­da;
  • a CPU;
  • a memória;
  • as conexões simultâneas;
  • os lim­ites da hospedagem.

7. Aplicativo ou player

O play­er pode estar em:

  • site;
  • aplica­ti­vo móv­el;
  • Sam­sung Tizen;
  • LG webOS;
  • Roku;
  • Android TV;
  • Fire TV;
  • Apple TV.

Cada platafor­ma pos­sui lim­i­tações especí­fi­cas de codec, tags HLS, DRM, áudio, leg­en­da e res­olução. Por isso, um stream­ing que fun­ciona no nave­g­ador pode não fun­cionar cor­re­ta­mente em todos os mod­e­los de tele­visão.


🌐 Qual protocolo usar para streaming em TV?

HLS

O HLS é o pro­to­co­lo mais indi­ca­do para começar um pro­je­to de stream­ing volta­do a Smart TVs.

Ele pos­sui:

  • ampla com­pat­i­bil­i­dade;
  • dis­tribuição por HTTP e HTTPS;
  • suporte a CDN;
  • múlti­plas qual­i­dades;
  • áudio alter­na­ti­vo;
  • leg­en­das;
  • crip­tografia;
  • trans­mis­são ao vivo;
  • vídeo sob deman­da;
  • janela de DVR;
  • baixa latên­cia em ver­sões mod­er­nas.

A playlist prin­ci­pal nor­mal­mente é chama­da de master.m3u8.

Exem­p­lo sim­pli­fi­ca­do:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=6000000,RESOLUTION=1920x1080
1080p/index.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=3000000,RESOLUTION=1280x720
720p/index.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=1500000,RESOLUTION=854x480
480p/index.m3u8

O apar­el­ho anal­isa essas opções e escol­he uma delas.

MPEG-DASH

O MPEG-DASH tam­bém ofer­ece stream­ing adap­ta­ti­vo e é bas­tante uti­liza­do em platafor­mas profis­sion­ais.

Ele usa nor­mal­mente um man­i­festo com exten­são:

.mpd

Pode ser inter­es­sante para:

  • pro­je­tos com Widevine;
  • Android;
  • nave­g­adores com­patíveis;
  • ambi­entes basea­d­os em CMAF;
  • oper­ações mul­ti-DRM.

RTMP

O RTMP é mais apro­pri­a­do para enviar o sinal ao servi­dor do que para entregá-lo ao usuário final.

Exem­p­lo:

OBS → RTMP → servidor

O aplica­ti­vo da Smart TV geral­mente recebe HLS ou DASH, e não o RTMP dire­ta­mente.

SRT

O SRT é útil para trans­portar o sinal da origem até o servi­dor, espe­cial­mente quan­do há:

  • dis­tân­cia geográ­fi­ca;
  • per­da de pacotes;
  • inter­net instáv­el;
  • neces­si­dade de crip­tografia;
  • pro­dução remo­ta.

WebRTC

O WebRTC é indi­ca­do para trans­mis­sões inter­a­ti­vas e de latên­cia muito baixa, como:

  • videochamadas;
  • leilões ao vivo;
  • aulas inter­a­ti­vas;
  • suporte remo­to;
  • even­tos com par­tic­i­pação do públi­co.

Para uma pro­gra­mação tradi­cional de tele­visão, alguns segun­dos de atra­so podem ser aceitáveis. Nesse caso, HLS cos­tu­ma ser mais sim­ples e escaláv­el.

O Low-Laten­cy HLS reduz o atra­so uti­lizan­do seg­men­tos par­ci­ais, atu­al­iza­ções incre­men­tais da playlist, blo­queio de recar­ga e out­ras exten­sões. A infraestru­tu­ra, o pack­ager e o play­er pre­cisam supor­tar essas funções.


🖥️ Requisitos para criar o servidor

Para um pro­je­to ini­cial, você pre­cis­ará de:

  • servi­dor VPS ou ded­i­ca­do;
  • sis­tema opera­cional Lin­ux;
  • endereço IP públi­co;
  • domínio ou sub­domínio;
  • aces­so SSH;
  • Dock­er;
  • soft­ware de stream­ing;
  • FFm­peg;
  • cer­ti­fi­ca­do HTTPS;
  • fonte de vídeo;
  • play­er para testes.

Um exem­p­lo de sub­domínio seria:

stream.seusite.com

Evite uti­lizar hospedagem com­par­til­ha­da con­ven­cional para transcod­i­fi­cação de vídeo. A maio­r­ia dos planos com­par­til­ha­dos não foi cri­a­da para:

  • FFm­peg con­tín­uo;
  • proces­sa­men­to inten­si­vo;
  • alto con­sumo de ban­da;
  • mil­hares de conexões;
  • por­tas RTMP;
  • serviços em Dock­er;
  • tare­fas em segun­do plano.

Hospedagem com­par­til­ha­da pode servir pági­nas, APIs ou o painel admin­is­tra­ti­vo, mas o stream­ing nor­mal­mente deve ficar em um VPS, servi­dor ded­i­ca­do ou serviço espe­cial­iza­do.


⚙️ Configuração recomendada de servidor

Não existe uma con­fig­u­ração úni­ca. A neces­si­dade depende de:

  • quan­ti­dade de canais;
  • res­olução;
  • número de qual­i­dades;
  • codec;
  • quan­ti­dade de espec­ta­dores;
  • neces­si­dade de transcod­i­fi­cação;
  • gravação;
  • latên­cia dese­ja­da.

Projeto de laboratório

Para ape­nas rece­ber um sinal e ger­ar HLS sem transcod­i­ficar:

2 vCPUs
2 a 4 GB de RAM
40 GB de SSD
porta de 1 Gbps
Ubuntu Server

Projeto pequeno em produção

Para um ou dois canais com algu­ma transcod­i­fi­cação:

4 a 8 vCPUs
8 a 16 GB de RAM
100 GB ou mais de SSD
porta de 1 Gbps
CDN

Projeto com vários canais

Para múlti­p­los canais e várias qual­i­dades:

CPU com muitos núcleos
32 GB de RAM ou mais
GPU para codificação
armazenamento separado
servidor de origem
servidores de transcodificação
CDN
balanceamento
monitoramento

A transcod­i­fi­cação é geral­mente a parte que mais con­some proces­sa­men­to. Um fluxo que ape­nas copia o vídeo orig­i­nal exige muito menos CPU do que um proces­so que cria qua­tro res­oluções simultâneas.


📊 Como calcular o consumo de banda

O cál­cu­lo aprox­i­ma­do é:

Consumo por hora em GB = bitrate em Mbps × 0,45

Uma trans­mis­são de 3 Mbps con­some aprox­i­mada­mente:

3 × 0,45 = 1,35 GB por espectador por hora

Com 100 espec­ta­dores simultâ­neos durante uma hora:

1,35 × 100 = 135 GB

Em ter­mos de veloci­dade de saí­da:

100 espectadores × 3 Mbps = 300 Mbps

Com mil espec­ta­dores:

1.000 × 3 Mbps = 3.000 Mbps

Isso rep­re­sen­ta aprox­i­mada­mente 3 Gbps de tráfego simultâ­neo.

Um VPS com por­ta lim­i­ta­da a 1 Gbps não con­seguiria entre­gar 3 Gbps dire­ta­mente. É nesse pon­to que a CDN se tor­na essen­cial.


🚀 Método 1: criar um servidor com SRS e Docker

O SRS — Sim­ple Real­time Serv­er é um servi­dor de mídia de códi­go aber­to. Ele supor­ta pro­to­co­los como:

  • RTMP;
  • HLS;
  • SRT;
  • WebRTC;
  • HTTP-FLV;
  • MPEG-DASH.

O SRS pos­sui servi­dor HTTP inte­gra­do para testes e oper­ação de origem. A doc­u­men­tação recomen­da uti­lizar NGINX, Cad­dy ou out­ra cama­da HTTP quan­do for necessária dis­tribuição de bor­da, proxy ou estru­tu­ra mais robus­ta.

1. Criar o servidor

Con­trate um VPS com Ubun­tu e anote:

IP público
usuário
senha ou chave SSH

Acesse:

ssh root@IP_DO_SERVIDOR

Atu­al­ize o sis­tema:

apt update && apt upgrade -y

2. Instalar Docker

apt install docker.io docker-compose-plugin -y

Habilite o Dock­er na ini­cial­iza­ção:

systemctl enable docker
systemctl start docker

Ver­i­fique:

docker --version

3. Executar o SRS

Exem­p­lo bási­co:

docker run -d \
  --name srs \
  --restart unless-stopped \
  -p 1935:1935 \
  -p 1985:1985 \
  -p 8080:8080 \
  ossrs/srs:5

As por­tas prin­ci­pais são:

1935 — RTMP
1985 — API
8080 — HLS e HTTP

A doc­u­men­tação ofi­cial tam­bém apre­sen­ta URLs difer­entes para apli­cações e streams, per­mitin­do pub­licar vários canais no mes­mo servi­dor.

Ver­i­fique se o con­têin­er está rodan­do:

docker ps

Con­fi­ra os logs:

docker logs -f srs

4. Abrir as portas no firewall

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 1935/tcp
ufw allow 8080/tcp
ufw enable

Não é recomendáv­el deixar a por­ta da API admin­is­tra­ti­va expos­ta pub­li­ca­mente sem neces­si­dade.

5. Configurar o OBS Studio

No OBS, acesse:

Configurações → Transmissão

Sele­cione um servi­dor per­son­al­iza­do.

Servi­dor:

rtmp://IP_DO_SERVIDOR/live

Chave de trans­mis­são:

canal1

A URL final de pub­li­cação será:

rtmp://IP_DO_SERVIDOR/live/canal1

A URL HLS cor­re­spon­dente será:

http://IP_DO_SERVIDOR:8080/live/canal1.m3u8

6. Testar com VLC

Abra o VLC e sele­cione:

Mídia → Abrir fluxo de rede

Cole:

http://IP_DO_SERVIDOR:8080/live/canal1.m3u8

Caso o fluxo abra, o servi­dor bási­co já está fun­cio­nan­do.


🎬 Publicando um vídeo com FFmpeg

Tam­bém é pos­sív­el sim­u­lar um canal ao vivo a par­tir de um arqui­vo.

Exem­p­lo:

ffmpeg \
  -re \
  -stream_loop -1 \
  -i video.mp4 \
  -c:v libx264 \
  -preset veryfast \
  -b:v 2500k \
  -maxrate 2675k \
  -bufsize 5000k \
  -g 50 \
  -keyint_min 50 \
  -sc_threshold 0 \
  -c:a aac \
  -b:a 128k \
  -ar 48000 \
  -f flv \
  rtmp://IP_DO_SERVIDOR/live/canal1

Enten­da os prin­ci­pais parâmet­ros:

-re

Faz o FFm­peg ler o arqui­vo em veloci­dade de repro­dução nor­mal.

-stream_loop -1

Repete o arqui­vo indefinida­mente.

-c:v libx264

Cod­i­fi­ca o vídeo em H.264.

-preset veryfast

Con­tro­la a veloci­dade e o con­sumo da cod­i­fi­cação.

-b:v 2500k

Define o bitrate médio de vídeo.

-c:a aac

Cod­i­fi­ca o áudio em AAC.

-f flv

Cria a saí­da apro­pri­a­da para RTMP.

O FFm­peg pos­sui mux­ers respon­sáveis por orga­ni­zar flux­os cod­i­fi­ca­dos em for­matos de saí­da, incluin­do HLS e out­ros for­matos de stream­ing.


🔐 Configurando domínio e HTTPS

Usar ape­nas o IP é aceitáv­el para testes, mas uma oper­ação real deve uti­lizar:

https://stream.seusite.com

Crie no DNS um reg­istro do tipo A:

Nome: stream
Tipo: A
Destino: IP_DO_SERVIDOR

Depois, instale o NGINX:

apt install nginx certbot python3-certbot-nginx -y

Crie a con­fig­u­ração:

nano /etc/nginx/sites-available/stream

Adi­cione:

server {
    listen 80;
    server_name stream.seusite.com;

    location / {
        proxy_pass http://127.0.0.1:8080;

        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        add_header Access-Control-Allow-Origin "*" always;
        add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always;
        add_header Access-Control-Allow-Headers "Range, Origin, Accept, Content-Type" always;
        add_header Access-Control-Expose-Headers "Content-Length, Content-Range" always;
    }
}

Ative:

ln -s /etc/nginx/sites-available/stream /etc/nginx/sites-enabled/stream
nginx -t
systemctl reload nginx

Gere o cer­ti­fi­ca­do:

certbot --nginx -d stream.seusite.com

A URL pas­sa a ser:

https://stream.seusite.com/live/canal1.m3u8

HTTPS é impor­tante porque muitos aplica­tivos, nave­g­adores e platafor­mas apli­cam restrições a con­teú­dos inse­guros.


🎚️ Como criar múltiplas qualidades de vídeo

Uma trans­mis­são profis­sion­al não dev­e­ria depen­der de ape­nas uma res­olução.

Se você ofer­e­cer somente 1080p a 6 Mbps, usuários com conexões fra­cas sofr­erão:

  • trava­men­tos;
  • buffer;
  • quedas;
  • demo­ra para ini­ciar;
  • aban­dono da trans­mis­são.

Uma esca­da ini­cial de qual­i­dades pode ser:

Qual­i­dadeRes­oluçãoBitrate de vídeo
Full HD1920×10804,5 a 6 Mbps
HD1280×7202,5 a 3,5 Mbps
SD854×4801,2 a 1,8 Mbps
Baixa640×360600 a 900 Kbps

Ess­es números são pon­tos de par­ti­da, não regras uni­ver­sais. Esportes e cenas com movi­men­to exigem mais bitrate do que entre­vis­tas ou ima­gens estáti­cas.

Exemplo de FFmpeg com três qualidades

mkdir -p /var/www/hls/canal1/{720p,480p,360p}

Depois:

ffmpeg -i rtmp://127.0.0.1/live/canal1 \
-filter_complex "
[0:v]split=3[v720][v480][v360];
[v720]scale=1280:720[v720out];
[v480]scale=854:480[v480out];
[v360]scale=640:360[v360out]
" \
-map "[v720out]" -map 0:a:0 \
-map "[v480out]" -map 0:a:0 \
-map "[v360out]" -map 0:a:0 \
-c:v libx264 \
-preset veryfast \
-sc_threshold 0 \
-g 50 \
-keyint_min 50 \
-b:v:0 3000k -maxrate:v:0 3210k -bufsize:v:0 6000k \
-b:v:1 1500k -maxrate:v:1 1605k -bufsize:v:1 3000k \
-b:v:2 800k  -maxrate:v:2 856k  -bufsize:v:2 1600k \
-c:a aac \
-b:a:0 128k \
-b:a:1 96k \
-b:a:2 96k \
-ar 48000 \
-f hls \
-hls_time 4 \
-hls_list_size 8 \
-hls_flags delete_segments \
-master_pl_name master.m3u8 \
-var_stream_map "v:0,a:0,name:720p v:1,a:1,name:480p v:2,a:2,name:360p" \
-hls_segment_filename "/var/www/hls/canal1/%v/segment_%06d.ts" \
"/var/www/hls/canal1/%v/index.m3u8"

O resul­ta­do esper­a­do será:

/var/www/hls/canal1/master.m3u8
/var/www/hls/canal1/720p/index.m3u8
/var/www/hls/canal1/480p/index.m3u8
/var/www/hls/canal1/360p/index.m3u8

No NGINX:

server {
    listen 80;
    server_name stream.seusite.com;

    location /hls/ {
        root /var/www;

        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }

        add_header Cache-Control "no-cache";
        add_header Access-Control-Allow-Origin "*" always;
        add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always;
        add_header Access-Control-Expose-Headers "Content-Length, Content-Range" always;
    }
}

A playlist será:

https://stream.seusite.com/hls/canal1/master.m3u8

📺 Compatibilidade com Smart TVs

Samsung Tizen

Aplica­tivos Sam­sung podem uti­lizar a API AVPlay para repro­dução de mídia. A platafor­ma supor­ta mecan­is­mos adap­ta­tivos como HLS e MPEG-DASH, iden­ti­fi­ca­dos por arquiv­os .m3u8 e .mpd.

Exem­p­lo con­ceitu­al:

const url = "https://stream.seusite.com/hls/canal1/master.m3u8";

webapis.avplay.open(url);
webapis.avplay.setDisplayRect(0, 0, 1920, 1080);

webapis.avplay.prepareAsync(
    function () {
        webapis.avplay.play();
    },
    function (error) {
        console.error("Erro ao preparar vídeo:", error);
    }
);

É impor­tante ver­i­ficar a ver­são do HLS e as tags uti­lizadas. A doc­u­men­tação da Sam­sung apre­sen­ta uma matriz detal­ha­da de com­pat­i­bil­i­dade por ver­são do Tizen. Nem todas as tags mod­er­nas estão pre­sentes em tele­vi­sores anti­gos.

LG webOS

O webOS ofer­ece repro­dução HLS nos dis­pos­i­tivos com­patíveis. A própria doc­u­men­tação aler­ta que algu­mas tags HLS não são supor­tadas e que a duração dos seg­men­tos de áudio e vídeo deve ser igual para mel­hor com­pat­i­bil­i­dade.

Exem­p­lo com HTML5:

<video
    id="player"
    controls
    autoplay
    playsinline
    style="width:100%;height:100%;"
>
    <source
        src="https://stream.seusite.com/hls/canal1/master.m3u8"
        type="application/vnd.apple.mpegurl"
    >
</video>

O fato de fun­cionar em uma ver­são atu­al do webOS não sig­nifi­ca que fun­cionará em todos os tele­vi­sores anti­gos. Testes em apar­el­hos reais con­tin­u­am indis­pen­sáveis.

Roku

O Roku supor­ta HLS e DASH para stream­ing adap­ta­ti­vo. A doc­u­men­tação recomen­da disponi­bi­lizar múlti­p­los flux­os de qual­i­dade para que o dis­pos­i­ti­vo ajuste a repro­dução às condições da rede.

Exem­p­lo em Scene­Graph:

videoContent = CreateObject("roSGNode", "ContentNode")
videoContent.url = "https://stream.seusite.com/hls/canal1/master.m3u8"
videoContent.streamFormat = "hls"
videoContent.title = "Canal ao Vivo"

m.video.content = videoContent
m.video.control = "play"

Android TV

No Android TV, o Media3 Exo­Play­er pos­sui suporte a HLS, des­de que os codecs de áudio e vídeo tam­bém sejam com­patíveis com o dis­pos­i­ti­vo.

Exem­p­lo Kotlin:

val player = ExoPlayer.Builder(context).build()

val mediaItem = MediaItem.fromUri(
    "https://stream.seusite.com/hls/canal1/master.m3u8"
)

player.setMediaItem(mediaItem)
player.prepare()
player.play()

🛡️ Como proteger o servidor

Um servi­dor aber­to pode ser uti­liza­do por ter­ceiros para:

  • retrans­mi­tir seu con­teú­do;
  • con­sumir sua ban­da;
  • desco­brir chaves;
  • inserir trans­mis­sões;
  • atacar APIs;
  • aces­sar gravações;
  • copi­ar playlists.

Utilize chaves de transmissão

Em vez de:

rtmp://servidor/live/canal1

Uti­lize uma chave lon­ga e difí­cil de pre­v­er:

rtmp://servidor/live/a8xM3pQ92Kz7L1

Ain­da mel­hor é val­i­dar a pub­li­cação por API ou call­back.

Bloqueie portas administrativas

A API do servi­dor deve ficar:

  • pro­te­gi­da por fire­wall;
  • restri­ta ao local­host;
  • atrás de VPN;
  • pro­te­gi­da por aut­en­ti­cação.

Use URLs assinadas

Uma URL assi­na­da pos­sui parâmet­ros tem­porários:

https://cdn.seusite.com/live/canal1/master.m3u8?token=ABC&expires=123456

O servi­dor ou CDN val­i­da:

  • assi­natu­ra;
  • val­i­dade;
  • usuário;
  • IP, quan­do apro­pri­a­do;
  • plano de assi­natu­ra;
  • dis­pos­i­ti­vo.

Proteja a origem

Quan­do uti­lizar CDN, blo­queie o aces­so públi­co dire­to à origem sem­pre que pos­sív­el.

A origem deve aceitar solic­i­tações ape­nas:

  • dos IPs da CDN;
  • de um proxy autor­iza­do;
  • de uma rede pri­va­da;
  • de conexões aut­en­ti­cadas.

Configure HTTPS

HTTPS pro­tege:

  • cre­den­ci­ais;
  • tokens;
  • playlists;
  • chamadas de API;
  • dados do usuário.

DRM e criptografia

Exis­tem difer­entes níveis de pro­teção:

AES-128

Crip­tografa seg­men­tos HLS uti­lizan­do uma chave.

É mais sim­ples, mas exige cuida­do para que a chave não fique públi­ca.

Widevine

Uti­liza­do em Android, nave­g­adores e alguns tele­vi­sores.

PlayReady

Comum em ambi­entes Microsoft e Smart TVs.

FairPlay

Usa­do em dis­pos­i­tivos Apple.

A doc­u­men­tação do LG webOS apre­sen­ta suporte e com­bi­nações entre HLS, AES-128, Widevine e PlayReady con­forme a ver­são do sis­tema.

DRM profis­sion­al cos­tu­ma exi­gir:

  • pack­ager;
  • servi­dor de licenças;
  • prove­dor mul­ti-DRM;
  • inte­gração no play­er;
  • aut­en­ti­cação;
  • con­t­role de dire­itos.

🌍 Quando usar uma CDN

Um servi­dor úni­co pode fun­cionar para testes e poucos usuários. Con­forme a audiên­cia cresce, a CDN pas­sa a ser impor­tante.

Con­sidere CDN quan­do hou­ver:

  • mais de algu­mas dezenas de espec­ta­dores simultâ­neos;
  • usuários em difer­entes regiões;
  • picos de audiên­cia;
  • even­tos ao vivo;
  • vários canais;
  • alto bitrate;
  • neces­si­dade de disponi­bil­i­dade;
  • pro­teção con­tra ataques;
  • cobrança por tráfego pre­visív­el.

A arquite­tu­ra fica assim:

Encoder
   ↓
Servidor de ingestão
   ↓
Transcodificador
   ↓
Origem HLS
   ↓
CDN
   ↓
Smart TVs e aplicativos

Cache de playlists e segmentos

As playlists ao vivo mudam fre­quente­mente. Por isso, devem ter cache cur­to ou desabil­i­ta­do.

Os seg­men­tos podem ter cache maior.

Exem­p­lo con­ceitu­al:

master.m3u8 → cache curto
index.m3u8  → cache muito curto
segment.ts  → cache maior

Uma con­fig­u­ração erra­da pode faz­er o aplica­ti­vo rece­ber uma playlist anti­ga e ficar vários seg­men­tos atrás da trans­mis­são.


⏱️ Como reduzir a latência

A latên­cia é a difer­ença entre o momen­to em que algo acon­tece e o momen­to em que o usuário vê na tela.

Ela pode sur­gir em:

  • cap­tura;
  • encoder;
  • envio;
  • buffer;
  • transcod­i­fi­cação;
  • seg­men­tação;
  • CDN;
  • play­er.

Para reduzir a latên­cia:

  1. dimin­ua a duração dos seg­men­tos;
  2. uti­lize GOP alin­hado;
  3. reduza buffers;
  4. use Low-Laten­cy HLS;
  5. evite transcod­i­fi­cação desnecessária;
  6. aprox­ime o servi­dor da fonte;
  7. uti­lize SRT ou WHIP para con­tribuição;
  8. con­fig­ure cor­re­ta­mente o play­er;
  9. mon­i­tore a CDN;
  10. teste em apar­el­hos reais.

Seg­men­tos menores reduzem o atra­so, mas aumen­tam:

  • número de req­ui­sições;
  • proces­sa­men­to;
  • sen­si­bil­i­dade a insta­bil­i­dade;
  • com­plex­i­dade do cache.

O menor val­or pos­sív­el nem sem­pre é o mel­hor val­or.

Para uma TV lin­ear comum, seg­men­tos de qua­tro a seis segun­dos podem ser um pon­to ini­cial. Para baixa latên­cia, a arquite­tu­ra pre­cisa ser desen­ha­da especi­fi­ca­mente para isso.


🗂️ Como criar uma programação de TV linear

Um servi­dor de stream­ing não cria auto­mati­ca­mente a grade da emis­so­ra. É necessário um sis­tema de play­out.

O play­out orga­ni­za:

  • pro­gra­mas;
  • com­er­ci­ais;
  • vin­hetas;
  • chamadas;
  • horários;
  • even­tos ao vivo;
  • preenchi­men­to;
  • iden­ti­fi­cação do canal.

Uma grade pode ser rep­re­sen­ta­da por:

08:00 — Jornal
09:00 — Programa infantil
10:30 — Documentário
12:00 — Notícias
13:00 — Filme
15:00 — Programa de entrevistas

O sis­tema repro­duz os arquiv­os em sequên­cia e envia a saí­da para o servi­dor.

Exemplo simples com FFmpeg

Para testes, é pos­sív­el cri­ar um arqui­vo de lista:

file 'programa1.mp4'
file 'vinheta.mp4'
file 'programa2.mp4'
file 'comercial.mp4'

Salve como:

playlist.txt

Exe­cute:

ffmpeg \
  -re \
  -f concat \
  -safe 0 \
  -i playlist.txt \
  -c:v libx264 \
  -preset veryfast \
  -b:v 3000k \
  -c:a aac \
  -b:a 128k \
  -f flv \
  rtmp://IP_DO_SERVIDOR/live/canal1

Esse exem­p­lo é útil para lab­o­ratório, mas uma oper­ação profis­sion­al pre­cisa lidar com:

  • arquiv­os de for­matos difer­entes;
  • nor­mal­iza­ção de áudio;
  • fal­ha de mídia;
  • retoma­da automáti­ca;
  • sobreposição de logotipo;
  • reló­gio;
  • inserção de even­tos ao vivo;
  • com­er­ci­ais;
  • relatórios;
  • EPG;
  • redundân­cia.

📅 EPG: guia eletrônico de programação

O EPG infor­ma ao aplica­ti­vo o que está pas­san­do.

Exem­p­lo de API:

{
  "channel": "canal1",
  "now": {
    "title": "Jornal da Manhã",
    "start": "2026-07-10T08:00:00-03:00",
    "end": "2026-07-10T09:00:00-03:00"
  },
  "next": {
    "title": "Programa Entrevista",
    "start": "2026-07-10T09:00:00-03:00",
    "end": "2026-07-10T10:00:00-03:00"
  }
}

O aplica­ti­vo pode mostrar:

Agora: Jornal da Manhã
A seguir: Programa Entrevista

Para canais FAST ou platafor­mas com vários canais, o EPG é essen­cial para:

  • grade;
  • bus­ca;
  • “ago­ra e depois”;
  • lem­bretes;
  • con­tinuidade;
  • pub­li­ci­dade;
  • análise de audiên­cia.

💾 Streaming ao vivo e vídeo sob demanda

Um servi­dor pode ofer­e­cer dois mod­e­los.

Live

O usuário assiste ao con­teú­do que está sendo trans­mi­ti­do naque­le momen­to.

Exem­p­lo:

/live/canal1/master.m3u8

VOD

O usuário escol­he um vídeo e assiste quan­do dese­jar.

Exem­p­lo:

/vod/filme123/master.m3u8

Para ger­ar HLS a par­tir de um arqui­vo:

ffmpeg \
  -i filme.mp4 \
  -c:v libx264 \
  -c:a aac \
  -hls_time 6 \
  -hls_playlist_type vod \
  -hls_segment_filename "segment_%05d.ts" \
  index.m3u8

O parâmetro:

-hls_playlist_type vod

gera uma playlist final­iza­da, apro­pri­a­da para con­teú­do sob deman­da.

No VOD, tam­bém é recomendáv­el cri­ar:

  • múlti­plas qual­i­dades;
  • miniat­uras;
  • leg­en­das;
  • metada­dos;
  • duração;
  • capa;
  • clas­si­fi­cação;
  • cat­e­go­rias;
  • con­t­role de aces­so.

🔄 Redundância e alta disponibilidade

Uma emis­so­ra não pode depen­der de um úni­co proces­so.

Uma estru­tu­ra mais resistente pode ter:

Encoder principal
Encoder reserva

Servidor de ingestão A
Servidor de ingestão B

Origem principal
Origem reserva

CDN principal
CDN secundária

O sis­tema deve detec­tar:

  • ausên­cia de vídeo;
  • silên­cio;
  • tela pre­ta;
  • con­ge­la­men­to;
  • bitrate zero;
  • fal­ha de áudio;
  • FFm­peg encer­ra­do;
  • dis­co cheio;
  • per­da de rede;
  • fal­ha no servi­dor.

Quan­do hou­ver erro, pode exe­cu­tar:

  • reini­cial­iza­ção;
  • tro­ca de origem;
  • vídeo de emergên­cia;
  • aler­ta;
  • failover;
  • mudança de CDN.

📈 Monitoramento do streaming

Não bas­ta ver­i­ficar se a pági­na abre.

Um sis­tema profis­sion­al deve mon­i­torar:

bitrate recebido
bitrate entregue
quadros por segundo
resolução
codec
áudio
latência
buffer
erros HTTP
tempo de inicialização
conexões simultâneas
CPU
RAM
disco
rede
processos FFmpeg

FFprobe

O FFprobe pode anal­is­ar o fluxo:

ffprobe \
  -v error \
  -show_streams \
  -show_format \
  https://stream.seusite.com/live/canal1.m3u8

O FFprobe cole­ta infor­mações sobre flux­os mul­ti­mí­dia e apre­sen­ta os dados em for­matos legíveis por pes­soas ou sis­temas.

Teste de disponibilidade

curl -I https://stream.seusite.com/live/canal1.m3u8

Você deve rece­ber algo como:

HTTP/2 200
Content-Type: application/vnd.apple.mpegurl

Monitoramento automático

Um script pode ver­i­ficar a playlist a cada min­u­to.

Exem­p­lo:

#!/bin/bash

URL="https://stream.seusite.com/live/canal1.m3u8"

STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$URL")

if [ "$STATUS" != "200" ]; then
    echo "Canal indisponível: HTTP $STATUS"
fi

Em pro­dução, envie os aler­tas para:

  • e‑mail;
  • aplica­ti­vo;
  • painel;
  • Slack;
  • Telegram cor­po­ra­ti­vo;
  • sis­tema de inci­dentes.

💰 Quanto custa criar um servidor de streaming?

O cus­to depende mais da audiên­cia e do proces­sa­men­to do que do site.

Os prin­ci­pais com­po­nentes são:

ItemComo afe­ta o cus­to
VPSCPU, RAM e trans­fer­ên­cia
Servi­dor ded­i­ca­domaior capaci­dade
GPUtranscod­i­fi­cação
Armazena­men­togravações e VOD
CDNtráfego entregue
DRMlicenças e inte­gração
Mon­i­tora­men­tométri­c­as e aler­tas
Aplica­tivosdesen­volvi­men­to e manutenção
Play­outautomação da pro­gra­mação
Suporteoper­ação téc­ni­ca
Back­upssegu­rança
Redundân­ciadisponi­bil­i­dade

Um canal com poucos espec­ta­dores pode oper­ar em um VPS pequeno.

Um canal com mil­hares de usuários pre­cisa de:

  • CDN;
  • múlti­p­los servi­dores;
  • transcod­i­fi­cação otimiza­da;
  • mon­i­tora­men­to;
  • con­t­role de cus­tos;
  • redundân­cia.

Antes de con­tratar, cal­cule:

bitrate médio
horas assistidas
número de espectadores
quantidade de canais
armazenamento
regiões atendidas

❌ Erros mais comuns

1. Usar somente uma qualidade

Uma qual­i­dade úni­ca prej­u­di­ca usuários com inter­net mais lenta.

Solução: cri­ar uma playlist adap­ta­ti­va.

2. Hospedar tudo em servidor compartilhado

Hospeda­gens comuns podem blo­quear proces­sos con­tín­u­os e alto con­sumo.

Solução: usar VPS, ded­i­ca­do ou serviço de mídia.

3. Não utilizar CDN

O servi­dor pode fun­cionar no teste e cair quan­do o públi­co aumen­ta.

Solução: dimen­sion­ar a saí­da e con­fig­u­rar CDN.

4. Deixar o RTMP aberto

Qual­quer pes­soa pode ten­tar pub­licar um fluxo.

Solução: chave segu­ra, val­i­dação e fire­wall.

5. Ignorar HTTPS

Aplica­tivos podem blo­quear con­teú­do inse­guro.

Solução: domínio e cer­ti­fi­ca­do váli­do.

6. GOP desalinhado

As qual­i­dades podem tro­car de for­ma incor­re­ta.

Solução: uti­lizar inter­va­l­os de keyframes con­sis­tentes.

7. Áudio incompatível

O vídeo aparece, mas não há som.

Solução: usar AAC com parâmet­ros com­patíveis e tes­tar em apar­el­hos reais.

8. MIME type incorreto

O servi­dor envia .m3u8 como tex­to genéri­co.

Solução: con­fig­u­rar:

application/vnd.apple.mpegurl

Para seg­men­tos MPEG-TS:

video/mp2t

9. CORS ausente

O aplica­ti­vo ou play­er web não con­segue car­regar a playlist.

Solução: con­fig­u­rar cabeçal­hos CORS de for­ma con­sciente.

10. Testar apenas no navegador

Smart TVs pos­suem play­ers, firmwares e lim­i­tações difer­entes.

Solução: tes­tar Sam­sung, LG, Roku e Android TV em dis­pos­i­tivos reais.


✅ Checklist de produção

Antes de pub­licar, con­firme:

[ ] O fluxo funciona por HTTPS
[ ] Existe mais de uma qualidade
[ ] O áudio está em AAC compatível
[ ] O vídeo está em H.264 compatível
[ ] O GOP está alinhado
[ ] Os segmentos têm duração consistente
[ ] O MIME type está correto
[ ] O CORS está configurado
[ ] A origem está protegida
[ ] A chave RTMP não é pública
[ ] A CDN está configurada
[ ] Existem alertas
[ ] O servidor reinicia automaticamente
[ ] Há backup de configurações
[ ] O aplicativo trata erros
[ ] O player tenta reconectar
[ ] Há teste em aparelhos reais
[ ] O conteúdo possui direitos de distribuição

❓ Perguntas frequentes

É possível criar um servidor de streaming gratuitamente?

É pos­sív­el mon­tar o soft­ware uti­lizan­do soluções gra­tu­itas e de códi­go aber­to. Entre­tan­to, servi­dor, tráfego, domínio, armazena­men­to, CDN e manutenção pos­suem cus­tos.

Posso usar meu computador como servidor?

Pode ser usa­do para testes. Para pro­dução, há riscos:

  • que­da de ener­gia;
  • IP var­iáv­el;
  • inter­net assimétri­ca;
  • pou­ca ban­da de upload;
  • fal­ha de hard­ware;
  • ausên­cia de redundân­cia.

Quantos usuários um VPS suporta?

Depende prin­ci­pal­mente do bitrate e da veloci­dade de saí­da.

Um servi­dor com saí­da disponív­el de 500 Mbps, entre­gan­do vídeos de 3 Mbps, teria um lim­ite teóri­co infe­ri­or a:

500 ÷ 3 = 166 espectadores

Na práti­ca, é necessário reser­var capaci­dade para sis­tema, picos e sobre­car­ga. O número real será menor.

Preciso de uma CDN?

Para testes, não nec­es­sari­a­mente. Para públi­co cres­cente, even­tos e dis­tribuição nacional, é alta­mente recomendáv­el.

HLS funciona em Samsung?

Sim, o Sam­sung Tizen pos­sui suporte a HLS, com difer­enças entre ver­sões e tags.

HLS funciona em LG?

Sim, mas é necessário respeitar as lim­i­tações por ver­são do webOS, codecs, tags e seg­men­tação.

HLS funciona no Roku?

Sim. O Roku supor­ta HLS e out­ros for­matos adap­ta­tivos.

Qual codec é mais compatível?

Para uma oper­ação ini­cial com ampla com­pat­i­bil­i­dade, H.264 para vídeo e AAC para áudio con­tin­u­am sendo uma com­bi­nação segu­ra. Codecs mais mod­er­nos podem reduzir o con­sumo, mas exigem análise dos apar­el­hos que serão aten­di­dos.

Como criar vários canais?

Uti­lize chaves ou nomes difer­entes:

rtmp://servidor/live/canal1
rtmp://servidor/live/canal2
rtmp://servidor/live/canal3

As saí­das:

/live/canal1.m3u8
/live/canal2.m3u8
/live/canal3.m3u8

O SRS per­mite difer­entes apli­cações e nomes de stream den­tro da mes­ma con­fig­u­ração.

Posso monetizar o canal?

Sim, por mod­e­los como:

  • pub­li­ci­dade;
  • assi­natu­ra;
  • pay-per-view;
  • patrocínio;
  • con­teú­do gra­tu­ito com anún­cios;
  • canais FAST;
  • licen­ci­a­men­to;
  • ven­da de espaço com­er­cial.

A mon­e­ti­za­ção exige dire­itos sobre o con­teú­do trans­mi­ti­do.


🏁 Conclusão

Cri­ar um servi­dor de stream­ing para TV envolve muito mais do que insta­lar um pro­gra­ma. É necessário com­bi­nar ingestão, cod­i­fi­cação, HLS, segu­rança, dis­tribuição, aplica­tivos, mon­i­tora­men­to e escal­a­bil­i­dade.

Para um primeiro pro­je­to, uma arquite­tu­ra efi­ciente pode ser:

OBS ou playout
        ↓
RTMP ou SRT
        ↓
SRS
        ↓
FFmpeg
        ↓
HLS adaptativo
        ↓
NGINX e HTTPS
        ↓
CDN
        ↓
Samsung, LG, Roku e Android TV

O SRS sim­pli­fi­ca a ingestão e a con­ver­são de pro­to­co­los. O FFm­peg per­mite con­tro­lar codecs, res­oluções e bitrates. O NGINX entre­ga ou encam­in­ha playlists e seg­men­tos. A CDN absorve a audiên­cia. Os aplica­tivos apre­sen­tam o canal ao usuário.

Comece com um lab­o­ratório:

  1. con­trate um VPS;
  2. instale Dock­er;
  3. exe­cute o SRS;
  4. publique pelo OBS;
  5. teste a playlist HLS;
  6. con­fig­ure domínio;
  7. ative HTTPS;
  8. crie múlti­plas qual­i­dades;
  9. teste em Smart TVs;
  10. adi­cione CDN e segu­rança.

Depois que essa base estiv­er estáv­el, você poderá evoluir para:

  • vários canais;
  • pro­gra­mação 24 horas;
  • EPG;
  • gravação;
  • VOD;
  • assi­natu­ra;
  • anún­cios;
  • FAST TV;
  • aplica­tivos pub­li­ca­dos nas lojas;
  • redundân­cia;
  • métri­c­as de audiên­cia.

Um pro­je­to de stream­ing bem plane­ja­do pode se trans­for­mar em uma ver­dadeira platafor­ma de tele­visão dig­i­tal, acessív­el por difer­entes apar­el­hos e pronta para crescer de poucos espec­ta­dores para uma oper­ação profis­sion­al.

Posts Similares

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *