Diffusion de flux — iOS
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
- Vérification des capacités de publication
- Vérification de l'accès à la caméra
- Publication d'un flux
- Définition du débit maximal d'un flux
- Empêcher un éditeur de diffuser en streaming
- Obtenir des statistiques sur le flux d'un éditeur
- Tester le flux d'un éditeur
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 :
OTPublisher publisher = [[OTPublisher alloc]
initWithDelegate:self
settings:[[OTPublisherSettings alloc] init]];
[self.view addSubview:publisher.view];
[publisher.view setFrame:CGRectMake(0, 0, 200, 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 :
OTPublisherSettings *_publisherSettings = [[OTPublisherSettings alloc] init];
_publisherSettings.name = @"Bob's video";
_publisherSettings.audioTrack = NO;
_publisherSettings.videoTrack = YES;
_publisherSettings.cameraResolution = OTCameraCaptureResolutionHigh;
_publisherSettings.cameraFrameRate = OTCameraCaptureFrameRate30FPS;
_publisher = [[OTPublisher alloc]
initWithDelegate: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é.
Définition du débit maximal d'un flux
Vous pouvez définir le débit binaire maximal d'un flux publié. La définition d'un débit binaire maximal peut contribuer à réduire la consommation de bande passante lorsqu'un utilisateur se connecte via une connexion à volume limité. Voir cette documentation.
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 YESle client peut publier :
if (session.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 requestAccessForMediaType:completionHandler:] avec AVMediaTypeVideoqui 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 requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
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 :
OTError* error = nil;
[session publish:publisher error:&error];
if (error) {
NSLog(@"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 :
OTError* error = nil;
[session unpublish:publisher error:&error];
if (error) {
NSLog(@"publishing 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:];
Obtenir des statistiques sur le flux d'un éditeur
Régler le networkStatsDelegate d'une propriété OTPublisherKit à un objet qui implémente l'interface OTPublisherKitNetworkStatsDelegate protocole. Ce protocole comprend un [OTPublisherKitNetworkStatsDelegate publisher: audioNetworkStatsUpdated:] message et un [OTPublisherKitNetworkStatsDelegate publisher: videoNetworkStatsUpdated:] messages, qui sont envoyés périodiquement afin de communiquer des statistiques sur la qualité audio et vidéo des éditeurs.
Pour obtenir des statistiques de connexion entre pairs de bas niveau, utilisez la commande [OTPublisherKit getRtcStatsReport:] méthode. Cette méthode fournit des rapports de statistiques RTC pour le flux multimédia.
Se référer à le guide du développeur de l'observabilité du client pour obtenir des informations détaillées.
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.