Observabilité du client : Linux
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 Linux vidéo 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 relatives à la fréquence d'images, les mesures de pause et de gel, les informations sur les codecs et l'estimation facultative du réseau du côté de l'expéditeur.
Les statistiques sont fournies par l'intermédiaire de :
otc_publisher_callbacks- statistiques côté éditeurotc_subscriber_callbacks- statistiques relatives aux abonnés
Pour les recevoir, activez le rappel approprié sur l'éditeur ou l'abonné.
Activation des statistiques pour les éditeurs
Utilisez les fonctions de rappel on_audio_stats() et on_video_stats() de la méthode otc_publisher_callbacks pour surveiller les statistiques du flux d'un éditeur.
Pour enregistrer des méthodes de rappel pour des rapports périodiques de statistiques audio et vidéo
pour un éditeur, définissez la propriété on_audio_stats() et on_video_stats() fonctions de rappel
lors de l'initialisation du otc_publisher_callbacks structure à utiliser
à utiliser par l'éditeur.
Enregistrer un otc_publisher_callbacks lors de la création de l'éditeur :
struct otc_publisher_callbacks pub_callbacks;
pub_callbacks.on_audio_stats = handle_publisher_audio_stats;
pub_callbacks.on_video_stats = handle_publisher_video_stats;
pub_callbacks.on_video_quality_changed = handle_publisher_quality_change;
Et mettre en œuvre les rappels :
void handle_publisher_audio_stats(otc_publisher* publisher,
void* user_data,
struct otc_publisher_audio_stats audio_stats[],
size_t number_of_stats) {
printf("Audio bytes sent: %lld\n", (long long)audio_stats[0].bytes_sent);
}
void handle_publisher_video_stats(otc_publisher* publisher,
void* user_data,
struct otc_publisher_video_stats video_stats[],
size_t number_of_stats) {
printf("Video packets sent: %lld\n", (long long)video_stats[0].packets_sent);
}
Ces fonctions de rappel sont appelées périodiquement pour fournir des statistiques audio et vidéo à l'éditeur.
pour l'éditeur. Chaque fonction est transmise de la manière suivante un pointeur sur le fichier éditeur struct,
Un pointeur sur le données_utilisateur que vous avez défini pour l'éditeur,
un tableau de statistiques et le nombre de statistiques dans le tableau. Le paramètre stats
est défini par le paramètre otc_publisher_audio_stats
et otc_publisher_video_stats structures. Pour un éditeur dans
une session acheminée (qui utilise l'option 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
Pour les événements de qualité vidéo de l'éditeur :
void handle_publisher_quality_change(otc_publisher* publisher,
void* user_data,
const struct otc_publisher_video_stats* stats,
enum otc_video_reason reason) {
printf("Publisher video quality event: %d\n", reason);
}
Activation des statistiques pour les abonnés
Utilisez les fonctions de rappel on_audio_stats() et on_video_stats() de la méthode otc_subscriber_callbacks pour surveiller les statistiques du flux d'un abonné.
Enregistrer un otc_subscriber_callbacks lors de la création de l'abonné :
struct otc_subscriber_callbacks sub_callbacks;
sub_callbacks.on_audio_stats = handle_subscriber_audio_stats;
sub_callbacks.on_video_stats = handle_subscriber_video_stats;
sub_callbacks.on_video_quality_changed = handle_subscriber_quality_change;
otc_subscriber* subscriber = otc_subscriber_new(stream, sub_callbacks, user_data);
Mettre en œuvre les rappels :
void handle_subscriber_audio_stats(otc_subscriber* subscriber,
void* user_data,
struct otc_subscriber_audio_stats audio_stats) {
printf("Audio packets received: %llu\n", audio_stats.packets_received);
}
void handle_subscriber_video_stats(otc_subscriber* subscriber,
void* user_data,
struct otc_subscriber_video_stats video_stats) {
printf("Video bytes received: %llu\n", video_stats.bytes_received);
}
Réception d'événements relatifs à la qualité vidéo sur les abonnés
Pour les événements de qualité vidéo de l'éditeur :
void handle_subscriber_quality_change(otc_subscriber* subscriber,
void* user_data,
const struct otc_subscriber_video_stats* stats,
enum otc_video_reason reason) {
printf("Subscriber video quality event: %d\n", 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 SDK C. Bien que toutes les plateformes SDK vidéo exposent le même ensemble de statistiques, il peut y avoir des différences mineures dans la façon dont chaque plateforme structure ou nomme les champs individuels. Ces variations reflètent les conventions de conception des SDK spécifiques à chaque plateforme plutôt que des différences dans les mesures sous-jacentes.
otc_transport_stats
Représente l'estimation partagée au niveau du transport.
connection_estimated_bandwidth- Estimation de la largeur de bande de connexion disponible (bps)
otc_publisher_video_stats
Fournit des statistiques sur la piste vidéo d'un éditeur :
connection_id- Dans une session relayée, l'identifiant de connexion du client souscrivant au flux est indiqué.subscriber_id- Dans une session relayée, l'identifiant de l'abonné du client souscrivant au flux est indiqué.packets_lost- Estimation des paquets vidéo perduspackets_sent- Paquets vidéo envoyésbytes_sent- Octets vidéo envoyéstimestamp- Horodatage Unix en millisecondesstart_time- L'horodatage, en millisecondes depuis l'époque Unix, à partir duquel les totaux cumulés ont commencé à s'accumuler.video_layers- Tableau de statistiques sur la couche vidéo (voir otc_publisher_video_layer_stats)transport- Statistiques de transport pour cet éditeur
otc_publisher_audio_stats
Fournit des statistiques sur la piste audio d'un éditeur :
connection_id- Dans une session relayée, l'identifiant de connexion du client souscrivant au flux est indiqué.subscriber_id- Dans une session relayée, l'ID de l'abonnépackets_lost- Estimation des paquets audio perduspackets_sent- Paquets audio envoyésbytes_sent- Octets audio envoyéstimestamp- Horodatage Unix en millisecondesstart_time- L'horodatage, en millisecondes depuis l'époque Unix, à partir duquel les totaux cumulés ont commencé à s'accumuler.transport- Statistiques de transport pour cet éditeur
otc_publisher_video_layer_stats
Représente une couche simulcast ou SVC :
width- Largeur de la trame codéeheight- Hauteur du cadre codéencoded_frame_rate- Encodé fpsbitrate- Débit de la couche (bps)total_bitrate- Débit de la couche incluant le surdébit RTP (bps)scalability_mode- Descripteur SVC/scalability (par exemple, "L3T3")quality_limitation_reason- Raison de la limitation de la qualité (bande passante, CPU, codec, résolution ou changement de couche)codec- Codec utilisé pour cette couche vidéo
otc_subscriber_video_stats
Fournit des statistiques sur la piste vidéo d'un abonné :
packets_lost- Estimation des paquets vidéo perduspackets_received- Paquets vidéo reçusbytes_received- Octets vidéo reçustimestamp- Horodatage Unix en millisecondessender_connection_max_allocated_bitrate- Débit binaire maximal facultatif côté émetteursender_connection_estimated_bandwidth- Largeur de bande estimée du côté de l'expéditeur (en option)width- Largeur de l'image décodée en pixelsheight- Hauteur de l'image décodée en pixelsdecoded_frame_rate- Images décodées par secondebitrate- Débit binaire vidéo (bps)total_bitrate- Débit binaire incluant l'overhead RTP (bps)pause_count- Nombre de pauses (>5s depuis la dernière image)total_pauses_duration- Durée totale de la pause (ms)freeze_count- Nombre de gelstotal_freezes_duration- Durée totale de l'arrêt sur image (ms)codec- Décodeur actuel codec
otc_subscriber_audio_stats
Fournit des statistiques sur la piste audio d'un abonné :
packets_lost- Estimation des paquets perduspackets_received- Paquets reçusbytes_received- Octets reçusaudio_level- Niveau audio (0-1.0)timestamp- Horodatage Unix en millisecondessender_connection_max_allocated_bitrate- Débit binaire maximal facultatif côté émetteursender_connection_estimated_bandwidth- Largeur de bande estimée du côté de l'expéditeur (en option)
Côté émetteur
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é expéditeur, activez-les pour l'éditeur du flux en appelant otc_publisher_settings_set_sender_stats_track() avant de construire l'éditeur :
otc_publisher_settings* settings = otc_publisher_settings_new();
otc_publisher_settings_set_sender_stats_track(settings, OTC_TRUE);
otc_publisher* publisher = otc_publisher_new_with_settings( &publisher_callbacks, settings);
Si la piste de statistiques de l'expéditeur n'est pas activée, aucun canal de statistiques de l'expéditeur ne sera publié pour cet éditeur. La valeur par défaut est OTC_FALSE.
Abonnement aux statistiques côté expéditeur
Les abonnés reçoivent automatiquement les statistiques de l'expéditeur lorsque vous vous inscrivez aux rappels de statistiques vidéo ou audio de l'abonné et que l'éditeur les envoie.
Statistiques de réception Événements
Les statistiques côté expéditeur sont fournies dans le cadre des rappels de statistiques d'abonnés existants. Des champs spécifiques sont inclus dans la balise otc_subscriber_video_stats et otc_subscriber_audio_stats structures :
sender_connection_max_allocated_bitrate- Le débit maximum qui peut être estimé pour la connexionsender_connection_estimated_bandwidth- 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.
void handle_subscriber_video_stats(otc_subscriber* subscriber,
void* user_data,
struct otc_subscriber_video_stats stats) {
printf("Timestamp: %llu ms\n", (unsigned long long)stats.timestamp);
printf("Connection max allocated bitrate: %lld bps\n", (long long)stats.sender_connection_max_allocated_bitrate);
printf("Connection estimated bandwidth: %lld bps\n", (long long)stats.sender_connection_estimated_bandwidth);
}
Rapport statistique RTC
Pour obtenir des statistiques de bas niveau sur les connexions entre pairs pour un éditeur, utilisez la commande otc_publisher_get_rtc_stats_report() fonction. Elle fournit des rapports de statistiques RTC pour le flux média. Il s'agit d'une opération asynchrone. Créer un otc_publisher_rtc_stats_report_cb struct et de le passer dans le otc_publisher_set_rtc_stats_report_cb avant d'appeler la fonction otc_publisher_get_rtc_stats_report(). Lorsque les statistiques sont disponibles, le otc_publisher_rtc_stats_report_cb.on_rtc_stats_report() est appelée. Cette fonction comprend un stats qui est un pointeur sur un tableau de otc_publisher_rtc_stats structures. Cette structure comprend un json_array_of_reports 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 des statistiques de bas niveau sur les connexions entre homologues pour un abonné, utilisez la commande otc_subscriber_get_rtc_stats_report() fonction. Elle fournit un rapport de statistiques RTC pour le flux média.
Il s'agit d'une opération asynchrone. Créer un otc_subscriber_rtc_stats_report_cb et la passer dans la structure otc_subscriber_set_rtc_stats_report_cb avant d'appeler la fonction otc_subscriber_get_rtc_stats_report(). Lorsque les statistiques sont disponibles, le otc_subscriber_rtc_stats_report_cb.on_rtc_stats_report est appelée.
Cette fonction de rappel comprend un json_array_of_reports paramètre. 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.