Como transmitir live OBS pro seu servidor próprio RTMP em VPS

Configure um servidor RTMP próprio em VPS Linux com Nginx e envie sua live OBS sem depender de Twitch ou YouTube. Passo a passo técnico.

Streamar pela Twitch ou YouTube funciona até você precisar de controle: latência menor, retenção de vídeo conforme suas regras, retransmissão simultânea pra múltiplos destinos, ou simplesmente independência de uma plataforma que pode banir o canal. Rodar um servidor RTMP próprio numa VPS resolve tudo isso por uma fração do que custa um plano comercial de streaming dedicado.

Este tutorial cobre o caminho completo: subir Nginx com o módulo RTMP numa VPS Ubuntu, configurar o OBS Studio pra publicar lá, validar a transmissão num player externo e endurecer o servidor pra produção. A persona aqui é o streamer técnico que já mexe com OBS mas nunca administrou um servidor de mídia.

Tempo estimado de execução: 40 a 60 minutos, contando download de pacotes e primeiro teste de transmissão.

Pré-requisitos

Antes de começar, confirme o ambiente. RTMP é um protocolo sensível a latência de rede — VPS com upload baixo ou link congestionado vai degradar a qualidade da live independente da configuração do servidor.

Pré-requisitos

Ubuntu 24.04 LTS (ou 22.04) com acesso root via SSH, ~500 MB livres pra build do Nginx e pacotes auxiliares, IP público acessível da sua máquina local. Banda mínima de 100 Mbps no servidor pra 1080p60 sem gargalo. OBS Studio 30.x ou superior instalado na máquina de origem.

Porta RTMP padrão 1935/tcp
Porta HLS (opcional) 8080/tcp
Bitrate sugerido 1080p60 6000 kbps
Codec de vídeo h.264

Instalação do Nginx com módulo RTMP

O módulo nginx-rtmp-module não vem nos repositórios oficiais do Ubuntu como módulo dinâmico carregável. A forma mais limpa em distribuições atuais é instalar o pacote libnginx-mod-rtmp, que já entrega o módulo compilado contra a versão do Nginx do apt — sem precisar buildar do zero.

01

Atualize o índice de pacotes e instale o Nginx junto com o módulo RTMP:

sudo apt update
sudo apt install -y nginx libnginx-mod-rtmp

O pacote libnginx-mod-rtmp adiciona o arquivo /etc/nginx/modules-enabled/50-mod-rtmp.conf que carrega o módulo automaticamente. Confirme que carregou:

nginx -V 2>&1 | grep -o rtmp

Se a saída for rtmp, o módulo está disponível.

02

Crie o arquivo de configuração do RTMP. O bloco rtmp fica fora do bloco http — edite o /etc/nginx/nginx.conf e adicione no final do arquivo:

rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        allow publish 127.0.0.1;
        allow publish SEU_IP_DE_CASA;
        deny publish all;
        allow play all;

        application live {
            live on;
            record off;
        }
    }
}

Substitua SEU_IP_DE_CASA pelo IP público de onde o OBS vai publicar. Sem essa restrição, qualquer um na internet pode publicar streams no seu servidor consumindo banda e CPU.

03

Teste a configuração e recarregue o Nginx:

sudo nginx -t
sudo systemctl reload nginx

Se nginx -t reclamar de unknown directive "rtmp", o módulo não carregou — revise o passo 01 e confirme que /etc/nginx/modules-enabled/50-mod-rtmp.conf existe.

Liberação no firewall

Por padrão a VPS vem com firewall ativo ou bloqueando portas não-padrão. RTMP usa TCP 1935 — sem regra explícita o OBS vai bater num timeout silencioso.

04

Libere a porta 1935 no UFW:

sudo ufw allow 1935/tcp
sudo ufw reload

Se você usa iptables direto sem UFW, a regra equivalente é:

sudo iptables -A INPUT -p tcp --dport 1935 -j ACCEPT

