S'abonner : Gestion et événements

Ce guide traite de la gestion du comportement des abonnés et de la gestion des événements survenant lors de l'exécution.

Gestion des flux d'abonnés (React Native)

Détection d'un changement des dimensions vidéo d'un flux

Les dimensions vidéo d'un flux peuvent varier si un flux diffusé depuis un appareil mobile change de taille (par exemple, en raison d'un changement d'orientation de l'appareil) ou si la fenêtre source d'un partage d'écran est redimensionnée.

Lorsque les dimensions d'une vidéo en streaming changent, le Session envoie un streamPropertyChanged événement, avec changedProperty fixé à videoDimensions.

<OTSubscriber
  eventHandlers={{
    streamVideoDimensionsChanged: (event) => {
      console.log('stream video dimensions changed -- stream ID:', event.streamId);
      console.log('new dimensions:', event.width, 'x', event.height);
    },
  }}
/>

Réglage de la fréquence d'images et de la résolution préférées

Lors de l'abonnement à un flux qui utilise le vidéo évolutive fonctionnalité, vous pouvez configurer preferredResolution à 'auto' pour gérer automatiquement la résolution des vidéos des abonnés et optimiser l'utilisation du processeur et du réseau.

Pour un contrôle avancé, définissez la fréquence d'images et la résolution souhaitées pour le flux auquel vous êtes abonné :

<OTSubscriber
  properties={{
    preferredFrameRate: 15,
    preferredResolution: { width: 640, height: 480 },
  }}
/>

Il s'agit de recommandations, et non d'ordres. Le routeur multimédia sélectionne la couche disponible la plus proche qui correspond aux conditions réseau réelles de l'abonné. Elles n'ont aucun effet dans sessions relayées, lorsque la vidéo adaptative est désactivée ou lorsque le codec négocié est le H.264. Pour découvrir d'autres techniques permettant de réduire la consommation de ressources lors de sessions de grande envergure, consultez la Guide de connexion à un seul pair.

Détecter quand les flux quittent une session

Lorsqu'un flux distant quitte une session, le OTSubscriber envoie un streamDestroyed événement. Cet événement comprend des informations telles que streamId, name, reason, hasAudio, hasVideoet videoType. Pour plus d'informations sur l'événement et ses reason valeurs, voir le S'abonner au guide de diagnostic.

<OTSubscriber
  eventHandlers={{
    streamDestroyed: (event) => {
      console.log('Stream stopped. Reason: ' + event.reason);
    },
  }}
/>

Rendu personnalisé des abonnés

Par défaut, OTSubscriber affiche les vues enfants pour les vidéos des abonnés. Vous pouvez également fournir une fonction de rendu pour contrôler entièrement le rendu à l'aide de renderView:

<OTSubscriber
  renderView={(streamId) => (
    <View style={styles.subscriberTile}>
      <OTSubscriberView streamId={streamId} style={styles.video} />
    </View>
  )}
/>

Définition des propriétés des flux

Définissez les propriétés globales pour tous les abonnés via le subscriberProperties appuyer sur OTSession, ou définir les propriétés propres à chaque flux via le properties appuyer sur OTSubscriber. Pour consulter la liste complète des biens disponibles, rendez-vous sur le Référence de l'API OTSubscriber.

// Global defaults for all subscribers in the session
<OTSession
  subscriberProperties={{
    subscribeToAudio: true,
    subscribeToVideo: true,
  }}
/>

// Per-stream override
<OTSubscriber
  properties={{
    subscribeToAudio: true,
    subscribeToVideo: false,
  }}
/>

Gestion des flux d'abonnés (iOS Swift)

Gérer les abonnés, les événements et les préférences dans iOS.

Détection de la désactivation de la vidéo d'un abonné

func subscriberVideoDisabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
    print("subscriber video disabled.")
}

Raisons possibles

  • OTSubscriberVideoEventPublisherPropertyChanged
  • OTSubscriberVideoEventQualityChanged
  • OTSubscriberVideoEventSubscriberPropertyChanged

Lorsque la vidéo reprend :

func subscriberVideoEnabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
    print("subscriber video enabled.")
}

Obtenir des informations sur un cours d'eau

