📊 Guías Técnicas

Cómo Medir y Monitorear la Latencia en Streaming: Herramientas, Métricas y Diagnóstico

'Mi stream se ve bien' no es una métrica. Glass-to-glass latency, TTFF, player buffer, CDN timing — estas son las métricas que importan. Te enseñamos cómo medirlas, qué herramientas usar (gratis y de pago) y cómo diagnosticar exactamente dónde se está generando el delay.

¿Por qué medir la latencia de tu streaming? Porque "me parece bien" no alcanza

La mayoría de los operadores de streaming no miden su latencia de forma sistemática. Hacen el "test del ojo": abren el stream en otro dispositivo, hablan frente a la cámara y estiman cuántos segundos tarda en llegar. Eso es mejor que nada, pero tiene problemas serios:

  • ⚠️ No es reproducible: La latencia varía por ubicación, hora del día y carga del servidor
  • ⚠️ No captura picos: Tu stream puede tener 3s de latencia en promedio pero picos de 15s cada hora
  • ⚠️ No identifica la causa: ¿El delay es del encoder, del CDN o del player? Sin medición por etapa, no lo sabes

La latencia es un indicador de rendimiento (KPI) que debe medirse, monitorearse y optimizarse — igual que el bitrate, el uptime o los viewers concurrentes. Aquí te enseñamos cómo hacerlo de verdad.

Las métricas que importan

MétricaQué mideValor típicoAlerta si supera
Glass-to-glass latencyCámara a pantalla del espectador (total)3-30s (HLS), <2s (WebRTC)Depende del SLA
Encoder latencyCaptura a salida del encoder50ms - 2s>3s
Ingest latencyEncoder a media server100ms - 1s>2s
Processing latencyMedia server (transcoding)50ms - 500ms>1s
CDN latencyMedia server a edge100ms - 3s>5s
Player bufferBuffer en el reproductor1-6s (HLS), 0-500ms (WebRTC)>10s
Time to first frame (TTFF)Click "play" a primer frame visible1-5s>8s
📏 Glass-to-glass es la métrica gold standard: desde que algo ocurre frente a la cámara hasta que el espectador lo ve en su pantalla. Es la suma de TODAS las latencias del pipeline. Si solo puedes medir una cosa, mide esta.

Cómo medir la latencia glass-to-glass de forma precisa

Método 1: Reloj en cámara (simple y efectivo)

  1. Abre una página web que muestre un reloj con milisegundos (ejemplo: time.is o una app de cronómetro)
  2. Apunta tu cámara al reloj en la pantalla
  3. Abre tu stream en otro dispositivo (celular, laptop)
  4. Toma una foto que capture AMBAS pantallas: el reloj real y el reloj en el stream
  5. La diferencia entre ambos tiempos = latencia glass-to-glass

Limitación: Solo mide un punto en el tiempo, no la variación a lo largo de horas.

Método 2: Timestamps programáticos (para desarrolladores)

  1. Inyecta un timestamp UTC en cada frame del video usando un overlay en OBS (funciona con plugin "datetime")
  2. En el reproductor, lee el timestamp del frame actual
  3. Compara con Date.now() del navegador
  4. La diferencia = latencia aproximada (requiere que ambos relojes estén sincronizados via NTP)

Método 3: APIs del reproductor

Algunos reproductores avanzados exponen métricas de latencia directamente:

ReproductorAPI de latenciaQué reporta
HLS.jshls.latencyDiferencia entre live edge y posición actual
Video.js + HLSplayer.liveTracker.seekableEnd() - currentTime()Buffer latency del player
DASH.jsplayer.getCurrentLiveLatency()Latencia total estimada
WebRTC nativoRTCPeerConnection.getStats()Round trip time, jitter, packet loss
⚠️ Importante: Las APIs de los reproductores miden la latencia DESDE EL SERVIDOR al reproductor, no la latencia total glass-to-glass. Para la latencia completa, necesitas incluir la latencia del encoder y la ingesta — que requiere medición separada.

Herramientas de monitoreo de latencia en tiempo real

Para monitorear la latencia de forma continua (no solo "de vez en cuando"), existen herramientas especializadas:

Herramientas gratuitas

HerramientaQué mideCómo usarla
OBS Stats (F12)Dropped frames, bitrate de salida, CPU/GPUIndica problemas del encoder
HLS Analyzer (Mux)Segmentos HLS, playlist latencyAnaliza un stream HLS existente
FFprobePropiedades del stream, codec infoffprobe -v quiet -print_format json tu_stream.m3u8
Chrome DevTools (Network tab)Timing de descarga de segmentos HLSFiltrar por .ts o .m4s y ver latencia de cada descarga
WebRTC InternalsStats detalladas de conexión WebRTCchrome://webrtc-internals

