S'abonner à des flux — Windows
Une fois que vous avez connecté à une session, vous pouvez vous abonner aux flux de la session. Lorsque vous vous abonnez à un flux, vous pouvez afficher sa vidéo dans l'application.
Cette rubrique comprend les sections suivantes :
- Détection des flux dans une session
- S'abonner à un flux
- Se désabonner d'un flux
- Reconnexion automatique
- Détecter quand les flux quittent une session
- Détection de la désactivation de la vidéo d'un abonné
- Obtenir des informations sur un flux
- Réglage de la fréquence d'images et de la résolution
Détection des flux dans une session
L'objet Session envoie un StreamReceived lorsqu'un flux publié par un autre client est créé dans une session. (Un flux est créé lorsqu'un client publie un flux à la session ou si le flux existe lorsque vous vous connectez à la session).
@Override
session.StreamReceived += Session_StreamReceived;
private void Session_StreamReceived(object sender, Session.StreamEventArgs e)
{
Console.WriteLine("Session stream received");
}
Vous pouvez vous abonner à un flux pour l'afficher dans votre application. Reportez-vous à la section suivante.
S'abonner à un flux
Pour s'abonner à un flux, il faut d'abord instancier un objet Subscriber en appelant la fonction Subscriber(context, stream, renderer) constructor. Transmettez-lui le contexte d'application Windows de l'abonné, l'objet Stream et un moteur de rendu vidéo. Le OpenTok.IVideoRenderer définit le moteur de rendu vidéo. L'interface OpenTok.VideoRenderer Cette classe, incluse dans le SDK Windows d'OpenTok, permet d'afficher la vidéo dans un contrôle Windows Presentation Framework. L'objet VideoRenderer est une sous-classe de System.Windows.Controls.Control. Vous pouvez ajouter cet élément à votre hiérarchie de vue. Vous pouvez également créer votre propre moteur de rendu vidéo personnalisé qui implémente l'interface OpenTok.IVideoRenderer l'interface.
Appeler le subscribe() de l'objet Session pour commencer à s'abonner au flux :
VideoRenderer videoRenderer = new VideoRenderer();
// Add the video renderer to the application's view hierarchy.
Subscriber subscriber = new Subscriber(Context.Instance, stream, renderer);
subscriber.Error += Subscriber_Error;
session.subscribe(subscriber);
private void Session_Error(object sender, Subscriber.ErrorEventArgs e)
{
Console.WriteLine("Subscriber error:" + e.ErrorCode);
}
L'objet Abonné envoie un Error s'il y a une erreur dans l'abonnement au flux. Vérifier l'événement ErrorCode des arguments transmis à l'événement pour connaître les détails de l'échec de la souscription. (La propriété OpenTok.ErrorCode L'enum définit ErrorCode valeurs.)
L'objet Abonné envoie un Connected lorsque l'application commence à recevoir le flux de l'abonné.
Remarque : La classe OpenTok.Subscriber implémente l'interface System.IDisposable. Veillez à appeler la classe Dispose() de l'objet Subscriber pour libérer ses ressources lorsque vous n'avez plus besoin de l'objet (par exemple, lorsque l'Subscriber arrête la diffusion de vidéos ou lorsque l'application ou la fenêtre se ferme).
Vous pouvez créer un pilote audio personnalisé à utiliser par tous les éditeurs et abonnés.
Se désabonner d'un flux
Pour arrêter la lecture d'un flux auquel vous êtes abonné, appelez la fonction Session.Unsubscribe(subscriber) méthode :
session.unsubscribe(subscriber);
L'abonné est déconnecté et sa vue est supprimée de sa vue secondaire.
Reconnexion automatique
Si un client perd la connexion à un flux auquel il est abonné (par exemple, en raison d'une interruption de la connexion réseau chez l'un ou l'autre des clients), il tentera de se reconnecter automatiquement au flux. Lorsque la connexion au flux est interrompue et que le client tente de se reconnecter, l'objet Session envoie un StreamDisconnected événement. Lorsque la connexion est rétablie, l'objet « Subscriber » envoie un StreamReconnected . Si le client ne peut pas restaurer le flux, l'objet Session envoie un message StreamDropped événement.
En réponse à ces événements, votre application peut (éventuellement) afficher des notifications d'interface utilisateur indiquant les états de déconnexion temporaire, de reconnexion et de destruction :
session.StreamDropped += Session_StreamDropped;
subscriber.StreamDisconnected += Subscriber_StreamDisconnected;
subscriber.StreamReconnected += Subscriber_StreamReconnected;
public void Subscriber_StreamDisconnected(object sender)
{
// Display a user interface notification.
}
public void Subscriber_StreamReconnected(object sender)
{
// Display a user interface notification.
}
public void Session_StreamDropped(object sender, EventArgs e)
{
// Display a user interface notification.
}
Détecter quand les flux quittent une session
Lorsque des flux publiés par d'autres clients quittent une session, l'objet Session envoie un StreamDropped événement :
session.StreamDropped += Session_StreamDropped;
public void Session_StreamDropped(object sender, EventArgs e)
{
// Stream dropped
}
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 OpenTok cesse d'envoyer la vidéo à l'abonné lorsqu'il détecte une dégradation de la connexion. L'abonné continue de recevoir le flux audio, s'il y en a un. Lorsque le routeur multimédia OpenTok cesse d'envoyer la vidéo, l'objet « Abonné » envoie un VideoDisabled événement :
subscriber.VideoDisabled += Subscriber_VideoDisabled;
public void Subscriber_VideoDisabled(object sender)
{
// Display a user interface notification.
}
Lorsque le routeur multimédia OpenTok désactive la vidéo d'un abonné, vous pouvez souhaiter adapter l'interface utilisateur associée à cet abonné.
L'objet Abonné envoie un VideoDisabled lorsque la vidéo reprend :
subscriber.VideoEnabled += Subscriber_VideoEnabled;
public void Subscriber_VideoEnabled(object sender)
{
// Video resumes for the subscriber.
}
Obtenir des informations sur un flux
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 aussi Partage d'écran.Width- (int) La largeur du flux, en pixels.
Vous utilisez le Subscriber.AudioStatsUpdated et Subscriber.VideoStatsUpdated événements permettant de surveiller les statistiques relatives au flux d'un abonné. Pour obtenir des statistiques de bas niveau sur les connexions entre pairs, utilisez la commande Subscriber.GetRtcStatsReport() méthode.
Se référer à le guide du développeur de l'observabilité du client pour obtenir des informations détaillées.
Réglage de la fréquence d'images et de la résolution
Lors de l'abonnement à un flux qui utilise le fonctionnalité vidéo adaptative, vous pouvez définir la fréquence d'images et la résolution souhaitées pour le flux que le client abonné reçoit depuis le routeur multimédia OpenTok. Pour plus d'informations, consultez Subscriber.PreferredFramerate et Subscriber.PreferredResolution.
Remarque : Ces préférences supposent que l'éditeur utilise la disposition par défaut de la couche d'évolutivité. Si l'éditeur a défini un mode d'évolutivité cible différent de celui par défaut (voir Configuration du mode d'évolutivité cible), il se peut que la sélection de couche du routeur multimédia ne corresponde pas à la résolution ou à la fréquence d'images demandée. Voir Interaction avec la résolution et la fréquence d'images préférées de l'abonné pour plus de détails.