Observabilidad del cliente: Windows

El SDK de video de Vonage expone métricas detalladas de la calidad de la transmisión a través de una API de estadísticas de alto nivel, recomendada para la mayoría de los casos de uso, que proporciona estadísticas de audio, video, red y del lado del emisor en una forma unificada y consciente de la sesión que permanece estable a través de las transiciones de conexión entre pares. Para la depuración avanzada, el SDK también ofrece acceso al informe de estadísticas WebRTC sin procesar, que refleja los datos de la conexión entre pares sin procesar.

El SDK también expone métricas del estado de la red que proporcionan una evaluación de alto nivel del estado de la conexión tanto para editores como para abonados. Estas métricas incluyen una puntuación del estado de la red, el motivo de dicha puntuación y, para los abonados, una fuente de degradación que indica qué lado de la conexión es responsable de cualquier problema observado. Véase Estado de la red y fuente de degradación para más detalles.

API de estadísticas de audio, vídeo y enlaces multimedia

El SDK de Vonage Video Windows envía estadísticas de red periódicas de audio, video y enlaces multimedia tanto para editores como para suscriptores. Estas incluyen recuentos de paquetes, velocidades de bits, datos de velocidad de fotogramas, métricas de pausa/congelación, información de códec y estimación de red del lado del remitente opcional.

Las estadísticas se entregan a través de los siguientes eventos:

  • Publisher.AudioStatsUpdated - estadísticas de audio del editor
  • Publisher.VideoStatsUpdated - estadísticas de vídeo del editor
  • Publisher.MediaLinkStatsUpdated - estadísticas de enlaces multimedia del editor (métricas de transporte)
  • Publisher.VideoQualityChanged - notificación de cambio de calidad de vídeo del editor
  • Publisher.NetworkConditionChanged - notificación de cambio de estado de la red del editor
  • Subscriber.AudioStatsUpdated - estadísticas de audio de los abonados
  • Subscriber.VideoStatsUpdated - estadísticas de vídeo del lado del abonado
  • Subscriber.MediaLinkStatsUpdated - estadísticas de enlaces de medios del lado del abonado (métricas de transporte)
  • Subscriber.VideoQualityChanged - notificación de cambio de calidad de vídeo del abonado
  • Subscriber.NetworkConditionChanged - notificación de cambio de estado de la red de abonados

Para recibirlos, establezca el controlador de eventos adecuado en el editor o el suscriptor.

Estadísticas para editores

Establecer los controladores de eventos correspondientes para Publisher.AudioStatsUpdated y Publisher.VideoStatsUpdated:

publisher.AudioStatsUpdated += (sender, args) =>
{
    foreach (var stat in args.Stats)
    {
        Console.WriteLine($"Audio bytes sent: {stat.BytesSent}");
    }
};

publisher.VideoStatsUpdated += (sender, args) =>
{
    foreach (var stat in args.Stats)
    {
        Console.WriteLine($"Video packets sent: {stat.PacketsSent}");
    }
};

publisher.MediaLinkStatsUpdated += (sender, args) =>
{
    foreach (var stat in args.MediaLinkStats)
    {
        Console.WriteLine($"Publisher uplink bandwidth: {stat.Transport.ConnectionEstimatedBandwidth} bps");
        Console.WriteLine($"Network condition: {stat.Transport.Condition}");
        Console.WriteLine($"Condition reason: {stat.Transport.NetworkConditionReason}");
    }
};

Estos eventos se envían periódicamente para informar de las estadísticas de audio y vídeo del editor. Los manejadores de eventos para estos se pasan en una matriz de AudioNetworkStats y VideoNetworkStats A cada método se le pasan dos objetos: el editor y una matriz de objetos stats . Para un editor en una sesión enrutada (que utiliza el método OpenTok Router multimedia), la matriz incluye un objeto que define las estadísticas para el flujo de medios de audio o video único que se envía al enrutador de medios de video de Vonage. En una sesión retransmitida, la matriz incluye un objeto para cada suscriptor de el flujo publicado.

Recepción de eventos de calidad de vídeo en los editores

Si también te interesan los eventos de calidad de vídeo implementa este manejador:

publisher.VideoQualityChanged += (sender, args) =>
{
    Console.WriteLine($"Publisher video quality changed: {args.Reason}");
};

Recepción de eventos de estado de la red en los editores

Para recibir eventos de cambio de estado de la red para el editor, suscríbase a la función Publisher.NetworkConditionChanged evento:

publisher.NetworkConditionChanged += (sender, args) =>
{
    Console.WriteLine($"Publisher network condition: {args.VideoStats.Transport.Condition}");
    Console.WriteLine($"Reason: {args.VideoStats.Transport.NetworkConditionReason}");
};

Este evento se activa cuando se detecta un cambio significativo en las condiciones de la red para el editor. Proporciona estadísticas tanto de vídeo como de audio, ya que comparten el mismo transporte subyacente.

Activar las estadísticas para abonados

Establecer los controladores de eventos correspondientes para Subscriber.AudioStatsUpdated y Subscriber.VideoStatsUpdated:

subscriber.VideoStatsUpdated += (sender, stats) =>
{
    Console.WriteLine($"Video bytes received: {stats.BytesReceived}");
};

subscriber.AudioStatsUpdated += (sender, stats) =>
{
    Console.WriteLine($"Audio packets received: {stats.PacketsReceived}");
};

subscriber.MediaLinkStatsUpdated += (sender, args) =>
{
    Console.WriteLine($"Local downlink bandwidth: {args.MediaLinkStats.Transport.ConnectionEstimatedBandwidth} bps");
    if (args.MediaLinkStats.RemotePublisherTransport != null)
    {
        Console.WriteLine($"Remote publisher uplink bandwidth: {args.MediaLinkStats.RemotePublisherTransport.ConnectionEstimatedBandwidth} bps");
    }
    Console.WriteLine($"Degradation source: {args.MediaLinkStats.NetworkDegradationSource}");
};

Recepción de eventos de calidad de vídeo en los abonados

Si también te interesan los eventos de calidad de vídeo implementa este manejador:

subscriber.VideoQualityChanged += (sender, args) =>
{
    Console.WriteLine($"Subscriber video quality event: {args.Reason}");
};

Recepción de eventos de estado de la red en los abonados

Para recibir eventos de cambio de estado de la red para el abonado, suscríbase a la función Subscriber.NetworkConditionChanged evento:

subscriber.NetworkConditionChanged += (sender, args) =>
{
    Console.WriteLine($"Local network condition: {args.VideoStats.Transport.Condition}");
    Console.WriteLine($"Remote publisher network condition: {args.VideoStats.RemotePublisherTransport.Condition}");
    Console.WriteLine($"Degradation source: {args.VideoStats.NetworkDegradationSource}");
};

Este evento se activa cuando se detecta un cambio significativo en las condiciones de la red para el abonado o el editor remoto. Proporciona estadísticas de vídeo y audio junto con métricas de transporte local y remoto.

Estructuras de datos estadísticos

Esta sección describe los structs y campos proporcionados por la API de estadísticas de audio y vídeo de Windows Video SDK. Aunque todas las plataformas Video SDK exponen el mismo conjunto de estadísticas, puede haber pequeñas diferencias en la forma en que cada plataforma estructura o nombra los campos individuales. Estas variaciones reflejan convenciones de diseño del SDK específicas de cada plataforma más que diferencias en las métricas subyacentes.

Para una explicación independiente de la plataforma de las estadísticas disponibles y lo que representan, consulte visión general de la observabilidad del cliente.

TransportStats

Representa las métricas a nivel de transporte.

  • ConnectionEstimatedBandwidth - Ancho de banda de conexión disponible estimado (bps)
  • Condition - Puntuación del estado actual de la red (NetworkCondition.Unknown, NetworkCondition.Critical, NetworkCondition.Warning, NetworkCondition.Fair, NetworkCondition.Goodo NetworkCondition.Excellent)
  • NetworkConditionReason - Razón principal que afecta al estado de la red (NetworkReason.None, NetworkReason.Unknown, NetworkReason.Bandwidtho NetworkReason.PacketLoss)

Publisher.AudioNetworkStats

Proporciona estadísticas sobre la pista de audio de un editor.

  • ConnectionId - ID de conexión del abonado (sólo retransmitido)
  • SubscriberId - ID de abonado (sólo retransmitido)
  • PacketsLost - Total de paquetes de audio perdidos
  • PacketsSent - Total de paquetes de audio enviados
  • BytesSent - Total de bytes de audio enviados
  • Timestamp - Hora en la que se recopilaron las estadísticas (ms)
  • StartTime - Hora de inicio de los totales acumulados (ms)

Publisher.VideoNetworkStats