Herramientas comerciales

HerramientaFuncionalidadPrecio
Mux DataAnalytics de video completo: latency, rebuffering, TTFF, QoE scoreDesde $0 (freemium)
NPAW (Nice People at Work)Video analytics enterprise con latencia por CDN, device, ISPEnterprise
ConvivaReal-time video intelligence, comparación contra benchmarksEnterprise
Datadog APMMonitoreo de infraestructura + custom metrics de videoDesde $15/host/mes

Configurar alertas: los umbrales que importan

  • 🟢 Normal: Latencia glass-to-glass dentro del SLA (ej: <5s para HLS, <2s para WebRTC)
  • 🟡 Warning: Latencia 50% sobre el SLA (ej: 7.5s para HLS con SLA de 5s)
  • 🔴 Crítico: Latencia 100%+ sobre el SLA o picos de >30s. Investigar de inmediato

Diagnóstico: dónde se está generando el delay

Cuando detectas latencia alta, el siguiente paso es identificar EN QUÉ ETAPA se produce. Aquí está el diagrama de diagnóstico:

Árbol de diagnóstico

¿Latencia alta? (>SLA)
│
├── ¿OBS muestra "Dropped frames"?
│     └── SÍ → Problema de encoder o upload
│           ├── CPU >80%? → Bajar preset o resolución
│           ├── Upload saturado? → Bajar bitrate
│           └── WiFi? → Cambiar a Ethernet
│
├── ¿OBS OK pero stream retrasado?
│     └── Problema en servidor o CDN
│           ├── ¿Server CPU alto? → Optimizar transcoding
│           ├── ¿CDN cache stale? → Verificar TTL y purge
│           └── ¿Segmentos HLS grandes? → Reducir a 2s
│
└── ¿Server OK pero viewer retrasado?
      └── Problema en reproductor o red del viewer
            ├── ¿Buffer grande? → Reducir live back buffer
            ├── ¿Player no soporta LL-HLS? → Actualizar HLS.js
            └── ¿Red del viewer lenta? → ABR debería adaptar

Causas más comunes de latencia excesiva

CausaLatencia que agregaSolución
Segmentos HLS de 6-10s6-10s directosReducir a 2s o usar LL-HLS
Keyframe interval alto (4-8s)4-8sReducir a 1-2s
x264 preset "slow" o "medium"1-3sUsar "veryfast" o "ultrafast"
B-frames activados200-500msDesactivar para ultra baja latencia
CDN cache agresivo5-15sReducir TTL de manifiestos HLS
Player con buffer alto3-10sConfigurar liveSyncDuration bajo en HLS.js

Cheat sheet de optimización por protocolo

HLS estándar → latencia objetivo: 6-15 segundos

  • Segmentos de 2 segundos (no 6 ni 10)
  • Keyframe interval = 2 segundos
  • 3 segmentos en playlist (no 5)
  • CDN TTL del manifiesto = 1 segundo

LL-HLS → latencia objetivo: 2-5 segundos

  • Partial segments de 200ms habilitados
  • Blocking playlist reload activo
  • HLS.js con liveSyncDuration: 3
  • CDN que soporte chunked transfer encoding
  • Keyframe interval = 1 segundo

WebRTC (WHIP/WHEP) → latencia objetivo: 0.3-1.5 segundos

  • Codec: H.264 Baseline o VP8 (menor latencia de encoding)
  • B-frames: 0
  • Keyframe interval: 1 segundo
  • Bitrate: CBR preferido sobre VBR (más predecible)
  • Audio: Opus (menor latencia que AAC)
  • SFU en lugar de MCU (menos procesamiento)

SRT ingesta → latencia de contribución objetivo: 100-500ms

  • Parámetro latency: empezar en 300000 (300ms), subir si hay pérdida de paquetes
  • Modo Caller desde OBS (no Listener)
  • Puerto dedicado (no compartido)
  • Encrypt con AES-256 si el contenido es premium
📊 Panel de estadísticas de XtreamCast: XtreamCast ofrece métricas en tiempo real de viewers, bitrate y calidad por cada canal. Con el addon de Ultra Baja Latencia, también reportamos la latencia WebRTC por sesión del espectador, permitiéndote optimizar continuamente.

¿Quieres optimizar la latencia de tu streaming?

XtreamCast te da métricas en tiempo real y ultra baja latencia WebRTC por $15 USD/mes. Mide, monitorea y optimiza con datos reales.