S'abonner à des flux — iOS (Swift)
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
- 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
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, le OTSubscriberDelegate subscriberDidDisconnect(fromStream:) Un message est envoyé au délégué de l'objet OTSubscriber. Lorsque la connexion est rétablie, le OTSubscriberDelegate subscriberDidReconnect(toStream:) est envoyé. Si le client ne peut pas rétablir la connexion, le message OTSessionDelegate session(_:streamDestroyed:) est envoyé.
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 déconnexion.
// OTSubscriber delegate callbacks:
func subscriberDidDisconnect(fromStream subscriber: OTSubscriberKit) {
// Display a user interface notification.
}
func subscriberDidReconnect(toStream subscriber: OTSubscriberKit) {
// Adjust user interface.
}
// OTSession delegate callback:
func session(_ session: OTSession, streamDestroyed stream: OTStream) {
// Adjust user interface.
}
Détection des flux dans une session
Les OTSessionDelegate session(_ 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 :
func session(_ session: OTSession, streamCreated stream: OTStream) {
print("Session streamCreated: \(stream.streamId)")
// See the declaration of subscribeToSelf above.
if stream.connection.connectionId == session.connection.connectionId {
// This is my own stream
} else {
// This is a stream from another client.
}
}
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 appeler la fonction OTSubscriber init(stream:delegate:) en lui passant un objet OTStream et un objet délégué pour recevoir les messages liés à l'abonné. Appelez ensuite la méthodeOTSession subscribe(_:error:) pour commencer à s'abonner au flux :
func session(_ session: OTSession, streamCreated stream: OTStream) {
subscriber = OTSubscriber(stream: stream, delegate: self)
var error: OTError?
session.subscribe(subscriber!, error: &error)
if error {
print("subscribe failed with error: \(error)")
}
}
Les OTSubscriberDelegate subscriberDidConnect(toStream:) est envoyé lorsque l'application commence à recevoir le flux de l'abonné. À ce stade, vous pouvez ajouter la vue de l'abonné (représentée par la balise OTSubscriber view ) à l'application :
func subscriberDidConnect(toStream subscriber: OTSubscriberKit) {
if let subscriberView = self.subscriber?.view {
subscriberView.frame = CGRect(x: 0, y: 300, width: 400, height: 300)
self.view.addSubview(subscriberView)
}
}
Se désabonner d'un flux
Pour arrêter la lecture d'un flux auquel vous êtes abonné, appelez la fonction OTSession unsubscribe(_:error:) méthode :
var error: OTError?
session.unsubscribe(subscriber, error: &error)
if (error) {
print("unsubscribe failed with error: \(error)")
}
L'abonné est déconnecté. Ensuite, il faut retirer sa vue de sa vue principale :
subscriber.view?.removeFromSuperview()
Détecter quand les flux quittent une session
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 multimédia OpenTok et les modes multimédias.) Cette fonctionnalité du routeur multimédia OpenTok permet à un abonné d'interrompre le flux vidéo lorsque la qualité de celui-ci se dégrade, et un message est alors envoyé. Lorsque les conditions s'améliorent, le flux vidéo reprend, et leOTSubscriberDelegate 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 activer ou désactiver la fonction de repli audio pour les éditeurs et les abonnés. La fonction de repli audio désactive la vidéo (chez les éditeurs et les abonnés) lorsque les conditions du réseau ou de la CPU ne permettent pas la diffusion vidéo. Voir Solution de secours audio (Web).
Obtenir des informations sur un flux
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 OpenTok à laquelle le flux est associé.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 aussi Partage d'écran.
Vous pouvez définir un OTSubscriberKitNetworkStatsDelegate objet permettant à l'objet OTSubscriberKit de surveiller les statistiques relatives au flux d'un abonné.
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 SubscriberKit.preferredFrameRate et SubscriberKit.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.