E persista com iptables-save ou o método do seu provedor.

Cuidado com firewall do provedor

Algumas VPS têm camada extra de firewall no painel do provedor (security groups, network policies) que opera antes do iptables da máquina. Se telnet SEU_IP 1935 da sua casa der timeout mas dentro da VPS funciona em localhost, o bloqueio é externo — libere a porta no painel também.

Configuração do OBS Studio

Com o servidor pronto, agora o OBS precisa apontar pra ele. O endpoint segue o padrão rtmp://IP_DO_SERVIDOR/application e o stream key é o nome do stream que o player vai consumir.

05

Abra o OBS Studio e vá em Arquivo → Configurações → Transmissão. Selecione:

  • Serviço: Personalizado
  • Servidor: rtmp://IP_DO_SEU_SERVIDOR/live
  • Chave de transmissão: escolha um nome — pode ser meucanal, teste01, qualquer string sem espaços ou caracteres especiais.

Clique em OK pra salvar.

06

Ajuste o encoder em Configurações → Saída → Modo Avançado → Streaming:

  • Codificador: x264 (CPU) ou NVENC H.264 (se tiver GPU NVIDIA)
  • Taxa de bits: 4500 kbps pra 1080p30, 6000 kbps pra 1080p60
  • Intervalo de keyframe: 2 segundos
  • Perfil: main
  • Preajuste: veryfast (CPU) ou Quality (NVENC)

Keyframe a cada 2s é importante pra HLS futuro — segmentos sem keyframe não funcionam bem em players HTML5.

07

Clique em Iniciar transmissão no painel principal do OBS. O indicador no canto inferior direito deve mudar pra verde com bitrate ativo. Se virar vermelho ou aparecer “Failed to connect”, veja a seção de resolução de problemas abaixo.

Verificação da transmissão

Agora confirme que o stream está realmente chegando no servidor e pode ser consumido. O VLC é o jeito mais rápido — ele fala RTMP nativo sem plugin.

08

No servidor, verifique que o Nginx está aceitando a conexão:

sudo tail -f /var/log/nginx/error.log

Quando o OBS conecta, você vê linhas tipo client connected '...' e publish started.

09

Na sua máquina local, abra o VLC e vá em Mídia → Abrir transmissão de rede. Cole:

rtmp://IP_DO_SEU_SERVIDOR/live/meucanal

Onde meucanal é a chave que você definiu no OBS. Clique em Reproduzir — a live deve aparecer com latência de 2 a 5 segundos. Se aparecer “não foi possível abrir”, confira que o OBS está realmente transmitindo (indicador verde) e que a chave bate exatamente com a URL.

Adicione HLS pra distribuição em browser

Se você quer embedar a live num site, adicione na application live do nginx.conf:

hls on;
hls_path /var/www/hls;
hls_fragment 2s;
hls_playlist_length 10s;

Crie /var/www/hls com permissão pro www-data, sirva via bloco HTTP normal, e aponte um player hls.js pra http://IP/hls/meucanal.m3u8.

Resolução de problemas

OBS conecta mas desconecta após poucos segundos

Quase sempre é falta de banda de upload na sua casa ou no servidor. Reduza o bitrate do OBS pra 2500 kbps e teste de novo. Se estabilizar, o gargalo era banda — calcule upload sustentado real com speedtest-cli na sua máquina e dimensione o bitrate pra ficar abaixo de 70% do upload disponível.

Erro “RTMP_ReadPacket, failed to read RTMP packet header”

Sintoma típico de timeout entre o cliente RTMP (VLC, player) e o servidor. Aumente os timeouts no bloco rtmp do Nginx:

rtmp {
    server {
        listen 1935;
        chunk_size 4096;
        timeout 30s;
        ping 30s;
        ping_timeout 10s;
        # ... resto
    }
}

Recarregue com sudo systemctl reload nginx.

Latência muito alta no VLC (mais de 10 segundos)

