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
    }
}