Les OTStream L'objet comprend

  • connection - Le lien avec l'édition
  • creationTime - Horodatage
  • hasAudio - Bool
  • hasVideo - Bool
  • name - Nom du flux (facultatif)
  • session - Session associée
  • streamId - Identifiant unique
  • videoDimensions - CGSize
  • videoType - Caméra, écran ou personnalisé

Vous pouvez surveiller les statistiques à l'aide de OTSubscriberKitNetworkStatsDelegate.

Voir le guide d'observabilité du client pour plus de détails.

Réglage de la fréquence d'images et de la résolution préférées

Pour les flux vidéo évolutifs, vous pouvez définir :

  • SubscriberKit.preferredFrameRate
  • SubscriberKit.preferredResolution

Gestion des flux d'abonnés (JavaScript)

Restriction de la fréquence d'images d'un flux souscrit

Vous pouvez également limiter la fréquence d'images du flux vidéo d'un abonné.

Pour limiter la fréquence d'images d'un abonné, appelez la fonction restrictFrameRate() méthode de l'objet Subscriber, en lui transmettant true:

subscriber.restrictFrameRate(true);

Entrer false et la fréquence d'images du flux vidéo n'est pas limitée :

subscriber.restrictFrameRate(false);

Lorsque la fréquence d'images est limitée, l'image vidéo de l'abonné s'actualise une fois par seconde ou moins. Cette fonctionnalité n'est disponible que dans sessions acheminées. Dans les sessions relayées, l'appel de cette méthode n'a aucun effet.

La limitation de la fréquence d'images de l'abonné présente les avantages suivants :

  • Il réduit l'utilisation de l'unité centrale.
  • Il réduit la largeur de bande du réseau consommée par l'application.
  • Il vous permet de vous abonner à plusieurs flux simultanément.

La réduction de la fréquence d'images d'un abonné n'a aucun effet sur la fréquence d'images de la vidéo chez les autres clients. Pour découvrir d'autres techniques permettant de réduire l'utilisation des ressources lors de sessions de grande envergure, consultez la section Guide de connexion à un seul pair.

Détection du blocage ou du déblocage de l'audio d'un abonné

Certains navigateurs bloquent automatiquement la lecture audio jusqu'à ce que l'utilisateur interagisse avec la page. Pour une mise en œuvre complète de la gestion de l'audio bloqué, y compris la désactivation du bouton de lecture par défaut et l'affichage de votre propre interface utilisateur, consultez Affichage d'un élément d'interface utilisateur personnalisé lorsque l'audio de l'abonné est bloqué.

Par ailleurs, l'abonné inclut un isAudioBlocked() méthode qui renvoie true si le son est coupé ou false si ce n'est pas le cas.

Détection de la désactivation de la vidéo d'un abonné

Lorsque la vidéo de l'abonné est désactivée, l'objet « Subscriber » déclenche un videoDisabled événement. Lorsque le Media Router désactive la vidéo d'un abonné, vous pouvez souhaiter adapter l'interface utilisateur associée à cet abonné.

Les reason de la propriété videoDisabled L'objet « event » définit la raison pour laquelle la vidéo a été désactivée ('publishVideo', 'quality'ou 'subscribeToVideo'). Pour une description complète de chaque motif, consultez le S'abonner au guide de diagnostic. Avant que la vidéo ne soit désactivée en raison de quality, l'abonné envoie un videoDisableWarning événement. Pour éviter qu'un flux ne soit désactivé pour des raisons de qualité, consultez la section Guide de solution de secours audio pour les abonnés.

subscriber.on('videoDisableWarning', () => {
  showConnectionWarning(subscriber.id);
});

subscriber.on('videoDisableWarningLifted', () => {
  hideConnectionWarning(subscriber.id);
});

subscriber.on('videoDisabled', (event) => {
  if (event.reason === 'quality') {
    showVideoDisabledOverlay(subscriber.id);
  }
});

subscriber.on('videoEnabled', () => {
  hideVideoDisabledOverlay(subscriber.id);
});

Par défaut, l'abonné affiche son propre indicateur de désactivation de la vidéo lorsque quality C'est la raison. Pour la remplacer par votre propre interface utilisateur, définissez style.videoDisabledDisplayMode à 'off' dans les options d'abonnement. Pour en savoir plus sur le comportement spécifique à certains codecs (par exemple, pourquoi les flux H.264 ne sont pas concernés par la bascule en fonction de la qualité), consultez la Guide des codecs vidéo.

