Observabilidad del cliente — Windows
El SDK de OpenTok para Windows ofrece funciones para acceder a estadísticas de red y multimedia en tiempo real durante una sesión de vídeo. Estas funciones proporcionan métricas detalladas sobre la calidad de la transmisión —como la pérdida de paquetes, los datos recibidos y el ancho de banda— y pueden utilizarse en cualquier transmisión emisora o recibida.
El SDK de vídeo de OpenTok ofrece métricas detalladas sobre 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, vídeo, red y del lado del emisor en un formato unificado y adaptado a la sesión, que se mantiene estable durante las transiciones entre conexiones 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 las conexiones entre pares sin procesar.
El SDK también proporciona métricas sobre el estado de la red que ofrecen una evaluación general del estado de la conexión, tanto para los emisores como para los suscriptores. Estas métricas incluyen una puntuación del estado de la red, el motivo que explica dicha puntuación y, en el caso de los suscriptores, una fuente de degradación que indica qué lado de la conexión es responsable de los problemas observados. Véase Estado de la red y origen de la degradación Para más información.
Esta guía incluye las siguientes secciones:
- API de estadísticas de enlaces de audio, vídeo y contenidos multimedia
- Estructuras estadísticas
- Estadísticas del remitente
- Estado de la red y origen de la degradación
- Informe estadístico de RTC
API de estadísticas de enlaces de audio, vídeo y contenidos multimedia
El SDK de OpenTok para Windows envía estadísticas periódicas sobre audio, vídeo y enlaces multimedia, tanto para los emisores como para los suscriptores. Entre ellas se incluyen el recuento de paquetes, las velocidades de bits, los datos sobre la frecuencia de fotogramas, las métricas de pausa y congelación, la información sobre códecs y las métricas de red a nivel de transporte, como la estimación del ancho de banda y la puntuación del estado de la red.
Las estadísticas se facilitan a través de los siguientes eventos:
Publisher.AudioStatsUpdated— estadísticas de audio del editorPublisher.VideoStatsUpdated— estadísticas de vídeo del lado del editorPublisher.MediaLinkStatsUpdated— estadísticas de enlaces multimedia del lado del editor (métricas de transporte)Publisher.VideoQualityChanged— Notificación sobre el cambio en la calidad de vídeo del editorPublisher.NetworkConditionChanged- notificación de cambio de estado de la red del editorSubscriber.AudioStatsUpdated— estadísticas de audio del lado del suscriptorSubscriber.VideoStatsUpdated— estadísticas de vídeo del lado del suscriptorSubscriber.MediaLinkStatsUpdated- estadísticas de enlaces de medios del lado del abonado (métricas de transporte)Subscriber.VideoQualityChanged— Notificación de cambio en la calidad de vídeo de los suscriptoresSubscriber.NetworkConditionChanged— Notificación de cambio en el estado de la red del abonado
Para recibirlos, establezca el controlador de eventos adecuado en el editor o el suscriptor.
Activación de las estadísticas para los 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 Estadísticas de la red de vídeo 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 Media Router, el array incluye un objeto que define las estadísticas de la única secuencia multimedia de audio o vídeo que se envía al Vonage Video Media Router. En una sesión retransmitida, el array incluye un objeto para cada suscriptor de la secuencia publicada.
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 cambio de estado de la red en los editores
Para recibir eventos de cambio de estado de la red del editor, suscríbete al Publisher.NetworkConditionChanged evento:
publisher.NetworkConditionChanged += (sender, args) =>
{
Console.WriteLine($"Publisher network condition: {args.MediaLinkStats.Transport.Condition}");
Console.WriteLine($"Reason: {args.MediaLinkStats.Transport.NetworkConditionReason}");
};
Este evento se activa cuando se detecta un cambio significativo en el estado de la red del editor. Incluye las estadísticas actuales del enlace multimedia junto con las métricas de transporte.
Activación de 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 relacionados con la calidad del 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 cambio de estado de la red en el abonado
Para recibir eventos de cambio de estado de la red del abonado, suscríbete al Subscriber.NetworkConditionChanged evento:
subscriber.NetworkConditionChanged += (sender, args) =>
{
Console.WriteLine($"Local network condition: {args.MediaLinkStats.Transport.Condition}");
Console.WriteLine($"Remote publisher network condition: {args.MediaLinkStats.RemotePublisherTransport.Condition}");
Console.WriteLine($"Degradation source: {args.MediaLinkStats.NetworkDegradationSource}");
};
Este evento se activa cuando se detecta un cambio significativo en el estado de la red del abonado o del editor remoto. Incluye las estadísticas actuales del enlace de medios, con métricas de transporte locales y remotas, así como el origen de la degradación.
Estructuras de datos estadísticas
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 estimado de la conexión (bps)Condition— Puntuación del estado actual de la red (NetworkCondition.Unknown,NetworkCondition.Critical,NetworkCondition.Warning,NetworkCondition.Fair,NetworkCondition.Good, oNetworkCondition.Excellent)NetworkConditionReason— Motivo principal que afecta al estado de la red (NetworkReason.None,NetworkReason.Unknown,NetworkReason.Bandwidth, oNetworkReason.PacketLoss)
Publisher.AudioNetworkStats
Proporciona estadísticas sobre la pista de audio de un editor.
ConnectionId— Identificador de conexión del abonado (solo se transmite por retransmisión)SubscriberId— Identificador de abonado (solo por retransmisión)PacketsLost- Total de paquetes de audio perdidosPacketsSent- Total de paquetes de audio enviadosBytesSent- Total de bytes de audio enviadosTimestamp- 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— Identificador de conexión del abonado (solo se transmite por retransmisión)SubscriberId— Identificador de abonado (solo por retransmisión)PacketsLost- Pérdida de paquetes de vídeoPacketsSent- Paquetes de vídeo enviadosBytesSent— Bytes de vídeo enviadosTimestamp- Fecha en la que se recopilaron las estadísticasStartTime— Fecha y hora en la que comenzaron los totales acumuladosVideoLayers— Lista de capas de emisión simultánea/SVC (VideoLayerStats)
Publisher.VideoLayerStats
Representa una única transmisión simultánea o capa de vídeo SVC.
Width— Ancho de fotograma codificadoHeight- Altura del fotograma codificadoEncodedFrameRate— Fotogramas codificados por segundoBitrate- Velocidad de bits de capa (bps)TotalBitrate— Velocidad de bits, incluida la sobrecarga de RTP (bps)ScalabilityMode- Descripción del VPC/escalabilidad (por ejemplo, "L3T3")QualityLimitationReason- Motivo de la reducción de la calidadCodec- Códec utilizado para esta capa
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éaseTransportStats)
Subscriber.AudioNetworkStatsEventArgs
Proporciona estadísticas sobre la pista de audio de un suscriptor.
PacketsLost— Estimación de paquetes de audio perdidosPacketsReceived- Paquetes de audio recibidosBytesReceived— Fragmentos de audio recibidosTimestamp- Fecha en la que se recopilaron las estadísticasSenderStats- 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ídeoPacketsReceived- Paquetes de vídeo recibidosBytesReceived— Bytes de vídeo recibidosTimestamp- Fecha en la que se recopilaron las estadísticasSenderStats- Estimación de la red del remitente (opcional)Width— Ancho del fotograma descodificadoHeight— Altura del fotograma descodificadoDecodedFrameRate- Fotogramas descodificados por segundoBitrate— Velocidad de transmisión de vídeo (bps)TotalBitrate— Velocidad de transmisión total, incluida la sobrecarga de RTPPauseCount- Numbers of video pauses (>5s without a frame)TotalPausesDuration- Duración total de la pausa (ms)FreezeCount— Número de bloqueos definidos por WebRTCTotalFreezesDuration— Duración total de la congelación (ms)Codec— Códec de decodificación
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 tráfico de la conexión de bajada de este abonado (véaseTransportStats)RemotePublisherTransport- Estadísticas de transporte de la conexión de enlace ascendente del editor remoto (véaseTransportStats). 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.Remote, oNetworkDegradationSource.BothOrUnclear)
Estadísticas del remitente
Véase el Resumen de las estadísticas del lado del remitente.
Activación de las estadísticas 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 compilar 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 remitente
Si el editor ha activado las estadísticas del remitente, los suscriptores las reciben automáticamente a través del 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ónConnectionEstimatedBandwidth- 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 los mismos valores aparecen tanto en las estadísticas de vídeo como en las de 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 de la red y origen de la degradación
El SDK proporciona métricas en tiempo real sobre el estado de la red tanto para los editores como para los suscriptores, incluyendo una puntuación de estado, el motivo que la determina y, en el caso de los suscriptores, la fuente de la degradación. Para obtener una explicación detallada del modelo de estado de la red, las puntuaciones, los motivos y cómo activarlo, consulta el 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: Los eventos de estadísticas de enlaces multimedia incluyen métricas de transporte con
ConditionyNetworkConditionReason. Para los abonados, las estadísticas de los enlaces multimedia también incluyenRemotePublisherTransportyNetworkDegradationSource. - Eventos relacionados con cambios en el estado de la red: Cuando se detecta un cambio significativo en las condiciones de la red, se activan eventos específicos tanto en el emisor como en el receptor.
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.MediaLinkStats.Transport.Condition;
var remoteCondition = args.MediaLinkStats.RemotePublisherTransport.Condition;
var source = args.MediaLinkStats.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 estadístico de RTC
Utiliza la API de estadísticas de RTC para obtener datos de diagnóstico a nivel de WebRTC. Para obtener estadísticas de conexión entre pares de bajo nivel de un emisor, utiliza la Publisher.GetRtcStatsReport() método. Esto proporciona informes de estadísticas RTC para el flujo multimedia. Se trata de una operación asíncrona. Cuando las estadísticas están disponibles, se envía el evento RtcStatsReport. El objeto RtcStatsReportArgs incluye una matriz de EditorRtcStats objetos, que incluyen una propiedad denominada `JsonArrayOfReports`. Se trata de un matriz JSON de informes de estadísticas de RTC, cuyo formato es similar al del objeto `RtcStatsReport` implementado en los navegadores web (véase estos documentos de Mozilla. Véase también esta documentación del W3C.
Para obtener estadísticas de conexión entre pares de bajo nivel de un suscriptor, utiliza el comando Subscriber.GetRtcStatsReport() método. Esto proporciona un informe de estadísticas RTC para el flujo multimedia. Se trata de una operación asíncrona. Cuando las estadísticas están disponibles, se envía el evento RtcStatsReport. RtcStatsReportArgs El objeto incluye una propiedad denominada `JsonArrayOfReports`. Se trata de un matriz JSON de informes de estadísticas de RTC, cuyo formato es similar al 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();