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.
API de estadísticas de audio y Video
El SDK de Vonage Video Windows envía estadísticas periódicas de la red de audio y video para editores y suscriptores. Estas incluyen recuentos de paquetes, tasas 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 editorPublisher.VideoStatsUpdated- estadísticas de vídeo del editorPublisher.VideoQualityChanged- notificación de cambio de calidad de vídeo del editorSubscriber.AudioStatsUpdated- estadísticas de audio de los abonadosSubscriber.VideoStatsUpdated- estadísticas de vídeo del lado del abonadoPublisher.VideoQualityChanged- notificación de cambio de calidad de vídeo del abonado
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}");
}
};
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}");
};
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}");
};
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}");
};
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.
TransportStats
Representa la estimación del ancho de banda a nivel de transporte.
ConnectionEstimatedBandwidth- Ancho de banda de enlace ascendente disponible estimado (bps)
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 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)Transport- Estadísticas de transporte (TransportStats)
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ídeoPacketsSent- Paquetes de vídeo enviadosBytesSent- Bytes de vídeo enviadosTimestamp- Fecha en la que se recopilaron las estadísticasStartTime- Fecha de inicio de los totales acumuladosVideoLayers- Lista de capas simulcast/SVC (VideoLayerStats)Transport- Estadísticas de transporte
Publisher.VideoLayerStats
Representa una única capa de vídeo simulcast o SVC.
Width- Anchura de trama codificadaHeight- Altura del fotograma codificadoEncodedFrameRate- Fotogramas codificados por segundoBitrate- 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 calidadCodec- 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 perdidosPacketsReceived- Paquetes de audio recibidosBytesReceived- Bytes 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- Anchura de trama descodificadaHeight- Altura de trama descodificadaDecodedFrameRate- Fotogramas descodificados por segundoBitrate- Velocidad de bits de vídeo (bps)TotalBitrate- Tasa de bits total, incluida la sobrecarga RTPPauseCount- 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
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.
Suscripción a las estadísticas del lado del remitente
Los suscriptores reciben automáticamente las estadísticas del emisor sólo si el editor las ha habilitado y si el suscriptor registra un oyente para los eventos de estadísticas de red.
Recepción de eventos estadísticos
Las estadísticas del lado del remitente se envían a través de VideoStatsUpdated y AudioStatsUpdated eventos de vídeo y audio. En SenderStats incluida tanto en VideoNetworkStatsEventArgs y AudioNetworkStatsEventArgsproporciona dos propiedades:
ConnectionMaxAllocatedBitrate- El bitrate máximo que puede estimarse para la conexiónConnectionEstimatedBandwidth- El ancho de banda estimado actual para la conexión
Estas dos métricas se calculan por paquete de audio y vídeo, por lo que los mismos valores aparecen en las estadísticas de vídeo y audio. Como reflejan el transporte y no las pistas individuales, las métricas se comparten tanto en audio como en vídeo.
Dentro de los controladores de eventos de estadísticas, puede acceder a las métricas del lado del remitente a través de la opción SenderStats propiedad:
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}");
}
else
{
Console.WriteLine("Sender stats not available yet.");
}
};
El mismo enfoque se aplica a las estadísticas de audio utilizando la función AudioStatsUpdated evento.
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();