VLC tem buffer de rede agressivo por padrão. Em Ferramentas → Preferências → Entrada/Codecs, reduza “Cache de rede” pra 500 ms. RTMP puro entrega latência sub-3s — se ainda passar disso, o problema é o player, não o servidor.

Próximos passos

Com o servidor RTMP funcionando, vale considerar:

  • Adicionar HLS pra browser: bloco hls on no nginx-rtmp expõe o stream como segmentos .ts consumíveis por hls.js — necessário pra player HTML5 no seu site.
  • Configurar gravação automática: diretiva record all salva cada live como FLV em /var/recordings, útil pra retenção e replay sob demanda.
  • Retransmitir pra Twitch/YouTube em paralelo: diretiva push rtmp://... dentro da application reenvia o stream pra outros destinos sem custo extra de upload do OBS.
  • Endurecer com RTMPS via stunnel: pra expor a publicação publicamente sem texto puro, stunnel na frente do nginx-rtmp termina TLS na porta 1936.
  • Migrar pra VPS dedicada à streaming: se você passa de 50 viewers simultâneos ou quer entregar 4K, a CPU vira gargalo no transcoding. Uma VPS Hostini com vCPU dedicada e link de 1 Gbps simétrico segura bem mais carga que servidor compartilhado.

Perguntas frequentes

Qual a diferença entre RTMP e RTMPS pra OBS?

RTMP roda em texto puro na porta 1935; RTMPS adiciona TLS por cima, normalmente na 443 ou 1936. O OBS Studio suporta os dois — RTMPS exige certificado válido no servidor (Let's Encrypt resolve) e configuração de stunnel ou proxy TLS, já que o módulo nginx-rtmp não fala TLS nativamente. Pra produção exposta na internet, prefira RTMPS.

Quanto de banda preciso pra transmitir 1080p60 do OBS?

Em h.264 com bitrate de 6.000 kbps (padrão Twitch pra 1080p60), você consome ~750 KB/s de upload contínuo. Multiplique pelo número de viewers se o servidor for redistribuir — 10 viewers simultâneos em 1080p60 já são 7.5 MB/s de saída. Dimensione a VPS pensando em upload, não download.

Posso usar o mesmo servidor RTMP pra gravar e retransmitir ao mesmo tempo?

Sim. O módulo nginx-rtmp permite combinar diretivas `record` e `push` na mesma `application` — você grava o stream em disco como FLV e simultaneamente reenvia pra Twitch, YouTube ou outro endpoint. Isso é útil pra ter backup local da transmissão sem custo extra de banda do OBS.

Por que minha live no OBS dá 'failed to connect to server'?

Três causas comuns: porta 1935 bloqueada no firewall da VPS (ufw ou iptables), nginx-rtmp não está escutando na interface pública (verifique `ss -tlnp | grep 1935`), ou o stream key tem caracteres especiais que o OBS escapa. Teste primeiro com `telnet IP 1935` da sua máquina — se conectar, o problema é configuração do OBS.

Dá pra entregar a live em HTML5 sem Flash?

Sim, mas RTMP puro não roda em browser moderno. A solução padrão é converter pra HLS no próprio nginx — adicione `hls on; hls_path /tmp/hls;` na application RTMP e sirva o diretório via bloco HTTP. O player no site usa hls.js ou video.js apontando pro `.m3u8`. Latência sobe de ~2s (RTMP) pra ~10-20s (HLS), o que é normal.

Stream key precisa ser secreto mesmo em servidor próprio?

Sim. Quem tiver o stream key consegue publicar conteúdo no seu servidor se você não restringir publish por IP ou token. Use a diretiva `allow publish` com IPs específicos, ou implemente autenticação via `on_publish` callback pra um endpoint HTTP que valida o token antes de aceitar o stream.

Tópicos:
vps
Próximos passos Infraestrutura otimizada pra transmissão ao vivo, gravação e VOD.Monte seu servidor de streaming na Hostini →
Esse tutorial foi útil?
Falar no WhatsApp