Saltar a contenido

Telemetría del Player WebRTC

Descripción general

El player WebRTC de Netsocs incluye un panel de telemetría en tiempo real (OSD - On-Screen Display) que muestra métricas de calidad del stream en tres niveles: visor (browser), relay (DriversHub) y driver (dispositivo fuente). Permite diagnosticar problemas de conectividad, calidad de video y rendimiento de red sin necesidad de herramientas externas.

alt text

Requisitos: - Player en modo V2 (WebRTC/WHEP) - Versión 3.3.0 o superior


Activar y desactivar el panel de telemetría

alt text 1. Pase el cursor sobre el player para mostrar los controles de zoom (esquina inferior derecha). 2. Haga clic en el icono de informacion (circulo con i). 3. El panel OSD aparece en la esquina superior derecha del player. 4. Haga clic nuevamente en el mismo icono para ocultarlo.

El estado del panel no persiste entre sesiones; se desactiva al recargar la pagina.


Panel de telemetria: secciones

El OSD se actualiza cada 10 segundos. Muestra hasta tres secciones segun la disponibilidad de datos.


Seccion Viewer (Visor)

Metricas recogidas directamente desde la conexion WebRTC del navegador via RTCPeerConnection.getStats().

Campo Descripcion Interpretacion
Estado (punto de color) Indica si el stream esta fluyendo Verde = LIVE (frames avanzando), Amarillo = STALLED (sin avance pero con datos previos), Rojo = NO DATA (sin estadisticas)
Resolucion Dimensiones del frame de video en pixeles Ej: 1920x1080. Resolucion baja puede indicar calidad sub o limitacion del encoder
FPS Fotogramas por segundo decodificados en el visor Valores tipicos: 15-30 fps. Caidas indican perdida de paquetes o CPU limitada
Bitrate (flecha hacia abajo) Tasa de bits recibida calculada entre dos muestras Muestra en Kbps o Mbps segun magnitud. Caidas sostenidas indican congestion de red
RTT Round-Trip Time del candidato ICE nominado Tiempo de ida y vuelta en milisegundos. Por debajo de 100 ms es optimo; por encima de 300 ms puede generar latencia visible
Loss Porcentaje de paquetes perdidos 0% es ideal. Valores por encima de 1% degradan la calidad de video
ICE Tipo de candidato ICE usado host = conexion directa LAN, srflx = NAT traversal sin relay, relay = TURN relay (mayor latencia)
Dec Tiempo promedio de decodificacion por frame En milisegundos. Valores altos (>20 ms en hardware moderno) indican sobrecarga de CPU o decodificacion por software

Seccion Relay

Metricas publicadas por DriversHub desde el relay WHIP/WHEP del servidor. Se actualizan aproximadamente cada 10 segundos en el servidor y se obtienen via GET /whip/{streamId}/telemetry?source=relay&limit=1.

Campo Descripcion
Codec Codec de video negociado por el relay (ej: H264, H265/HEVC)
Bitrate (flecha hacia abajo) Bitrate observado en el relay en Kbps o Mbps
RTT Latencia medida por el relay
Jit Jitter del relay en milisegundos; variacion en los tiempos de llegada de paquetes

Esta seccion solo aparece si el relay reporta al menos un punto de telemetria.


Seccion Driver

Metricas publicadas por el driver del dispositivo (ej: Hikvision) directamente al endpoint de telemetria. Se actualizan cada 5 segundos en el dispositivo y se obtienen via GET /whip/{streamId}/telemetry?source=publisher&limit=1.

Campo Descripcion Interpretacion
RTP Total de paquetes RTP enviados por el driver Numero acumulado; sirve para verificar que el dispositivo esta transmitiendo activamente
IDR Fotogramas IDR (keyframes) enviados Fotogramas de referencia completa. El player los necesita para sincronizar el stream. Si es muy bajo puede causar demoras al conectar
Err Errores RTP en el driver (mostrado en rojo cuando > 0) Indica fallos en la capa de transporte del dispositivo; puede requerir reinicio del canal

Esta seccion solo aparece si el driver reporta datos de telemetria.


Recoleccion y envio de datos

El hook useStreamTelemetry ejecuta un ciclo cada 10 segundos por visor activo:

  1. Lee estadisticas WebRTC del RTCPeerConnection local.
  2. Calcula bitrate, perdida de paquetes y tiempo de decodificacion entre muestras consecutivas.
  3. Detecta si el stream esta fluyendo comparando framesDecoded entre muestras.
  4. Envia un punto de telemetria al servidor via POST /whip/{streamId}/telemetry (fire-and-forget).
  5. Consulta el ultimo punto de relay y publisher en paralelo para actualizar el OSD.

Cada sesion de visor genera un viewer_id UUID unico al montar el componente; permite al backend correlacionar multiples viewers del mismo stream.


Diagnostico de problemas comunes

Sintoma en el OSD Posible causa Accion sugerida
Estado STALLED (amarillo) Congestion de red o encoder detenido Verificar conectividad; revisar estado del canal en el driver
Estado NO DATA (rojo) PeerConnection sin estadisticas aun o stream no iniciado Esperar el primer ciclo de 10 s; si persiste, revisar la conexion WHEP
Loss > 1% Perdida de paquetes en la red Revisar la red entre el browser y el relay; considerar pasar a calidad sub
ICE: relay El browser no pudo conectar directamente El servidor TURN esta siendo usado; puede incrementar la latencia
Err > 0 en Driver (rojo) Errores RTP en el dispositivo fuente Reiniciar el canal de video en la configuracion del dispositivo
Seccion Relay ausente DriversHub no recibio datos del relay Verificar que el servicio DriversHub este en linea y el stream WHIP activo
Seccion Driver ausente El driver no envia telemetria El modelo del dispositivo puede no soportar telemetria activa

Consideraciones de privacidad y rendimiento

  • Los datos de telemetria incluyen identificadores del stream y del visor pero no contienen video ni audio.
  • El envio es keepalive: true para no bloquearse al cerrar la pestana.
  • El impacto en rendimiento es minimo: una llamada getStats() y dos peticiones HTTP cada 10 segundos por visor.
  • Deshabilitar la feature flag player_webrtc_telemetry_info elimina completamente el boton OSD y detiene la recoleccion de datos del visor.