Live-Untertitel – Vonage Video Android SDK
Das OpenTok-Android-SDK enthält Methoden, mit denen Android-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
setPublishCaptions() Methode des PublisherKit-Objekts:
publisher.setPublishCaptions(true);
Wenn der Verlag keine Tonspur anbietet, wird die PublisherKit.PublisherListener.onError()
Methode mit einem Fehler aufgerufen wird (mit der code Eigenschaft des Fehlers, die auf PublisherMissingAudioTrack).
Das Vonage Android SDK unterstützt 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 Publishers), der auf die Untertitel-Ereignisse wartet. (Siehe den nächsten Abschnitt.)
Abonnieren von Live-Untertiteln
Ein Teilnehmer kann den Empfang von Untertiteln starten oder stoppen, indem er die Funktion subscribeToCaptions() Methode
des SubscriberKit-Objekts:
subscriber.setSubscribeToCaptions(true);
Sie können diese Methode 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 false in die Methode:
subscriber.setSubscribeToCaptions(false);
Abonnenten können verifizieren, ob sie die Live-Untertitel eines Streams aktiv abonniert haben, indem sie die
isSubscribedToCaptions() Methode:
boolean isSubscribed = subscriber.getSubscribeToCaptions();
Abonnenten erhalten Untertitel über Ereignisse. Das OpenTok-SDK zeigt den Text der Untertitel
nicht in der Benutzeroberfläche an. Verwenden Sie die SubscriberKit.CaptionsListener Schnittstelle, um einen Listener für Untertitelereignisse einzurichten:
SubscriberKit.CaptionsListener captionsListener = new SubscriberKit.CaptionsListener() {
@Override
public void onCaptionText(SubscriberKit subscriber, String text, boolean isFinal) {
// Display the text in the UI.
}
}
Die hasCaptions() Methode eines Stream-Objekts meldet, ob der Stream Untertitel hat:
boolean hasCaptions = stream.hasCaptions();
Umsetzung der onStreamHasCaptionsChanged() Methode der Session.StreamPropertiesListener
Schnittstelle, um zu überwachen, wann ein Stream Untertitel aktiviert und deaktiviert hat:
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.
}
}
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 setPublishCaptions() Übergabe von true:
publisher = new Publisher.Builder(this).name(mUsername).build();
publisher.setPublishCaptions(true);
Den Stream im Kanal des Anbieters abonnieren onStreamCreated() Rückruf:
@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();
}
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:
@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());
}
}
Der Abonnent hat den transkribierten Text (für Ihren veröffentlichten Stream) in der onCaptionText() Zuhörer:
@Override
public void onCaptionText(SubscriberKit subscriber, String text, boolean isFinal) {
// Adjust UI to show captions.
}