Stats

A continuación se detalla el listado de estadísticas de la conexión en curso. Podrás obtener las estadísticas mediante el evento stats.

En total, las estadísticas disponibles son 64 puntos de medición divididos en instantáneos y acumulativos.

Debes considerar que estas estadísticas corresponden a cada conexión con cada participante. Por lo tanto, recibirás bajo el mismo evento múltiples estadísticas de cada participante.

Las estadísticas estarán disponibles cada 5 segundos.

Tipos de estadísticas

Identificación de Conexión

Nombre
Tipo
Medición
Enums
Descripción

peerId

string

Instantáneo

-

Identificador único del peer remoto en la sesión. Útil para correlacionar métricas cuando hay múltiples participantes.

ip

string

Instantáneo

-

Dirección IP del endpoint de conexión (puede ser del relay TURN si connectionType es "relay").

port

number

Instantáneo

-

Puerto del endpoint de conexión.

protocol

string

Instantáneo

udp, tcp

Protocolo de transporte. UDP es lo más común y eficiente, TCP indica problemas de firewall.

networkType

string

Instantáneo

ethernet, wifi, cellular, vpn, unknown

Tipo de interfaz de red del cliente.

connectionType

string

Instantáneo

host, srflx, relay

Modo de conexión ICE. host=P2P directo (ideal), srflx=través de NAT, relay=servidor TURN (mayor latencia).

timestamp

number

Instantáneo

-

Momento de captura de métricas (epoch en milisegundos).

ua

string

Instantáneo

-

User-Agent del navegador. Útil para correlacionar problemas específicos de browser/versión.


Audio - Recepción (Inbound)

Nombre
Tipo
Medición
Enums
Descripción

audioJitter

number

Instantáneo

-

Variación en segundos del tiempo de llegada de paquetes. Valores normales: 0-0.03s. >0.05s indica red inestable.

audioPacketsLost

number

Acumulativo

-

Total de paquetes perdidos desde inicio. Packet loss rate = lost/(lost+received). <1% excelente, 1-3% aceptable, >5% problemático.

audioPacketsReceived

number

Acumulativo

-

Total de paquetes de audio recibidos exitosamente desde inicio de la conexión.

audioInboundLevel

number

Instantáneo

-

Nivel de audio entrante (0-1). Útil para detectar silencio o problemas de captura del peer remoto.

audioBytesReceived

number

Acumulativo

-

Total de bytes de audio recibidos. Para calcular bitrate actual: diferencial entre snapshots dividido por tiempo transcurrido.

audioPacketsDiscarded

number

Acumulativo

-

Paquetes que llegaron pero se descartaron (buffer overflow, jitter excesivo). Idealmente 0.

audioInboundMimeType

string

Instantáneo

audio/opus, audio/PCMU, audio/PCMA, etc.

Códec de audio entrante. Opus es el estándar moderno (adaptativo, eficiente).


Audio - Transmisión (Outbound)

Nombre
Tipo
Medición
Enums
Descripción

audioLevel

number

Instantáneo

-

Nivel de audio saliente (0-1). 0=silencio, útil para Voice Activity Detection (VAD).

audioSampleDuration

number

Instantáneo

-

Duración en segundos de cada muestra de audio. Típicamente 0.02 (20ms).

audioBytesSent

number

Acumulativo

-

Total de bytes de audio enviados desde inicio de la conexión.

audioPacketsSent

number

Acumulativo

-

Total de paquetes de audio enviados desde inicio.

audioActive

boolean

Instantáneo

true, false

Indica si el track de audio está activo (no muted/stopped).

audioMimeType

string

Instantáneo

audio/opus, audio/PCMU, audio/PCMA, etc.

Códec configurado para envío. Debería coincidir con audioInboundMimeType del peer.

audioRetransmittedBytesSent

number

Acumulativo

-

Bytes retransmitidos por NACK. Valores altos indican pérdida de paquetes en el peer receptor.

audioRetransmittedPacketsSent

number

Acumulativo

-

Paquetes retransmitidos por NACK. Alto indica que el peer tiene packet loss.

audioTotalPacketSendDelay

number

Acumulativo

-

Tiempo total en segundos que los paquetes esperaron en queue antes de enviarse. Valores altos=CPU saturada o bandwidth limitado.

audioNack

number

Acumulativo

-