Obtenir des statistiques sur les abonnés (Web)

Les getStats() La méthode d'un objet `Subscriber` vous fournit des informations sur le flux de l'abonné. Pour obtenir la liste complète des champs disponibles, consultez la S'abonner au guide de diagnostic.

Le code suivant enregistre les taux de perte et les débits binaires toutes les secondes :

window.setInterval(() => {
  subscriber.getStats((error, stats) => {
    if (error) {
      console.error('Error getting subscriber stats:', error.message);
      return;
    }
    if (stats.video) {
      console.log('video bitrate:', stats.video.bitrate, 'bps');
      const total = stats.video.packetsLost + stats.video.packetsReceived;
      console.log('video packet loss ratio:', total > 0 ? stats.video.packetsLost / total : 0);
    }
    if (stats.audio) {
      console.log('audio bitrate:', stats.audio.bitrate, 'bps');
    }
  });
}, 1000);

Pour obtenir les statistiques d'un flux publié par le client local, vous devez utiliser une session routée et définir le testNetwork à l'option true lors de l'abonnement :

const subscriber = session.subscribe(stream, 'container', {
  testNetwork: true,
});

Pour obtenir des statistiques plus détaillées sur le flux, utilisez subscriber.getRtcStatsReport(). Pour une description complète de tous les champs disponibles, consultez le Guide sur l'observabilité côté client.

Réglage de la fréquence d'images et de la résolution préférées (Web)

Lors de l'abonnement à un flux qui utilise le vidéo évolutive fonctionnalité, vous pouvez configurer preferredResolution à 'auto' pour gérer automatiquement la résolution vidéo des abonnés et optimiser l'utilisation du processeur et du réseau. Pour obtenir des explications détaillées sur le fonctionnement de ces paramètres, les valeurs prises en charge et les limitations, consultez la Guide vidéo évolutif.

