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