Proporciona estadísticas sobre la pista de vídeo de un editor.

  • ConnectionId - ID de conexión del abonado (sólo retransmitido)
  • SubscriberId - ID de abonado (sólo retransmitido)
  • PacketsLost - Pérdida de paquetes de vídeo
  • PacketsSent - Paquetes de vídeo enviados
  • BytesSent - Bytes de vídeo enviados
  • Timestamp - Fecha en la que se recopilaron las estadísticas
  • StartTime - Fecha de inicio de los totales acumulados
  • VideoLayers - Lista de capas simulcast/SVC (VideoLayerStats)

Publisher.VideoLayerStats

Representa una única capa de vídeo simulcast o SVC.

  • Width - Anchura de trama codificada
  • Height - Altura del fotograma codificado
  • EncodedFrameRate - Fotogramas codificados por segundo
  • Bitrate - Velocidad de bits de capa (bps)
  • TotalBitrate - Tasa de bits incluida la sobrecarga RTP (bps)
  • ScalabilityMode - Descripción del VPC/escalabilidad (por ejemplo, "L3T3")
  • QualityLimitationReason - Motivo de la reducción de la calidad
  • Codec - Códec utilizado para esta capa

Subscriber.AudioNetworkStatsEventArgs

Proporciona estadísticas sobre la pista de audio de un abonado.

  • PacketsLost - Estimación de paquetes de audio perdidos
  • PacketsReceived - Paquetes de audio recibidos
  • BytesReceived - Bytes de audio recibidos
  • Timestamp - Fecha en la que se recopilaron las estadísticas
  • SenderStats - Estimación de la red del remitente (opcional)

Subscriber.VideoNetworkStatsEventArgs

Proporciona estadísticas sobre la pista de vídeo de un abonado.

  • PacketsLost - Pérdida de paquetes de vídeo
  • PacketsReceived - Paquetes de vídeo recibidos
  • BytesReceived - Bytes de vídeo recibidos
  • Timestamp - Fecha en la que se recopilaron las estadísticas
  • SenderStats - Estimación de la red del remitente (opcional)
  • Width - Anchura de trama descodificada
  • Height - Altura de trama descodificada
  • DecodedFrameRate - Fotogramas descodificados por segundo
  • Bitrate - Velocidad de bits de vídeo (bps)
  • TotalBitrate - Tasa de bits total, incluida la sobrecarga RTP
  • PauseCount - Numbers of video pauses (>5s without a frame)
  • TotalPausesDuration - Duración total de la pausa (ms)
  • FreezeCount - Numbers of WebRTC-defined freezes (Número de bloqueos definidos por WebRTC)
  • TotalFreezesDuration - Duración total de la congelación (ms)
  • Codec - Códec decodificador

Publisher.PublisherMediaLinkStats

Proporciona estadísticas a nivel de transporte para la conexión de un editor.

  • Transport - Estadísticas de transporte de este editor (véase TransportStats)

Subscriber.SubscriberMediaLinkStats

Proporciona estadísticas a nivel de transporte para las conexiones de un abonado, incluida la visibilidad del rendimiento de la red del editor remoto. Esto permite a las aplicaciones diagnosticar si los problemas de conexión se originan en el enlace descendente del abonado o en el enlace ascendente del editor.

  • Transport - Estadísticas de transporte de la conexión de enlace descendente de este abonado (véase TransportStats)
  • RemotePublisherTransport - Estadísticas de transporte de la conexión de enlace ascendente del editor remoto (véase TransportStats). Puede estar limitado si las estadísticas del lado del remitente no están activadas.
  • NetworkDegradationSource - Indica la fuente de degradación de la red, si la hay (NetworkDegradationSource.None, NetworkDegradationSource.Local, NetworkDegradationSource.Remoteo NetworkDegradationSource.BothOrUnclear)

Estadísticas del remitente

Véase el estadísticas del lado del remitente.

Activación de las estadísticas del lado del remitente

Las estadísticas del lado del emisor se reciben en los abonados. Para recibir las estadísticas del lado del emisor, habilítelas para el editor del flujo estableciendo el parámetro HasSenderStatsTrack propiedad a true al construir el editor:

var publisherBuilder = new Publisher.Builder()
{
    HasSenderStatsTrack = true
};

Publisher publisher = publisherBuilder.Build();

Si HasSenderStatsTrack no está activado, no se publicará ningún canal de estadísticas del remitente para este editor. El valor por defecto es false.

Recepción de estadísticas del lado del remitente

