S'abonner : Diagnostics
Ce guide permet d'inspecter les détails des flux, de détecter la fin des flux et de résoudre les problèmes courants liés aux abonnés. Il contient également des conseils pour gérer les problèmes de connectivité dans l'interface utilisateur.
Informations sur les flux
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.
Se référer à le guide du développeur de l'observabilité du client pour obtenir des informations détaillées.
Vous pouvez également obtenir des détails de diagnostic pour les flux actifs afin de faciliter le débogage et l'analyse.
Pour obtenir des statistiques audio et vidéo pour les abonnés, ajoutez des gestionnaires d'événements pour la fonction audioNetworkStats et videoNetworkStats envoyés par l'OTSubscriber. Ces événements fournissent des informations sur le flux de l'abonné, notamment les suivantes :
- Nombre total de paquets audio et vidéo perdus.
- Nombre total de paquets audio et vidéo reçus.
- Nombre total d'octets audio et vidéo reçus.
- La fréquence d'images vidéo moyenne actuelle.
Pour obtenir des statistiques plus détaillées sur les flux, utilisez la fonction Subscriber.getRtcStatsReport() de l'objet OTSubscriber. Elle renvoie une promesse qui, en cas de succès, se résout en une représentation JSON d'un objet RtcStatsReport pour le flux souscrit :
L'objet Stream possède les propriétés suivantes qui définissent le flux :
connection- L'objet Connection correspondant à la connexion qui publie le flux. Vous pouvez comparer cet objet à la propriété de connexion de l'objet Session pour voir si le flux est publié par la page web locale.creationTime- L'horodatage (un nombre) de la création du flux. Cette valeur est calculée en millisecondes. Vous pouvez convertir cette valeur en un objet Date en appelantnew Date(stream.creationTime).hasAudio- (Booléen) Indique si le flux est audio. Cette propriété peut changer si l'éditeur active ou désactive l'audio (en appelant Publisher.publishAudio()). Lorsque cela se produit, le Session envoie unstreamPropertyChangedévénement.hasVideo- (Booléen) Indique si le flux contient de la vidéo. initials-(Booléen) Les initiales du flux (si les initiales ont été définies lors de la création de l'éditeur du flux). initialisé).name- (Chaîne) Le nom du flux. Ce nom est affiché par défaut lorsque l'utilisateur passe la souris sur l'abonné dans le DOM HTML. Vous pouvez toutefois personnaliser l'interface utilisateur afin de masquer le nom ou de l'afficher sans passer la souris.videoDimensions- Cet objet possède deux propriétés :widthetheight. Les deux sont des nombres. Les deux sont des nombres.widthest la largeur du flux encodé ; la propriétéheightest la hauteur du flux encodé. (Ces propriétés sont indépendantes de la largeur réelle des objets Publisher et Subscriber correspondant au flux). Cette propriété peut changer si un flux publié à partir d'un appareil iOS est redimensionné, en fonction d'un changement d'orientation de l'appareil.videoType- Le type de vidéo : "camera", "screen", "custom" ou non défini. Une vidéo "screen" utilise le partage d'écran sur l'éditeur comme source vidéo ; une vidéo "custom" utilise un élément VideoTrack comme source vidéo sur l'éditeur. LesvideoTypeestundefinedlorsqu'un flux est uniquement vocal (voir la rubrique Guide vocal). Cette propriété peut changer si un flux publié à partir d'un appareil mobile passe d'un type de caméra à un type de vidéo de partage d'écran. Pour plus d'informations, voir Partage d'écran - Web.
Les hasAudio, hasVideo, videoDimensionset videoType peuvent changer (par exemple, lorsque l'éditeur active ou désactive la vidéo). Lorsque cela se produit, l'objet Session envoie un événement streamPropertyChanged (voir StreamPropertyChangedEvent).
L'objet Stream possède les méthodes suivantes qui renvoient des valeurs définissant le flux :
getConnection()- (Connection) Renvoie l'objet Connection correspondant à la connexion qui publie le flux. Vous pouvez comparer cette valeur à celle renvoyée par la fonctiongetConnection()de l'objet Session pour savoir si le flux est publié par votre client.getCreationTime()- (Date) Horodatage de la date de création du flux.hasAudio()- (booléen) Indique si le flux contient de l'audio.hasVideo()- (booléen) Indique si le flux contient de la vidéo.getName()- (Chaîne) Renvoie le nom du flux. Ce nom est défini lors de l'initialisation de l'éditeur du flux (voir Initialisation d'un objet Publisher).getStreamId()- (Chaîne) L'identifiant unique du flux.getVideoHeight()- (int) Hauteur du flux, en pixels.getVideoType()- (StreamVideoType) Indique si le flux utilise une source vidéo de type caméra (StreamVideoTypeCamera.StreamVideoTypeCamera), une source vidéo de partage d'écran (StreamVideoTypeScreen.StreamVideoTypeScreen), ou une source vidéo personnalisée (StreamVideoTypeScreen.StreamVideoTypeScreen).
Voir Partage d'écran.
getVideoWidth()- (int) La largeur du flux, en pixels.
L'objet OTStream possède les propriétés suivantes qui définissent le flux :
connection-L'objet OTConnection correspondant à la connexion qui publie le flux. Vous pouvez le comparer à l'objetconnectionde l'objet OTSession pour savoir si le flux est publié par votre client.creationTime-L'horodatage de la date de création du flux.hasAudio-(Bool) Indique si le flux est audio.hasVideo-(Bool) Indique si le flux contient de la vidéo.name-(Chaîne ?) Le nom du flux. Il est défini lors de l'initialisation de l'éditeur du flux (voir Initialisation d'un objet OTPublisher).session-(OTSession) La session Vonage Video à laquelle le flux est lié.streamId-(Chaîne) L'identifiant unique du flux.videoDimensions-Un objet CGSize définissant les dimensions actuelles de la piste vidéo de ce flux.videoType-(OTStreamVideoType) Indique si le flux utilise une source vidéo de type caméra (OTStreamVideoTypeCamera), une source vidéo de partage d'écran (OTStreamVideoTypeScreen), ou une source vidéo personnalisée (OTStreamVideoTypeCustom).
Voir Partage d'écran.
L'objet OTStream possède les propriétés suivantes qui définissent le flux :
connection-L'objet OTConnection correspondant à la connexion qui publie le flux. Vous pouvez le comparer à l'objetconnectionde l'objet OTSession pour savoir si le flux est publié par votre client.creationTime-L'horodatage NSDate correspondant à l'heure de création du flux.hasAudio-(booléen) Indique si le flux contient de l'audio.hasVideo-(booléen) Indique si le flux contient de la vidéo.name-(NSString) Le nom du flux. Il est défini lors de l'initialisation de l'éditeur du flux (voir Initialisation d'un objet OTPublisher).session-(OTSession) La session Vonage Video à laquelle le flux est lié.streamId-(NSString) L'identifiant unique du flux.videoDimensions-Un objet CGSize définissant les dimensions actuelles de la piste vidéo de ce flux.videoType-(OTStreamVideoType) Indique si le flux utilise une source vidéo de type caméra (OTStreamVideoTypeCamera), une source vidéo de partage d'écran (OTStreamVideoTypeScreen), ou une source vidéo personnalisée (OTStreamVideoTypeCustom).
Voir Partage d'écran.
L'objet Stream possède les propriétés suivantes qui définissent le flux :
Connection- (Connection) L'objet Connection correspondant à la connexion qui publie le flux. Vous pouvez comparer cet objet à l'objetConnectionde l'objet Session pour savoir si le flux est publié par votre client.CreationTime- (DateTime) Horodatage de l'heure de création du flux.HasAudio- (bool) Indique si le flux est audio.HasVideo- (bool) Indique si le flux contient de la vidéo.Name- (chaîne) Le nom du flux. Il est défini lors de l'initialisation de l'éditeur du flux (voir Initialisation d'un objet Publisher).Id- (chaîne) L'identifiant unique du flux.Height- (int) Hauteur du flux, en pixels.VideoSourceType- (VideoSourceType) Indique si le flux utilise une source vidéo de type caméra (VideoSourceType.StreamVideoTypeCamera), une source vidéo de partage d'écran (VideoSourceType.StreamVideoTypeScreen), ou une source vidéo personnalisée (VideoSourceType.StreamVideoTypeCustom).
Voir Partage d'écran.
Width- (int) La largeur du flux, en pixels.
Appelez les fonctions suivantes pour obtenir des informations sur un flux :
otc_stream_get_connection()- Renvoie leotc_connectioncorrespondant à la connexion qui publie le flux. Vous pouvez comparer l'identifiant de cette connexion à l'identifiant de la connexion de l'instanceotc_connectionrenvoyée par l'instanceotc_session_get_connection()pour savoir si le flux est publié par votre client.otc_stream_get_creation_time()- Renvoie l'horodatage de la création du flux.otc_stream_has_audio()- Indique si le flux est en train de publier de l'audio.otc_stream_has_video()- Indique si le flux est en train de publier une vidéo.otc_stream_has_audio_track()- Indique si le flux comporte une piste audio.otc_stream_has_video_track()- Indique si le flux comporte une piste vidéo.otc_stream_get_name()- Renvoie le nom du flux. Ce nom est défini lorsque vous initialisez l'éditeur du flux (voir Initialisation d'une structure otc_publisher et mise en place des callbacks de l'éditeur).otc_stream_get_id()- Renvoie l'identifiant unique du flux.otc_stream_get_video_height()- La hauteur du flux, en pixels.otc_stream_get_video_type()- Si le flux utilise la source vidéo d'une caméra (OTC_STREAM_VIDEO_TYPE_CAMERA) ou une source vidéo de partage d'écran (OTC_STREAM_VIDEO_TYPE_SCREEN).otc_stream_get_video_width()- La largeur du flux, en pixels.
Détection de la fin du flux et désactivation de la vidéo
Détecter la fin d'un flux pour effectuer le nettoyage et ajuster l'interface utilisateur.
Lorsque la vidéo d'un abonné est désactivée, l'objet OTSubscriber envoie un message de type videoDisabled événement :
Lorsque le routeur multimédia désactive la vidéo d'un abonné, il se peut que vous souhaitiez ajuster l'interface utilisateur liée à l'abonné.
Les reason de la propriété videoDisabled définit la raison pour laquelle la vidéo a été désactivée. Il peut prendre l'une des valeurs suivantes :
"PublisherPropertyChanged"- L'éditeur a cessé de publier des vidéos."QualityChanged"- Le routeur multimédia a cessé d'envoyer de la vidéo à l'abonné en fonction des changements de qualité du flux. Cette fonction du routeur multimédia permet à l'abonné d'interrompre le flux vidéo lorsque la connectivité se dégrade. (L'abonné continue à recevoir le flux audio, s'il y en a un).
Avant d'envoyer cet événement, lorsque la qualité du flux de l'abonné se détériore à un niveau suffisamment bas pour que le flux vidéo risque d'être désactivé, l'application OTSubscriber objet dispatches a videoDisableWarning événement.
Si la connectivité s'améliore et permet à nouveau la prise en charge de la vidéo, la OTSubscriber envoie un videoEnabled et l'abonné reprend la réception de la vidéo.
Cette fonction n'est disponible que dans les sessions qui utilisent la fonction Routeur média (sessions dont le mode média est réglé sur routé), mais pas dans les sessions dont le mode média est réglé sur relayé.
Lorsque vous publiez un flux, vous pouvez éviter que sa vidéo soit désactivée en raison de la qualité du flux. Définir audioFallbackEnabled à false dans le properties dans le composant OTPublisher.
"SubscriberPropertyChanged"- L'abonné a commencé ou arrêté de s'abonner à la vidéo, en fixant subscribeToVideo à false dans la propriété prop transmise à la fonctionOTSubscriberde la composante."CodecNotSupported"- L'abonné a cessé de s'abonner à la vidéo en raison d'un codec incompatible (voir la section Guide du développeur de codecs vidéo).
Les OTSubscriber l'objet distribue videoEnabled lorsque la vidéo reprend :
La propriété reason de l'objet d'événement videoEnabled définit la raison pour laquelle la vidéo a été activée. Elle peut prendre l'une des valeurs suivantes :
"PublisherPropertyChanged"- L'éditeur a repris la publication de la vidéo."QualityChanged"- Le routeur multimédia reprend l'envoi de la vidéo à l'abonné en fonction des changements de qualité du flux. Cette fonction du routeur multimédia permet à l'abonné d'interrompre le flux vidéo lorsque la connectivité se dégrade, puis de le reprendre si la qualité du flux s'améliore.
Cette fonction n'est disponible que dans les sessions qui utilisent le routeur de médias (sessions dont le mode média est réglé sur routé), et non dans les sessions dont le mode média est réglé sur relayé.
"SubscriberPropertyChanged"- L'abonné a commencé ou arrêté de s'abonner à la vidéo, en définissantsubscribeToVideoà false dans la propriété transmise au composant OTSubscriber."CodecNotSupported"- La vidéo d'abonné a été activée après un changement de codec à partir d'un codec incompatible (voir la section Guide du développeur de codecs vidéo).
Lorsqu'un flux, autre que le vôtre, quitte une session, l'objet Session envoie un message de type streamDestroyed événement :
Lorsqu'un flux que vous publiez quitte une session, l'objet Publisher envoie une commande streamDestroyed événement :
Les streamDestroyed est défini par la classe StreamEvent. L'événement comprend un reason qui explique pourquoi le flux s'est terminé. Ces raisons comprennent "clientDisconnected", "forceDisconnected", "forceUnpublished"ou "networkDisconnected". Pour plus de détails, voir Événement de flux.
Par défaut, lorsqu'un streamDestroyed est déclenché pour un flux auquel vous êtes abonné, les objets Subscriber correspondants (il peut y en avoir plusieurs) sont détruits et supprimés du DOM HTML. Vous pouvez empêcher ce comportement par défaut en appelant la fonction preventDefault() de l'objet StreamEvent :
Il convient de noter que le getSubscribersForStream() d'un objet Session renvoie tous les objets Subscriber d'un flux.
Il se peut que vous souhaitiez empêcher le comportement par défaut et conserver l'Abonné, si vous voulez ajuster les éléments DOM connexes avant de supprimer l'Abonné vous-même. Vous pouvez alors supprimer l'objet Abonné (et son élément DOM) en appelant la fonction destroy() de l'objet Abonné.
Un objet Abonné envoie un destroyed lorsque l'objet a été supprimé du DOM HTML. En réponse à cet événement, vous pouvez choisir d'ajuster (ou de supprimer) les éléments du DOM liés à l'abonné qui a été supprimé.
Lorsque des flux publiés par d'autres clients quittent une session, la fonction onStreamDropped(Session session, Stream stream) de l'objet Session.SessionListener est appelée. Lorsqu'un flux est abandonné, la vue de tout objet Abonné au flux est supprimée de sa vue principale.
Détection de la désactivation de la vidéo d'un abonné
Le routeur multimédia vidéo de Vonage cesse d'envoyer de la vidéo à l'abonné lorsqu'il détecte une dégradation de la connectivité. L'abonné continue à recevoir le flux audio, s'il y en a un. L'abonné continue à recevoir le flux audio, s'il y en a un. onVideoDisabled(subscriber, subscriber) de l'objet SubscriberKit.VideoListener est appelée lorsque le routeur vidéo de Vonage arrête d'envoyer de la vidéo :
Les reason identifie la raison pour laquelle l'abonné a cessé de diffuser de la vidéo en continu.
Lorsque le routeur vidéo Vonage désactive la vidéo d'un abonné, il se peut que vous souhaitiez ajuster l'interface utilisateur liée à l'abonné.
Les onVideoEnabled(subscriber, reason) de l'objet SubscriberKit.VideoListener est appelée lorsque la vidéo reprend :
Les reason identifie la raison pour laquelle la vidéo de l'abonné a repris.
Lorsque vous publiez un flux, vous pouvez éviter que sa vidéo soit désactivée en raison de la qualité du flux. Avant d'appeler la fonction Session.publish(publisher) appeler la méthode setAudioFallbackEnabled(boolean enabled) de l'objet Publisher (ou de l'objet PublisherKit) et transmet la méthode false.
Lorsque les flux quittent une session, le OTSession session(_:streamDestroyed:) est envoyé. Lorsqu'un flux est abandonné, la vue de tout objet OTSubscriber pour le flux est supprimée de sa vue principale. Vérifiez que le flux n'est pas publié par votre propre client et supprimez sa vue de sa vue principale.
func session(_ session: OTSession, streamDestroyed stream: OTStream) {
print("Session streamDestroyed: \(stream.streamId)")
if subscriber?.stream?.streamId == stream.streamId {
subscriber?.view?.removeFromSuperview()
subscriber = nil
}
}
Détection de la désactivation de la vidéo d'un abonné
Le délégué de l'abonné envoie le OTSubscriberDelegate subscriberVideoDisabled(_:reason:) lorsque la vidéo de l'abonné est désactivée :
func subscriberVideoDisabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
print("subscriber video disabled.")
}
Les reason peut être défini comme l'une des constantes suivantes définies dans l'énumération OTSubscriberVideoEventReason :
OTSubscriberVideoEventPublisherPropertyChanged- L'événement vidéo est dû à l'arrêt du flux vidéo par l'éditeur du flux.OTSubscriberVideoEventQualityChanged- L'événement vidéo a été causé par une modification de la qualité du flux vidéo. La qualité du flux peut changer en raison des conditions du réseau ou de l'utilisation de l'unité centrale de l'abonné ou de l'éditeur. Ce motif n'est utilisé que dans les sessions dont le mode média est défini sur "routé". (Voir Le routeur vidéo multimédia de Vonage et les modes médias.) Cette fonction du routeur vidéo multimédia de Vonage permet à un abonné d'interrompre le flux vidéo lorsque la qualité du flux vidéo se dégrade, et le message est envoyé. Lorsque les conditions s'améliorent, le flux vidéo reprend et le message est envoyé.OTSubscriberDelegate subscriberVideoEnabled(_:reason:)est envoyé. Lorsque le flux vidéo est interrompu, l'abonné continue à recevoir le flux audio, s'il y en a un.OTSubscriberVideoEventSubscriberPropertyChanged- L'événement vidéo a été provoqué par une modification de l'adresse de l'abonné.OTSubscriber subscribeToVideopropriété.
Si le flux vidéo reprend, le OTSubscriberDelegate subscriberVideoEnabled(_:reason:) est envoyé.
Lorsque vous publiez un flux, vous pouvez éviter que sa vidéo soit désactivée en raison de la qualité du flux. Avant d'appeler la fonction OTSession publish(_:error:) définir la méthode audioFallbackEnabled de l'objet Publisher (ou PublisherKit) à false.
Les [OTSessionDelegate session:streamCreated:] est envoyé lorsqu'un nouveau flux est créé dans une session. (Un flux est créé lorsqu'un client publie un flux vers la session). Le Objet OTStream possède des propriétés qui définissent le flux. Comparez les propriétés connection de l'objet OTStream avec la propriété connection de l'objet OTSession pour déterminer s'il s'agit d'un flux publié par votre client :
Lorsque des flux publiés par d'autres clients quittent une session, l'objet Session envoie un message StreamDropped événement :
L'objet des arguments de l'événement transmis dans cette fonction est défini par la classe OpenTok.Session.StreamEventArgs. Cette classe comprend un objet Stream propriété. Comparez ce qui suit Stream à l'objet Stream de chaque objet Subscriber pour identifier l'abonné du flux.
Détection de la désactivation de la vidéo d'un abonné
Le routeur multimédia vidéo de Vonage cesse d'envoyer de la vidéo à l'abonné lorsqu'il détecte une dégradation de la connectivité. L'abonné continue à recevoir le flux audio, s'il y en a un. Lorsque le routeur de média vidéo de Vonage arrête d'envoyer de la vidéo, l'objet Abonné envoie un message VideoDisabled événement :
Lorsque le routeur vidéo Vonage désactive la vidéo d'un abonné, il se peut que vous souhaitiez ajuster l'interface utilisateur liée à l'abonné.
L'objet Abonné envoie un VideoDisabled lorsque la vidéo reprend :
Les on_stream_dropped de la fonction de rappel du otc_session_callbacks struct est appelé lorsque le flux d'un autre client est supprimé de la session Vonage Video. La stream Le paramètre transmis à cette fonction est un pointeur sur un fichier otc_stream pour le flux. Appeler la otc_stream_get_id() en passant par la méthode otc_stream pour obtenir l'identifiant du flux.
Détection de la désactivation de la vidéo d'un flux
Les on_stream_has_video_changed de la fonction de rappel du otc_session_callbacks struct est appelé lorsque le flux d'un autre client est supprimé de la session Vonage Video. La stream Le paramètre transmis à cette fonction est un pointeur sur un fichier otc_stream pour le flux. Appeler la otc_stream_get_id() en passant par la méthode otc_stream pour obtenir l'identifiant du flux.
Dépannage (JavaScript)
Conseils pour gérer les erreurs d'abonnement et les problèmes de connectivité.
Pour des informations générales sur le dépannage, voir Inspecteur vidéo.
Traitement des erreurs
Il n'y a qu'une seule façon de s'inscrire - avec Session.subscribe()-et la plupart des erreurs sont liées au réseau. Si l'abonné ne parvient pas à se connecter, il affichera son propre message d'erreur, mais il est préférable d'afficher vous-même un message clair :
Perte de connectivité
Un abonné peut perdre sa connexion après s'être connecté. Le traitement de la streamDestroyed sur la session lorsque le motif est networkDisconnected et informer l'utilisateur sans supprimer l'abonné immédiatement :
Pour la gestion des événements concernant les abonnés et les ajustements au cours de l'exécution (audio bloqué, vidéo désactivée, statistiques), voir S'abonner : Gestion et événements.