Set (jeu de mots) preferredResolution et preferredFrameRate dans les options que vous transmettez à Session.subscribe() (ou utilisez Subscriber.setPreferredResolution() et Subscriber.setPreferredFrameRate() (après s'être abonné) :

// Set at subscribe time using 'auto' (recommended)
const subscriber = session.subscribe(stream, 'container', {
  preferredResolution: 'auto',
});

// Or set explicitly after subscribing
subscriber.setPreferredResolution({ width: 1280, height: 720 });
subscriber.setPreferredFrameRate(30);

// Downgrade for a thumbnail tile
subscriber.setPreferredResolution({ width: 320, height: 240 });
subscriber.setPreferredFrameRate(7);

Gestion des flux d'abonnés (Android)

Gérer les abonnés, les événements et les préférences dans Android.

Détection de la désactivation de la vidéo d'un abonné

Lorsque la vidéo est désactivée :

override fun onVideoDisabled(subscriber: SubscriberKit, reason: String) {
    // Video disabled
}

Lorsque la vidéo reprend :

override fun onVideoEnabled(subscriber: SubscriberKit, reason: String) {
    // Video resumed
}

Les reason explique pourquoi le changement s'est produit.

Obtenir des informations sur un cours d'eau

Les Stream fournit :

  • getConnection() - Objet de connexion
  • getCreationTime() - Horodatage de la création
  • hasAudio() - Booléen
  • hasVideo() - Booléen
  • getName() - Nom du cours d'eau
  • getStreamId() - Identifiant unique
  • getVideoHeight() - Hauteur en pixels
  • getVideoWidth() - Largeur en pixels
  • getVideoType() - Caméra, partage d'écran ou personnalisé

Vous pouvez également suivre les statistiques :

  • setAudioStatsListener()
  • setVideoStatsListener()
  • setMediaLinkStatsListener()
  • getRtcStatsReport()

Réglage de la fréquence d'images et de la résolution préférées

Pour les flux vidéo évolutifs, vous pouvez définir des préférences :

  • SubscriberKit.setPreferredFrameRate()
  • SubscriberKit.setPreferredResolution()

Gestion des flux d'abonnés (Windows)

Gérer les abonnés, les événements et les préférences dans Windows.

Détection de la désactivation de la vidéo d'un abonné

L'OpenTok Media Router peut cesser d'envoyer des vidéos si les conditions du réseau se dégradent.

L'abonné continue à recevoir le son s'il est disponible.

Lorsque la vidéo est désactivée, le Subscriber envoie un VideoDisabled événement :

subscriber.VideoDisabled += Subscriber_VideoDisabled;

public void Subscriber_VideoDisabled(object sender)
{
    // Display a user interface notification.
}

Lorsque la vidéo reprend :

subscriber.VideoEnabled += Subscriber_VideoEnabled;

public void Subscriber_VideoEnabled(object sender)
{
    // Video resumes for the subscriber.
}

Il se peut que vous souhaitiez adapter l'interface utilisateur en fonction de ces événements.

Obtenir des informations sur un cours d'eau

Les Stream expose les propriétés suivantes :

  • Connection - Le lien avec l'édition
  • CreationTime - Horodatage de la création du flux
  • HasAudio - Si le flux contient de l'audio
  • HasVideo - Si le flux contient de la vidéo
  • Name - Nom du cours d'eau
  • Id - Identifiant unique du flux
  • Height - Hauteur de la vidéo en pixels
  • Width - Largeur de la vidéo en pixels
  • VideoSourceType - Caméra, partage d'écran ou type de source personnalisé

Possible VideoSourceType valeurs :

  • VideoSourceType.StreamVideoTypeCamera
  • VideoSourceType.StreamVideoTypeScreen
  • VideoSourceType.StreamVideoTypeCustom

Statistiques de suivi

Ces événements permettent de contrôler les statistiques des flux :

  • Subscriber.AudioStatsUpdated
  • Subscriber.VideoStatsUpdated
  • Subscriber.MediaLinkStatsUpdated

Pour récupérer les statistiques RTC de bas niveau :

subscriber.GetRtcStatsReport();

Réglage de la fréquence d'images et de la résolution préférées

Pour les flux utilisant la fonction de vidéo évolutive, configurez :

  • Subscriber.PreferredFramerate
  • Subscriber.PreferredResolution

Gestion des flux d'abonnés (Linux)

Gérer les abonnés, les événements et les préférences sous Linux.

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 la disponibilité vidéo d'un flux change.

Les stream est un pointeur sur un otc_stream struct.

Utiliser :

otc_stream_get_id(stream)

pour récupérer l'identifiant du flux.

Obtenir des informations sur un cours d'eau

Les fonctions suivantes permettent de récupérer des informations sur les flux :

  • otc_stream_get_connection() - Renvoie la connexion de publication
  • otc_stream_get_creation_time() - Renvoie l'horodatage de la création du flux
  • otc_stream_has_audio() - Si le flux publie de l'audio
  • otc_stream_has_video() - Si le flux publie de la vidéo
  • otc_stream_has_audio_track() - Si le flux comporte une piste audio
  • otc_stream_has_video_track() - Si le flux comporte une piste vidéo
  • otc_stream_get_name() - Renvoie le nom du flux
  • otc_stream_get_id() - Renvoie l'identifiant unique du flux
  • otc_stream_get_video_height() - Renvoie la hauteur de la vidéo en pixels
  • otc_stream_get_video_width() - Renvoie la largeur de la vidéo en pixels
  • otc_stream_get_video_type() - Renvoie le type de flux vidéo

Types de vidéo possibles :

  • OTC_STREAM_VIDEO_TYPE_CAMERA
  • OTC_STREAM_VIDEO_TYPE_SCREEN

Statistiques de suivi

Utilisez ces fonctions de rappel pour les abonnés :

  • on_audio_stats()
  • on_video_stats()
  • on_media_link_stats()

Pour récupérer les statistiques RTC de bas niveau, utilisez :

otc_subscriber_get_rtc_stats_report()

Réglage de la fréquence d'images et de la résolution préférées

Pour les flux utilisant la fonction de vidéo évolutive, vous pouvez définir la fréquence d'images et la résolution préférées à l'aide de la fonction de vidéo évolutive :

  • otc_subscriber_set_preferred_framerate()
  • otc_subscriber_set_preferred_resolution()