Si el editor ha activado las estadísticas del lado del remitente, los abonados las reciben automáticamente a través de la función VideoStatsUpdated y AudioStatsUpdated eventos descrito anteriormente. En SenderStats propiedad en ambos VideoNetworkStatsEventArgs y AudioNetworkStatsEventArgs proporciona dos métricas:

  • ConnectionMaxAllocatedBitrate - El bitrate máximo que puede estimarse para la conexión
  • ConnectionEstimatedBandwidth - El ancho de banda estimado actual para la conexión

Estas métricas se calculan por paquete de audio y vídeo, por lo que aparecen los mismos valores en las estadísticas de vídeo y audio.

subscriber.VideoStatsUpdated += (sender, stats) =>
{
    if (stats.SenderStats != null)
    {
        Console.WriteLine($"Connection max allocated bitrate: {stats.SenderStats.ConnectionMaxAllocatedBitrate}");
        Console.WriteLine($"Connection current estimated bandwidth: {stats.SenderStats.ConnectionEstimatedBandwidth}");
    }
};

Estado y degradación de la red Fuente

El SDK proporciona métricas del estado de la red en tiempo real tanto para editores como para suscriptores, incluyendo una puntuación del estado, la razón que impulsa esa puntuación y una fuente de degradación para los suscriptores. Para obtener una explicación completa del modelo de estado de la red, las puntuaciones, los motivos y cómo activarlo, consulte la página visión general de la observabilidad del cliente.

Los datos sobre el estado de la red están disponibles a través de dos canales:

  • Estadísticas periódicas: En Transport en los objetos stats de editor y suscriptor incluye Condition y NetworkConditionReason. Las estadísticas de los abonados también exponen RemotePublisherTransport y NetworkDegradationSource. Véase Estructuras estadísticas para más detalles.
  • Eventos de cambio de estado de la red: Actos dedicados a ambos editor y abonado se activan cuando se detecta un cambio significativo en el estado de la red.

El siguiente ejemplo muestra cómo utilizar los datos de estado de la red del abonado para identificar la fuente de degradación:

subscriber.NetworkConditionChanged += (sender, args) =>
{
    var localCondition = args.VideoStats.Transport.Condition;
    var remoteCondition = args.VideoStats.RemotePublisherTransport.Condition;
    var source = args.VideoStats.NetworkDegradationSource;

    if (source == NetworkDegradationSource.Local)
    {
        Console.WriteLine($"Local network is degraded (condition: {localCondition})");
    }
    else if (source == NetworkDegradationSource.Remote)
    {
        Console.WriteLine($"Remote publisher network is degraded (condition: {remoteCondition})");
    }
    else if (source == NetworkDegradationSource.BothOrUnclear)
    {
        Console.WriteLine($"Degradation source unclear — local: {localCondition}, remote: {remoteCondition}");
    }
};

Informe de estadísticas de RTC

Para obtener las estadísticas de conexión entre pares de bajo nivel de un editor, utilice la función Publisher.GetRtcStatsReport() método. Proporciona informes de estadísticas RTC para el flujo de medios. Se trata de una operación asíncrona. Cuando las estadísticas están disponibles, se envía el evento RtcStatsReport. La dirección RtcStatsReportArgs incluye una matriz de PublisherRtcStats que incluye un JsonArrayOfReports propiedad. Se trata de una matriz JSON de informes de estadísticas RTC, que son similares al formato del objeto RtcStatsReport implementado en los navegadores web (véase estos documentos de Mozilla).

Para obtener estadísticas de conexión entre pares de bajo nivel de un abonado, utilice la función Subscriber.GetRtcStatsReport() método. Esto proporciona un informe de estadísticas RTC para el flujo de medios.

Se trata de una operación asíncrona. Cuando las estadísticas están disponibles, se envía el evento RtcStatsReport. La dirección RtcStatsReportArgs incluye un objeto JsonArrayOfReports propiedad. Se trata de una matriz JSON de informes de estadísticas RTC, que son similares al formato del objeto RtcStatsReport implementado en los navegadores web (véase estos documentos de Mozilla).

Véase también esta documentación del W3C.

Solicitar un informe de estadísticas RTC para un editor:

publisher.RtcStatsReport += (sender, args) =>
{
    foreach (var stat in args.stats)
    {
        Console.WriteLine(stat.JsonArrayOfReports); // Raw RTC JSON
    }
};

publisher.GetRtcStatsReport();