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