Observabilité du client : Fenêtres
Le SDK Video de Vonage expose des mesures détaillées de la qualité du flux par le biais d'une API de statistiques de haut niveau - recommandée pour la plupart des cas d'utilisation - qui fournit des statistiques audio, vidéo, réseau et côté expéditeur sous une forme unifiée et consciente de la session, qui reste stable lors des transitions de connexion entre pairs. Pour le débogage avancé, le SDK permet également d'accéder au rapport de statistiques WebRTC brut, qui reflète les données de connexion entre pairs non traitées.
API pour les statistiques audio et vidéo
Le SDK Video Windows de Vonage envoie des statistiques périodiques sur le réseau audio et vidéo pour les éditeurs et les abonnés. Ces statistiques comprennent le nombre de paquets, les débits binaires, les données sur la fréquence d'images, les mesures de pause et de gel, les informations sur les codecs et l'estimation optionnelle du réseau du côté de l'expéditeur.
Les statistiques sont fournies par le biais des événements suivants :
Publisher.AudioStatsUpdated- statistiques audio côté éditeurPublisher.VideoStatsUpdated- statistiques vidéo côté éditeurPublisher.VideoQualityChanged- notification de changement de qualité vidéo de l'éditeurSubscriber.AudioStatsUpdated- statistiques audio côté abonnéSubscriber.VideoStatsUpdated- statistiques vidéo côté abonnéPublisher.VideoQualityChanged- notification de changement de qualité vidéo de l'abonné
Pour les recevoir, définissez le gestionnaire d'événement approprié sur l'éditeur ou l'abonné.
Activation des statistiques pour les éditeurs
Définir les gestionnaires d'événements correspondants pour Publisher.AudioStatsUpdated et 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}");
}
};
Ces événements sont envoyés périodiquement pour fournir des statistiques audio et vidéo à l'éditeur.
Les gestionnaires d'événements sont transmis sous la forme d'un tableau d'événements AudioNetworkStats
et VideoNetworkStats
Chaque méthode reçoit deux objets : l'éditeur et un tableau d'objets stats
. Pour un éditeur dans une session routée (qui utilise la méthode OpenTok
Routeur média), le tableau comprend un objet, définissant les statistiques pour le flux audio ou vidéo unique envoyé au routeur vidéo de Vonage.
le flux audio ou vidéo unique envoyé au routeur vidéo de Vonage.
Dans une session relayée, le tableau comprend un objet pour chaque abonné au flux publié.
au flux publié.
Réception d'événements de qualité vidéo sur les éditeurs
Si vous êtes également intéressé par les événements relatifs à la qualité vidéo, mettez en œuvre ce gestionnaire :
publisher.VideoQualityChanged += (sender, args) =>
{
Console.WriteLine($"Publisher video quality changed: {args.Reason}");
};
Activation des statistiques pour les abonnés
Définir les gestionnaires d'événements correspondants pour Subscriber.AudioStatsUpdated et Subscriber.VideoStatsUpdated:
subscriber.VideoStatsUpdated += (sender, stats) =>
{
Console.WriteLine($"Video bytes received: {stats.BytesReceived}");
};
subscriber.AudioStatsUpdated += (sender, stats) =>
{
Console.WriteLine($"Audio packets received: {stats.PacketsReceived}");
};
Réception d'événements relatifs à la qualité vidéo sur les abonnés
Si vous êtes également intéressé par les événements relatifs à la qualité vidéo, mettez en œuvre ce gestionnaire :
subscriber.VideoQualityChanged += (sender, args) =>
{
Console.WriteLine($"Subscriber video quality event: {args.Reason}");
};
Statistiques Structures de données
Cette section présente les structures et les champs fournis par l'API de statistiques audio et vidéo du Windows Video SDK. Bien que toutes les plates-formes SDK vidéo exposent le même ensemble de statistiques, il peut y avoir des différences mineures dans la façon dont chaque plate-forme structure ou nomme les champs individuels. Ces variations reflètent les conventions de conception des SDK spécifiques à chaque plate-forme plutôt que des différences dans les mesures sous-jacentes.
TransportStats
Représente l'estimation de la largeur de bande au niveau du transport.
ConnectionEstimatedBandwidth- Estimation de la largeur de bande disponible sur la liaison montante (bps)
Publisher.AudioNetworkStats
Fournit des statistiques sur la piste audio d'un éditeur.
ConnectionId- ID de connexion de l'abonné (relayé uniquement)SubscriberId- ID de l'abonné (relayé uniquement)PacketsLost- Total des paquets audio perdusPacketsSent- Total des paquets audio envoyésBytesSent- Nombre total d'octets audio envoyésTimestamp- Date à laquelle les statistiques ont été recueillies (ms)StartTime- Horodatage du début des totaux cumulés (ms)Transport- Statistiques au niveau du transport (TransportStats)
Publisher.VideoNetworkStats
Fournit des statistiques sur la piste vidéo d'un éditeur.
ConnectionId- ID de connexion de l'abonné (relayé uniquement)SubscriberId- ID de l'abonné (relayé uniquement)PacketsLost- Paquets vidéo perdusPacketsSent- Paquets vidéo envoyésBytesSent- Octets vidéo envoyésTimestamp- Date à laquelle les statistiques ont été recueilliesStartTime- Date à laquelle les totaux cumulés ont commencéVideoLayers- Liste des couches simulcast/SVC (VideoLayerStats)Transport- Statistiques au niveau du transport
Publisher.VideoLayerStats
Représente une seule couche vidéo simulcast ou SVC.
Width- Largeur de la trame codéeHeight- Hauteur du cadre codéEncodedFrameRate- Images codées par secondeBitrate- Débit de la couche (bps)TotalBitrate- Débit binaire incluant l'overhead RTP (bps)ScalabilityMode- Description du SVC/de l'évolutivité (par exemple, "L3T3")QualityLimitationReason- Raison de la réduction de la qualitéCodec- Codec utilisé pour cette couche
Subscriber.AudioNetworkStatsEventArgs
Fournit des statistiques sur la piste audio d'un abonné.
PacketsLost- Estimation des paquets audio perdusPacketsReceived- Paquets audio reçusBytesReceived- Octets audio reçusTimestamp- Date à laquelle les statistiques ont été recueilliesSenderStats- Estimation du réseau du côté de l'expéditeur (facultatif)
Subscriber.VideoNetworkStatsEventArgs
Fournit des statistiques sur la piste vidéo d'un abonné.
PacketsLost- Paquets vidéo perdusPacketsReceived- Paquets vidéo reçusBytesReceived- Octets vidéo reçusTimestamp- Date à laquelle les statistiques ont été recueilliesSenderStats- Estimation du réseau du côté de l'expéditeur (facultatif)Width- Largeur de la trame décodéeHeight- Hauteur du cadre décodéDecodedFrameRate- Images décodées par secondeBitrate- Débit binaire vidéo (bps)TotalBitrate- Débit binaire total, y compris le surdébit RTPPauseCount- Nombre de pauses vidéo (>5s sans image)TotalPausesDuration- Durée totale de la pause (ms)FreezeCount- Nombre de gels définis par WebRTCTotalFreezesDuration- Durée totale de l'arrêt sur image (ms)Codec- Décodeur codec
Statistiques côté expéditeur
Voir le aperçu des statistiques côté expéditeur.
Activation des statistiques côté expéditeur
Les statistiques côté émetteur sont reçues par les abonnés. Pour recevoir les statistiques côté émetteur, il faut les activer pour l'éditeur du flux en définissant l'attribut HasSenderStatsTrack à la propriété true lors de la construction de l'éditeur :
var publisherBuilder = new Publisher.Builder()
{
HasSenderStatsTrack = true
};
Publisher publisher = publisherBuilder.Build();
Si HasSenderStatsTrack n'est pas activé, aucun canal de statistiques sur les expéditeurs ne sera publié pour cet éditeur. La valeur par défaut est false.
Abonnement aux statistiques côté expéditeur
Les abonnés reçoivent automatiquement les statistiques de l'expéditeur uniquement si l'éditeur les a activées et si l'abonné enregistre un auditeur pour les événements de statistiques du réseau.
Statistiques de réception Événements
Les statistiques du côté de l'expéditeur sont fournies par l'intermédiaire de l'application VideoStatsUpdated et AudioStatsUpdated pour la vidéo et l'audio. Les SenderStats qui est incluse dans les deux catégories de VideoNetworkStatsEventArgs et AudioNetworkStatsEventArgsLe système de gestion de l'information de l'Union européenne (UE), offre deux propriétés :
ConnectionMaxAllocatedBitrate- Le débit maximum qui peut être estimé pour la connexionConnectionEstimatedBandwidth- La largeur de bande actuelle estimée pour la connexion
Ces deux mesures sont calculées par paquet audio-vidéo, de sorte que les mêmes valeurs apparaissent dans les statistiques audio et vidéo. Parce qu'elles reflètent le transport plutôt que les pistes individuelles, les mesures sont partagées entre l'audio et la vidéo.
Dans les gestionnaires d'événements de statistiques, vous pouvez accéder aux mesures du côté de l'expéditeur grâce à la fonction optionnelle SenderStats propriété :
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.");
}
};
La même approche s'applique aux statistiques audio à l'aide de la fonction AudioStatsUpdated événement.
Rapport statistique RTC
Pour obtenir des statistiques de bas niveau sur les connexions entre pairs d'un éditeur, utilisez la commande Publisher.GetRtcStatsReport() méthode. Cette méthode fournit des rapports de statistiques RTC pour le flux multimédia. Il s'agit d'une opération asynchrone. Lorsque les statistiques sont disponibles, l'événement RtcStatsReport est envoyé. La méthode RtcStatsReportArgs comprend un tableau de PublisherRtcStats qui comprend un JsonArrayOfReports propriété. Il s'agit d'un tableau JSON de rapports de statistiques RTC, qui sont similaires au format de l'objet RtcStatsReport mis en œuvre dans les navigateurs web (voir ces documents de Mozilla).
Pour obtenir les statistiques de connexion d'un abonné à un pair de bas niveau, utilisez la commande Subscriber.GetRtcStatsReport() méthode. Cette méthode permet d'obtenir un rapport de statistiques RTC pour le flux multimédia.
Il s'agit d'une opération asynchrone. Lorsque les statistiques sont disponibles, l'événement RtcStatsReport est envoyé. L'événement RtcStatsReportArgs comprend un objet JsonArrayOfReports propriété. Il s'agit d'un tableau JSON de rapports de statistiques RTC, qui sont similaires au format de l'objet RtcStatsReport mis en œuvre dans les navigateurs web (voir ces documents de Mozilla).
Voir aussi cette documentation du W3C.
Demande d'un rapport de statistiques RTC pour un éditeur :
publisher.RtcStatsReport += (sender, args) =>
{
foreach (var stat in args.stats)
{
Console.WriteLine(stat.JsonArrayOfReports); // Raw RTC JSON
}
};
publisher.GetRtcStatsReport();