RecursosPOST NO BLOG

Como reduzir ao máximo a latência do streaming ao vivo

Mai 2025·8 min de leitura

A latência é o intervalo de tempo entre o momento em que algo acontece na frente da câmera e o momento em que os espectadores veem essa ação na tela. Para plataformas de vídeo sob demanda como Netflix, um atraso de 30 segundos é completamente aceitável. Mas em transmissões ao vivo interativas, aulas, Q&A, eventos corporativos, shows, esse mesmo atraso torna a experiência frustrante e quebra o engajamento.

Neste artigo, exploramos os fatores técnicos que determinam a latência e como a EdTurb mantém o delay de ponta a ponta o mais baixo possível.

O que é latência end-to-end

A latência total de um stream ao vivo é a soma de todos os atrasos ao longo do caminho entre a câmera e o player do espectador. Esse percurso passa por várias etapas:

  • Captura e encoding: o codec comprime os frames em tempo real (H.264, H.265/HEVC, AV1). Codecs mais eficientes introduzem mais latência de processamento.
  • Ingest: o stream codificado é enviado do dispositivo do streamer para o servidor de origem via RTMP, SRT ou WebRTC.
  • Transcodificação: o servidor gera múltiplas qualidades (renditions) para streaming adaptativo.
  • Distribuição CDN: os segmentos de vídeo são replicados para nós de borda ao redor do mundo.
  • Buffer do player: o player acumula alguns segundos antes de começar a reprodução para garantir fluidez.

A latência percebida pelo espectador é a soma de todos esses estágios. Reduzir um estágio sem ajustar os outros frequentemente não gera o resultado esperado.

Os fatores que mais aumentam a latência

Tamanho do GOP (Group of Pictures)

O GOP define quantos frames existem entre dois keyframes consecutivos. GOPs maiores resultam em melhor compressão, mas o player precisa esperar pelo próximo keyframe antes de iniciar a reprodução de um novo segmento. Para baixa latência, mantenha o GOP entre 1 e 2 segundos.

Tamanho dos segmentos HLS

HLS tradicional usa segmentos de 6 a 10 segundos. Quanto maior o segmento, maior o atraso mínimo antes que o player possa começar a reproduzir. O Low Latency HLS (LL-HLS) usa partes de segmento (parts) de 200ms a 500ms, reduzindo drasticamente esse gargalo.

Buffer do player

Players configurados para acumular 3 ou mais segmentos antes de reproduzir adicionam de 6 a 30 segundos de latência por conta própria. Para streaming interativo, configure o buffer para 1 a 2 segmentos.

Os principais protocolos e suas latências típicas

  • RTMP (ingest): 1-3 segundos, usado para enviar o stream da câmera ao servidor, não para distribuição final.
  • HLS tradicional: 15-30 segundos, padrão histórico, ampla compatibilidade, alta latência.
  • LL-HLS (Low Latency HLS): 2-5 segundos, evolução do HLS com suporte nativo em iOS/Safari e grande parte dos players modernos.
  • DASH-LL (CMAF): 3-6 segundos, similar ao LL-HLS, mais adotado em ambientes Android e web.
  • WebRTC: sub-segundo, latência ultra-baixa, ideal para streaming 1-para-1 ou pequenos grupos; escalar para milhares de viewers exige infraestrutura muito especializada.

Como a EdTurb mantém a latência bem baixa

A EdTurb usa LL-HLS como protocolo padrão de distribuição, combinado com uma rede de nós de borda geograficamente distribuídos. Quando um espectador se conecta, o player é direcionado automaticamente para o nó mais próximo, reduzindo a latência de rede.

Além disso, a configuração padrão do SDK já define GOP de 2 segundos, segmentos de 1 segundo e partes LL-HLS de 333ms, valores otimizados para o equilíbrio entre latência e estabilidade.

O diferencial está na compressão de ponta a ponta. Nossos algoritmos reduzem o tamanho dos pacotes de transmissão sem perda perceptível de qualidade — assim como o MP3 reduziu o tamanho dos arquivos de áudio sem comprometer o que o ouvido percebe. Pacotes menores trafegam mais rápido pela rede, então o vídeo chega antes ao espectador. É a mesma lógica de por que a TV digital aberta entrega o gol antes de algumas transmissões via internet: quanto menos dado precisa ser movido, menor a latência.

Configurando sua transmissão para baixa latência

Ao iniciar um stream via SDK, você pode passar opções de latência explicitamente:

javascript
import { EdTurbClient } from "@edturb/node-sdk";

const client = new EdTurbClient({ apiKey: process.env.EDTURB_API_KEY });

await client.streams.start({
  roomId: "<room-id>",
  latencyMode: "low",      // "low" | "standard" | "ultralow"
  encodingProfile: {
    gopSeconds: 1,          // GOP de 1 segundo
    segmentSeconds: 1,      // segmentos de 1s
    partSeconds: 0.333,     // partes LL-HLS de 333ms
  },
});

O modo ultralow usa WebRTC para ingest e distribuição, atingindo latências abaixo de 1 segundo, mas suporta até 500 espectadores simultâneos. Para grandes audiências, prefira o modo low com LL-HLS.

Monitorando a latência em tempo real

O dashboard da EdTurb exibe a latência mediana dos espectadores em tempo real, segmentada por região geográfica. Você também pode usar a API de analytics para integrar esses dados na sua própria interface de monitoramento:

javascript
const metrics = await client.analytics.getStreamMetrics({
  roomId: "<room-id>",
  metrics: ["latency_p50", "latency_p95", "buffer_ratio"],
});

console.log(metrics.latency_p50); // ex: 4200 (ms)

Resumo das boas práticas

  • Configure o GOP entre 1 e 2 segundos para balancear qualidade e latência.
  • Use LL-HLS como protocolo de distribuição (padrão na EdTurb).
  • Defina o buffer do player para no máximo 2 segmentos.
  • Escolha latencyMode: 'low' para eventos com mais de 500 viewers.
  • Monitore latency_p95 para identificar regiões com problemas de rede.
  • Pré-aqueça a CDN antes de eventos grandes para evitar cold-start.