Diffusion de flux — iOS (Swift)

Une fois que vous avez connecté à une sessionvous pouvez publier un flux que les autres clients connectés à la session peuvent visualiser.

Cette rubrique comprend les sections suivantes :

Initialisation d'un objet OTPublisher

Les OTPublisher L'objet sert à capturer un flux audio-vidéo à partir du microphone et de la caméra de l'appareil afin de l'utiliser dans une session OpenTok. Le view de l'objet contient la vue de la vidéo que vous publiez :

let publisher = OTPublisher(delegate: self, settings: OTPublisherSettings())!
if let publisherView = publisher.view {
	self.view.addSubview(publisherView)
	publisherView.frame = CGRect(x: 0, y: 0, width: 200, height: 150)
}

Implémentez les méthodes du protocole OTPublisherDelegate dans l'objet que vous spécifiez comme objet délégué. Ces méthodes sont appelées lorsque des événements liés à la publication se produisent.

Transmettre l'objet Publisher à la fonction OTSession publish(_:error:) méthode permettant de publier un flux vers une session. Voir Publication d'un flux.

Vous pouvez définir d'autres propriétés de l'objet OTPublisherSettings pour définir des paramètres personnalisés pour l'éditeur :

let publisherSettings = OTPublisherSettings()
publisherSettings.name = "Bob's video"
publisherSettings.audioTrack = false
publisherSettings.videoTrack = true
publisherSettings.cameraResolution = .high
publisherSettings.cameraFrameRate = .rate30FPS
let publisher = OTPublisher(delegate: self, settings: publisherSettings)!

Veuillez noter que dans les sessions qui utilisent OpenTok Media Router (sessions avec le mode média Dans les sessions dont le mode média est défini sur routé, l'abaissement de la fréquence d'images réduit proportionnellement la bande passante utilisée par le flux. Toutefois, dans les sessions dont le mode média est défini sur relayé, la réduction de la fréquence d'images ne réduit pas la bande passante du flux.

Vous pouvez utiliser un capteur vidéo personnalisé pour publier un flux avec une source vidéo personnalisée - voir Utilisation d'un capteur vidéo personnalisé. Vous pouvez également utiliser le capteur vidéo personnalisé pour publier un flux de partage d'écran - voir Partage d'écran.

Vous pouvez également utiliser une source audio personnalisée pour le flux publié - voir Utilisation d'un pilote audio personnalisé.

Vérifier si un client dispose de capacités de publication

Une fois que vous êtes connecté à une session, vous pouvez vérifier si le client est en mesure de publier. Vérifiez la valeur du OTSession capablilites.canPublish propriété. Si elle a pour valeur truele client peut publier :

if let capabilities = session.capabilities, capabilities.canPublish {
    // The client can publish.
} else {
    // The client cannot publish.
    // You may want to notify the user.
}

Pour publier, le client doit se connecter à la session avec un jeton auquel est attribué un rôle prenant en charge la publication. Voir la page Aperçu de la création de jetons.

Vérification de l'accès à la caméra

Nous vous recommandons de vérifier les autorisations d'accès à l'appareil photo de l'application avant la publication et, si l'accès est refusé, d'inviter l'utilisateur final à configurer les autorisations d'accès de l'application. (L'utilisateur final peut activer l'accès à l'appareil photo dans les Réglages iOS : Confidentialité > Appareil photo.)

L'utilisateur final est invité à autoriser l'accès à la caméra pour toute application qui en fait la demande. Vous pouvez contrôler le moment où cette invite s'affiche en appelant AVCaptureDevice requestAccess(for:completionHandler:) avec AVMediaType.Videoqui affichera l'invite lors de la première exécution. Les appels suivants exécuteront le gestionnaire d'achèvement avec la préférence enregistrée par l'utilisateur.

AVCaptureDevice.requestAccess(for: .video) { granted in
	if granted {
		// Access to the camera is granted. You can publish.
	} else {
		// Access to the camera is not granted.
	}
}

Publication d'un flux

Une fois que vous avez créé un objet Publisher (voir Initialisation d'un objet OTPublisher), vous pouvez le transmettre à la OTSession publish(_:error:) d'un objet OTSession pour publier le flux dans la session :

var error: OTError?
session.publish(publisher, error: &error)

if let error = error {
	print("publishing failed with error: \(error)");
}

Ce code suppose que session est un objet Session et que le client s'est connecté à la session. Pour plus d'informations, voir Rejoindre une session.

Les OTPublisherDelegate publisher(_:streamCreated:) est envoyé lorsque l'éditeur commence à diffuser des informations dans la session.

Empêcher un éditeur de diffuser en streaming

Vous pouvez empêcher l'éditeur de diffuser en continu vers la session en appelant la méthode OTSession unpublish(_:error:) de l'objet OTSession :

var error: OTError?
session.unpublish(publisher, error: &error)

if let error = error {
	print("unpublishing failed with error: \(error)");
}

Les OTPublisherDelegate publisher(_:streamDestroyed:) est envoyé lorsque l'éditeur cesse d'alimenter la session. Lorsque ce message est envoyé, la vue de l'éditeur est supprimée de sa vue secondaire :

publisher.view?.removeFromSuperview();

Tester le flux d'un éditeur

Vous pouvez publier un flux de test et vérifier ses statistiques audio et vidéo afin de déterminer le type de flux (haute résolution ou audio uniquement) pris en charge par votre connexion.

Pour obtenir les statistiques relatives à un flux publié par le client local, vous devez utiliser une session qui exploite OpenTok Media Router (les sessions avec le mode média (réglé sur « routed »). Vous pouvez ensuite utiliser la networkStatsDelegate méthode de l'objet OTSubscriberKit permettant d'obtenir les statistiques audio et vidéo du flux que vous publiez. Voir ce sujet pour plus d'informations.

Les test-du-réseau-opentok comprend un exemple de code montrant comment utiliser les statistiques d'un flux de test avant de le publier dans une session.