Sous-titrage en direct — SDK Vonage Video pour Linux
Le SDK OpenTok pour Linux comprend des fonctions permettant aux clients Linux 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
otc_publisher_set_publish_captions() fonction :
otc_publisher_set_publish_captions(publisher, OTC_FALSE);
Si l'éditeur n'inclut pas de piste audio, la otc_publisher_callbacks.on_error() callback
est appelée avec une erreur, le code d'erreur étant fixé à OTC_PUBLISHER_MISSING_AUDIO_TRACK.
Le SDK Vonage Linus 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 appelant la fonction
otc_subscriber_set_subscribe_to_captions() fonction :
otc_subscriber_set_subscribe_to_captions(subscriber, OTC_TRUE);
Vous pouvez appeler cette fonction 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 OTC_FALSE dans la fonction :
otc_subscriber_set_subscribe_to_captions(subscriber, OTC_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
otc_subscriber_get_subscribe_to_captions() fonction :
otc_bool isSubscribed = otc_subscriber_get_subscribe_to_captions(subscriber);
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. Définissez le on_caption_text() de la fonction membre du otc_subscriber_callbacks instance
pour mettre en place un récepteur pour les événements liés aux légendes :
static void on_caption_text(otc_subscriber *subscriber,
void *user_data,
const char* text) {
// Display the text in the UI.
}
subscriber_callbacks.on_caption_text = on_caption_text;
Les otc_stream_has_captions() permet de savoir si un flux est sous-titré :
otc_bool hasCaptions = otc_stream_has_captions(stream);
Mettre en œuvre la on_stream_has_captions_changed() de la fonction membre du otc_session_callbacks
pour contrôler l'activation et la désactivation des sous-titres d'un flux :
static void on_stream_has_captions_changed(otc_session* session,
void *user_data,
otc_stream *stream,
otc_bool has_captions) {
// Adjust UI to indicate that captions are or are not available.
}
session_callbacks.on_stream_has_captions_changed = on_stream_has_captions_changed;
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 la fonction otc_publisher_set_publish_captions() fonction, en lui transmettant TRUE:
session_data->publisher = otc_publisher_new("vonage-linux-sdk-samples",
NULL, /* Use WebRTC's video capturer. */
&publisher_callbacks);
otc_publisher_set_publish_captions(session_data->publisher, TRUE);
Abonnez-vous au flux sur le site de l'éditeur on_publisher_stream_created() rappel :
static void on_publisher_stream_created(otc_publisher *publisher,
void *user_data,
const otc_stream *stream) {
printf("on_session_stream_received: streamId=%s", otc_stream_get_id(stream));
subscriber_callbacks.on_caption_text = on_caption_text;
otc_subscriber *subscriber = otc_subscriber_new(strcpy, &subscriber_callbacks);
if (otc_session_subscribe(session, subscriber) == OTC_SUCCESS) {
session_data_local->subscriber = subscriber;
session_data_local->sub_stream = stream;
otc_subscriber_set_subscribe_to_audio(session_data_local->subscriber, FALSE);
otc_subscriber_set_subscribe_to_video(session_data_local->subscriber, TRUE); // This is a workaround for an OpenTok bug.
otc_subscriber_set_subscribe_to_captions(session_data_local->subscriber, TRUE);
self_publisher_stream_id = otc_stream_get_id(stream);
}
}
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 :
static void on_subscriber_connected(otc_subscriber *subscriber,
void *user_data,
const otc_stream *stream) {
printf("on_subscriber_connected: streamId=%s ", otc_stream_get_id(stream));
if(otc_stream_get_id(otc_stream) == selfPublisherStreamId) {
return;
}
// Show other subscribers in the UI
}
L'abonné dispose du texte transcrit (correspondant à votre flux publié) dans le callback suivant :
void on_caption_text(otc_subscriber* subscriber,
void* user_data,
const char* text,
otc_bool is_final) {
// Adjust UI to show captions.
otc_stream* stream = otc_subscriber_get_stream(subscriber);
if (strcmp(otc_stream_get_id(stream), self_publisher_stream_id) == 0)
{
// text is your own audio as transcribed text or captions
printf("My own caption %s", text);
} else {
// other subscribers captions
}
}