Sous-titres en direct — SDK Vonage Video pour Android

Le SDK OpenTok pour Android comprend des méthodes permettant aux clients Android 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 démarrer ou arrêter la diffusion de sous-titres en direct et en temps réel en appelant la méthode setPublishCaptions() de l'objet PublisherKit :

publisher.setPublishCaptions(true);

Si l'éditeur n'inclut pas de piste audio, la PublisherKit.PublisherListener.onError() est appelée avec une erreur (avec la méthode code de l'erreur fixée à PublisherMissingAudioTrack).

Le SDK Android de Vonage ne permet pas à un éditeur de recevoir des événements concernant ses propres sous-titres. Pour afficher les sous-titres de l'intervenant, créez un abonné masqué (au flux de l'éditeur) afin de détecter les événements de sous-titrage. (Voir la section suivante.)

S'abonner aux sous-titres en direct

Un abonné peut commencer ou arrêter de recevoir des sous-titres en appelant la fonction subscribeToCaptions() méthode de l'objet SubscriberKit :

subscriber.setSubscribeToCaptions(true);

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, passez false dans la méthode :

subscriber.setSubscribeToCaptions(false);

Les abonnés peuvent vérifier s'ils sont activement abonnés aux sous-titres en direct d'un flux à l'aide de la fonction isSubscribedToCaptions() méthode :

boolean isSubscribed = subscriber.getSubscribeToCaptions();

Les abonnés reçoivent les sous-titres via des événements. Le SDK OpenTok n'affiche pas le texte des sous-titres dans l'interface utilisateur. Utilisez le SubscriberKit.CaptionsListener pour mettre en place un récepteur pour les événements liés aux légendes :

SubscriberKit.CaptionsListener captionsListener = new SubscriberKit.CaptionsListener() {
    @Override
    public void onCaptionText(SubscriberKit subscriber, String text, boolean isFinal) {
        // Display the text in the UI.
    }
}

Les hasCaptions() d'un objet Stream indique si le flux comporte des sous-titres :

boolean hasCaptions = stream.hasCaptions();

Mettre en œuvre la onStreamHasCaptionsChanged() de la méthode Session.StreamPropertiesListener pour vérifier si les sous-titres d'un flux sont activés ou désactivés :

Session.StreamPropertiesListener captioningListener = new Session.StreamPropertiesListener() {
    @Override
    public void onStreamHasCaptionsChanged(Session session, Stream stream, boolean hasCaptions) {
        // Adjust UI to indicate that captions are or are not available.
    }
}

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 ; il faut donc appeler setPublishCaptions() en transmettant true:

    publisher = new Publisher.Builder(this).name(mUsername).build();
	publisher.setPublishCaptions(true);

Abonnez-vous au flux sur le site de l'éditeur onStreamCreated() rappel :

@Override
public void onStreamCreated(PublisherKit publisher, Stream stream) {
	Log.d(LOG_TAG, "onStreamCreated: Publisher Stream Created. Own stream " + stream.getStreamId());
	subscriber = new Subscriber.Builder(MainActivity.this, stream).build();
	subscriber.setSubscribeToAudio(false);
	subscriber.setSubscribeToVideo(true); // This is a workaround for an OpenTok bug.
	subscriber.setSubscribeToCaptions(true);
	subscriber.setCaptionsListener(this);

	selfPublisherStreamId = stream.getStreamId();
}

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 :

@Override
public void onStreamReceived(Session session, Stream stream) {
	Log.d(TAG, "onStreamReceived: New Stream Received " + stream.getStreamId() + " in session: " + session.getSessionId());

	if(stream.getStreamId() == selfPublisherStreamId) {
		return;
	}

	// Show subscriber in the UI
	if (subscriber == null) {
		subscriber = new Subscriber.Builder(MainActivity.this, stream).build();
		subscriber.getRenderer().setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL);
		subscriber.setSubscriberListener(subscriberListener);
		session.subscribe(subscriber);
		subscriberViewContainer.addView(subscriber.getView());
	}
}

L'abonné dispose du texte transcrit (correspondant à votre flux publié) dans le onCaptionText() auditeur :

@Override
public void onCaptionText(SubscriberKit subscriber, String text, boolean isFinal) {
    // Adjust UI to show captions.
}