Negative Acknowledgments recibidos (peer pidiendo retransmisión). Alto=peer tiene packet loss.

audioBitrate

number

Instantáneo

-

Bitrate configurado en bps. Opus típicamente usa 32000 bps (32kbps) para voz.


Video - Recepción (Inbound)

Nombre
Tipo
Medición
Enums
Descripción

videoJitter

number

Instantáneo

-

Variación en segundos del tiempo de llegada de paquetes de video. >0.05s causa frames irregulares y stuttering.

videoPacketsLost

number

Acumulativo

-

Total de paquetes de video perdidos. Packet loss afecta más a video que audio (no hay interpolación automática).

videoDecoder

string

Instantáneo

-

Decodificador usado por el navegador: libvpx (VP8/VP9), FFmpeg, h264, etc.

videoIPliLoss

number

Acumulativo

-

Intra Picture Loss Indicator. Frames I (keyframes) perdidos. Crítico porque sin ellos el video se congela hasta el próximo keyframe.

videoFramesDropped

number

Acumulativo

-

Frames que llegaron pero se descartaron (decoder saturado, late arrival). Alto=CPU limitada o jitter excesivo.

videoFreezes

number

Acumulativo

-

Cantidad de congelamientos de video detectados. Indica problemas graves de red o CPU.

videoFreezeDuration

number

Acumulativo

-

Duración total en segundos de todos los congelamientos.

videoFrames

number

Acumulativo

-

Total de frames decodificados exitosamente desde inicio de la conexión.

videoPacketsReceived

number

Acumulativo

-

Total de paquetes de video recibidos exitosamente.

videoBytesReceived

number

Acumulativo

-

Total de bytes de video recibidos. Indica bandwidth real consumido por video entrante.

videoInboundMimeType

string

Instantáneo

video/VP8, video/VP9, video/H264, video/AV1

Códec de video recibido.


Video - Transmisión (Outbound)

Nombre
Tipo
Medición
Enums
Descripción

videoMimeType

string

Instantáneo

video/VP8, video/VP9, video/H264, video/AV1

Códec de video configurado para envío. Debería coincidir con videoInboundMimeType del peer.

videoBytesSent

number

Acumulativo

-

Total de bytes de video enviados. Comparar con videoBytesReceived del peer para detectar packet loss.

videoPacketsSent

number

Acumulativo

-

Total de paquetes de video enviados desde inicio.

videoActive

boolean

Instantáneo

true, false

Track de video activo (no stopped ni sin frames).

videoNack

number

Acumulativo

-

NACKs recibidos del peer. Alto=peer tiene packet loss en video.

videoOPliLoss

number

Acumulativo

-

Outbound Picture Loss Indicator. Similar a IPli pero para salida (frames I que no llegaron al peer).

videoLimitations

string

Instantáneo

none, bandwidth, cpu, other

Indica qué está limitando la calidad del video enviado actualmente.

videoLimitationsBandwidth

number

Acumulativo

-

Tiempo en segundos que la conexión ha estado limitada por bandwidth.

videoLimitationsCpu

number

Acumulativo

-

Tiempo en segundos que la conexión ha estado limitada por CPU (encoder saturado).

videoLimitationsNone

number

Acumulativo

-

Tiempo en segundos sin limitaciones (operación óptima).

videoLimitationsOther

number

Acumulativo

-

Tiempo en segundos limitado por otras causas.

videoRetransmittedBytesSent

number

Acumulativo

-

Bytes de video retransmitidos por NACK del peer.

videoRetransmittedPacketsSent

number

Acumulativo

-

Paquetes de video retransmitidos por NACK del peer.

videoTotalPacketSendDelay

number

Acumulativo

-

Delay acumulado en segundos de paquetes en queue antes de envío. >0.1s acumulado en pocos segundos=problema.

videoBitrate

number

Instantáneo

-

Bitrate configurado/target en bps. 1700000 (1.7Mbps) es razonable para 720p/30fps.


Métricas de Transporte

Nombre
Tipo
Medición
Enums
Descripción

availableOutgoingBitrate

number

Instantáneo

-

Estimación dinámica del bandwidth disponible en bps. WebRTC ajusta calidad basándose en esto. Fluctuaciones grandes=red inestable.

bytesDiscardedOnSend

number

Acumulativo

-

Bytes descartados antes de enviar (típicamente por congestión). Idealmente 0.

