Live-Untertitel – Vonage Video macOS SDK

Das OpenTok-macOS-Client-SDK enthält Methoden, mit denen macOS-Clients in einer OpenTok-Sitzung Untertitel senden und empfangen können.

Die Live-Untertitelung muss auf Sitzungsebene über die REST-API.

Live-Untertitelung wird nur unterstützt in weitergeleitete Sitzungen.

Dieses Thema umfasst die folgenden Abschnitte:

Veröffentlichung von Live-Beschriftungen

Ein OpenTok-Publisher kann die Veröffentlichung von Echtzeit-Live-Untertiteln starten oder beenden, indem er die otc_publisher_set_publish_captions() Funktion:

otc_publisher_set_publish_captions(publisher, OTC_FALSE);

Wenn der Verlag keine Tonspur anbietet, wird die otc_publisher_callbacks.on_error() Rückruf Funktion wird mit einem Fehler aufgerufen, wobei der Fehlercode auf OTC_PUBLISHER_MISSING_AUDIO_TRACK.

Das Vonage macOS SDK unterstützt nicht, dass ein Herausgeber Ereignisse für seine eigenen Untertitel empfängt. Um die eigenen Untertitel des Sprechers zu rendern, erstellen Sie einen versteckten Abonnenten (für den Stream des Herausgebers), der auf die Untertitelereignisse wartet. (Siehe den nächsten Abschnitt.)

Abonnieren von Live-Untertiteln

Ein Teilnehmer kann den Empfang von Untertiteln starten oder stoppen, indem er die Funktion otc_subscriber_set_subscribe_to_captions() Funktion:

otc_subscriber_set_subscribe_to_captions(subscriber, OTC_TRUE);

Sie können diese Funktion unabhängig davon aufrufen, ob der Herausgeber des Streams gerade Live-Untertitel veröffentlicht. Der Abonnent beginnt mit dem Empfang von Untertiteldaten, sobald der Herausgeber mit der Untertitel zu veröffentlichen.

Um den Empfang von Untertiteln zu beenden, übergeben Sie OTC_FALSE in die Funktion:

otc_subscriber_set_subscribe_to_captions(subscriber, OTC_FALSE);

Abonnenten können verifizieren, ob sie die Live-Untertitel eines Streams aktiv abonniert haben, indem sie die otc_subscriber_get_subscribe_to_captions() Funktion:

otc_bool isSubscribed = otc_subscriber_get_subscribe_to_captions(subscriber);

Abonnenten erhalten Untertitel über Ereignisse. Das OpenTok-SDK zeigt den Text der Untertitel nicht in der Benutzeroberfläche an. Legen Sie die on_caption_text() Mitgliedsfunktion der otc_subscriber_callbacks Instanz um einen Listener für Untertitelereignisse einzurichten:

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;

Die otc_stream_has_captions() meldet, ob ein Stream Untertitel hat:

otc_bool hasCaptions = otc_stream_has_captions(stream);

Umsetzung der on_stream_has_captions_changed() Mitgliedsfunktion der otc_session_callbacks Instanz, um zu überwachen, wann ein Stream Untertitel aktiviert und deaktiviert hat:

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;

Eigene Live-Titel empfangen

Die Vonage Video API unterstützt es nicht, dass ein Publisher Ereignisse für seine eigenen Untertitel empfängt. Um die eigenen Untertitel des Sprechers darzustellen, erstellen Sie einen versteckten Subscriber (für den Stream des lokalen Publishers), der auf Untertitelereignisse wartet. Zeigen Sie die Ansicht dieses Abonnenten nicht in der Benutzeroberfläche an und abonnieren Sie dessen Audio nicht (um ein Echo zu vermeiden). Anschließend können Sie den Untertiteltext in die Benutzeroberfläche einfügen.

Der Publisher veröffentlicht standardmäßig keine Bildunterschriften; rufen Sie daher die otc_publisher_set_publish_captions() Funktion, wobei true:

    session_data->publisher = otc_publisher_new("opentok-macos-sdk-samples",
                                              NULL, /* Use WebRTC's video capturer. */
                                              &publisher_callbacks);
	otc_publisher_set_publish_captions(session_data->publisher, TRUE);

Den Stream im Kanal des Anbieters abonnieren on_publisher_stream_created() Rückruf:

static void on_publisher_stream_created(otc_publisher *publisher,
                                        void *user_data,
                                        const otc_stream *stream) {
	NSLog(@"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);
	}
}

Wie oben bereits erwähnt, müssen Sie das Video abonnieren, um Untertitel zu erhalten. (Dies wird in einer zukünftigen Version behoben.)

In diesem Beispiel wird die Stream-ID des Publishers in einer selfPublisherStreamId Variable, die hier verwendet wird, um zu verhindern, dass ihre Ansicht zur Benutzeroberfläche hinzugefügt wird:

static void on_subscriber_connected(otc_subscriber *subscriber,
                                    void *user_data,
                                    const otc_stream *stream) {
  	NSLog(@"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
}

Der Selbstabonnent verfügt nun über Ihren eigenen, vom Publisher transkribierten Text, der wie unten gezeigt im Callback abgerufen werden kann:

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
        NSLog(@"My own caption %@", text);
    } else {
        // other subscribers captions
    }
}