Sous-titres en direct — SDK Vonage Video pour iOS
Le SDK OpenTok pour iOS comprend des méthodes permettant aux clients iOS de publier et de recevoir des sous-titres au cours d'une session OpenTok.
Le sous-titrage en direct doit être activé au niveau de la session via le API REST.
Le sous-titrage en direct n'est possible que dans les cas suivants sessions acheminées.
Cette rubrique comprend les sections suivantes :
Publication de sous-titres en direct
Un éditeur OpenTok peut activer ou désactiver la diffusion de sous-titres en direct et en temps réel en configurant le
publishCaptions de l'objet OTPublisherKit :
publisher.publishCaptions = YES;
Si l'éditeur n'inclut pas de piste audio, la [PublisherKit publisher:didFailWithError:]
est envoyé, avec le message code de l'erreur fixée à OTPublisherMissingAudioTrack.
Le SDK iOS de Vonage ne permet pas à un éditeur de recevoir des événements pour ses propres sous-titres. Pour rendre les propres sous-titres de l'orateur, créez un abonné caché (au flux de l'éditeur) pour écouter les événements de sous-titres. (Voir la section suivante.)
S'abonner aux sous-titres en direct
Un abonné peut commencer ou arrêter de recevoir des sous-titres en réglant le paramètre subscribeToCaptions de l'objet OTSubscriberKit
de l'objet OTSubscriberKit :
subscriber.subscribeToCaptions = YES;
Vous pouvez appeler cette méthode, que l'éditeur du flux soit ou non en train de publier des des sous-titres en direct. L'abonné commencera à recevoir les données de sous-titrage dès que l'éditeur commencera à à publier des sous-titres.
Pour ne plus recevoir de sous-titres, réglez la propriété sur NO:
subscriber.setSubscribeToCaptions = NO;
Les [OTSubscriberKitCaptionsDelegate subscriber:caption:isFinal:] est envoyé lorsqu'un
d'un flux reçoit des sous-titres :
// OTSubscriber delegate callbacks:
-(void) subscriber:(OTSubscriberKit *)subscriber caption:(NSString *)text isFinal:(BOOL)final {
// Display caption text in UI.
}
Vous pouvez mettre en place un observateur clé-valeur pour l'élément hasCaptions d'un flux OTS
pour savoir si les sous-titres sont activés ou désactivés dans le flux :
//add observer on a stream of interest
[_subscriber.stream addObserver:self forKeyPath:@"hasCaptions" options:NSKeyValueObservingOptionNew context:NULL];
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
NSLog(@"KVO change for %@ = %@",keyPath, change);
//manipulate GUI element
}
Recevoir ses propres sous-titres en direct
La Video API Vonage ne permet pas à un éditeur de recevoir des événements concernant ses propres sous-titres. Pour afficher les sous-titres de l'intervenant lui-même, créez un abonné masqué (au flux de l'éditeur local) afin de détecter les événements de sous-titrage. N'affichez pas la vue de cet abonné dans l'interface utilisateur et ne vous abonnez pas à son flux audio (pour éviter l'écho). Vous pouvez ensuite ajouter le texte des sous-titres à l'interface utilisateur.
Par défaut, l'éditeur ne publie pas les légendes ; vous devez donc configurer le publishCaptions propriété de l'éditeur à TRUE:
_publisher =
[[OTPublisher alloc] initWithDelegate:self
settings:settings];
_publisher.publishCaptions = TRUE;
OTError *error = nil;
[_session publish:_publisher error:&error];
Abonnez-vous au flux dans le [OTPublisherKitDelegate publisher:streamCreated:] méthode :
- (void)publisher:(OTPublisherKit *)publisher
streamCreated:(OTStream *)stream
{
// Self subscribe to our own publisher stream
_subscriber = [[OTSubscriber alloc] initWithStream:stream delegate:self];
_subscriber.subscribeToAudio = false;
_subscriber.subscribeToVideo = true; // This is a workaround for an OpenTok bug.
_subscriber.subscribeToCaptions = true;
_subscriber.captionsDelegate = self;
OTError *error = nil;
[_session subscribe:_subscriber error:&error];
if (error)
{
[self showAlert:[error localizedDescription]];
}
_selfPublisherStreamId = stream.streamId;
}
Comme indiqué ci-dessus, vous devez vous abonner à la vidéo pour bénéficier des sous-titres. (Ce problème sera corrigé dans une prochaine version.)
Cet exemple enregistre l'identifiant de flux de l'éditeur dans un _selfPublisherStreamId variable, utilisée ici pour empêcher que sa vue ne soit ajoutée à l'interface utilisateur :
- (void)subscriberDidConnectToStream:(OTSubscriberKit*)subscriber
{
if ([subscriber.stream.streamId isEqualToString:_selfPublisherStreamId]) {
return; // Don't show the self subscriber view.
}
[_subscriber.view setFrame:CGRectMake(0, widgetHeight, widgetWidth,
widgetHeight)];
[self.view addSubview:_subscriber.view];
}
L'abonné dispose du texte transcrit (correspondant à votre flux publié) dans le délégué suivant :
- (void)subscriber:(nonnull OTSubscriberKit*)subscriber
caption:(NSString*_Nonnull)text
isFinal:(BOOL)isFinal {
// Adjust UI to show captions.
if ([subscriber.stream.streamId isEqualToString:_selfPublisherStreamId])
{
// text is your own audio as transcribed text or captions
NSLog(@"My own caption %@", text);
} else {
// other subscribers captions
}
}