packetsDiscarded

number

Acumulativo

-

Paquetes descartados antes de enviar. Idealmente 0.

bytesReceived

number

Acumulativo

-

Total de bytes recibidos combinado (audio + video + overhead SRTP/STUN).

bytesSent

number

Acumulativo

-

Total de bytes enviados combinado (audio + video + overhead SRTP/STUN).

currentRoundTripTime

number

Instantáneo

-

RTT actual en segundos (ping). <0.1s excelente, 0.1-0.3s aceptable, >0.3s lag notable.

lastPacketReceived

number

Instantáneo

-

Timestamp epoch en ms del último paquete recibido. Útil para detectar conexión muerta.

lastPacketSent

number

Instantáneo

-

Timestamp epoch en ms del último paquete enviado.

packetsSent

number

Acumulativo

-

Total de paquetes RTP/RTCP enviados.

packetsReceived

number

Acumulativo

-

Total de paquetes RTP/RTCP recibidos.

totalRoundTripTime

number

Acumulativo

-

Suma de todas las mediciones de RTT en segundos. Dividir por cantidad de mediciones para obtener RTT promedio.

state

string

Instantáneo

checking, connected, completed, failed, disconnected, closed, succeeded

Estado ICE de la conexión. checking=negociando, connected/completed=funcional, failed/disconnected=sin conectividad, closed=finalizada.


Valores de referencias

  1. Packet Loss <3%: Tanto audio como video

  2. Jitter <30ms (0.03s): Especialmente en audio

  3. RTT <150ms (0.15s): Para videoconferencia interactiva

  4. videoLimitations = "none": Si no, identificar cuello de botella

  5. connectionType = "host": Ideal, "relay" como fallback

Ejemplo

{
    "peerId": "2ff7ac7e-38c5-4c51-b4b6-16889bd645b0",
    "ip": "XX.XXX.XX.XX",
    "port": 56749,
    "protocol": "udp",
    "networkType": "ethernet",
    "connectionType": "relay",
    "timestamp": 1761845560417,
    "ua": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36",
    "audioJitter": 0.006,
    "audioPacketsLost": 0,
    "audioPacketsReceived": 211,
    "audioInboundLevel": 0.043733024079103976,
    "audioBytesReceived": 16610,
    "audioPacketsDiscarded": 0,
    "audioInboundMimeType": "audio/opus",
    "audioLevel": 0,
    "audioSampleDuration": 0,
    "audioBytesSent": 16403,
    "audioPacketsSent": 209,
    "audioActive": true,
    "audioMimeType": "audio/opus",
    "audioRetransmittedBytesSent": 0,
    "audioRetransmittedPacketsSent": 0,
    "audioTotalPacketSendDelay": 0.000607,
    "audioNack": 0,
    "videoJitter": 0.008,
    "audioBitrate": 32000,
    "videoPacketsLost": 0,
    "videoDecoder": "libvpx",
    "videoIPliLoss": 0,
    "videoFramesDropped": 0,
    "videoFreezes": 0,
    "videoFreezeDuration": 0,
    "videoFrames": 30,
    "videoPacketsReceived": 737,
    "videoBytesReceived": 734399,
    "videoInboundMimeType": "video/VP8",
    "videoMimeType": "video/VP8",
    "videoBytesSent": 646396,
    "videoPacketsSent": 660,
    "videoActive": true,
    "videoNack": 0,
    "videoOPliLoss": 0,
    "videoLimitations": "none",
    "videoLimitationsBandwidth": "",
    "videoLimitationsCpu": "",
    "videoLimitationsNone": 4.905,
    "videoLimitationsOther": "",
    "videoRetransmittedBytesSent": 0,
    "videoRetransmittedPacketsSent": 0,
    "videoTotalPacketSendDelay": 0.225802,
    "videoBitrate": 1700000,
    "availableOutgoingBitrate": 3412307,
    "bytesDiscardedOnSend": 0,
    "packetsDiscarded": 0,
    "bytesReceived": 792115,
    "bytesSent": 672476,
    "currentRoundTripTime": 0.035,
    "lastPacketReceived": 1761845560415,
    "lastPacketSent": 1761845560400,
    "packetsSent": 901,
    "packetsReceived": 1040,
    "totalRoundTripTime": 0.141,
    "state": "succeeded"
}

Última actualización

¿Te fue útil?