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
OTSubscriberVideoEventPublisherPropertyChangedOTSubscriberVideoEventQualityChangedOTSubscriberVideoEventSubscriberPropertyChanged
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'éditioncreationTime- HorodatagehasAudio- BoolhasVideo- Boolname- Nom du flux (facultatif)session- Session associéestreamId- Identifiant uniquevideoDimensions- CGSizevideoType- 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.preferredFrameRateSubscriberKit.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 connexiongetCreationTime()- Horodatage de la créationhasAudio()- BooléenhasVideo()- BooléengetName()- Nom du cours d'eaugetStreamId()- Identifiant uniquegetVideoHeight()- Hauteur en pixelsgetVideoWidth()- Largeur en pixelsgetVideoType()- 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'éditionCreationTime- Horodatage de la création du fluxHasAudio- Si le flux contient de l'audioHasVideo- Si le flux contient de la vidéoName- Nom du cours d'eauId- Identifiant unique du fluxHeight- Hauteur de la vidéo en pixelsWidth- Largeur de la vidéo en pixelsVideoSourceType- Caméra, partage d'écran ou type de source personnalisé
Possible VideoSourceType valeurs :
VideoSourceType.StreamVideoTypeCameraVideoSourceType.StreamVideoTypeScreenVideoSourceType.StreamVideoTypeCustom
Statistiques de suivi
Ces événements permettent de contrôler les statistiques des flux :
Subscriber.AudioStatsUpdatedSubscriber.VideoStatsUpdatedSubscriber.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.PreferredFramerateSubscriber.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 publicationotc_stream_get_creation_time()- Renvoie l'horodatage de la création du fluxotc_stream_has_audio()- Si le flux publie de l'audiootc_stream_has_video()- Si le flux publie de la vidéootc_stream_has_audio_track()- Si le flux comporte une piste audiootc_stream_has_video_track()- Si le flux comporte une piste vidéootc_stream_get_name()- Renvoie le nom du fluxotc_stream_get_id()- Renvoie l'identifiant unique du fluxotc_stream_get_video_height()- Renvoie la hauteur de la vidéo en pixelsotc_stream_get_video_width()- Renvoie la largeur de la vidéo en pixelsotc_stream_get_video_type()- Renvoie le type de flux vidéo
Types de vidéo possibles :
OTC_STREAM_VIDEO_TYPE_CAMERAOTC_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()