Überblick
Das Native SDK für Android empfängt Untertitel von einem der folgenden Elemente:
- Brightcove-Katalogantwort (Wiedergabe-API): Sidecar WebVTT
- Videomanifest (HLS oder DASH) : In-manifest WebVTT
Weitere Informationen zu Bildunterschriften finden Sie im Verwenden von Untertiteln mit den nativen Brightcove-SDKs dokumentieren.
Ereignisablauf
Das native SDK folgt dieser mit Untertiteln verknüpften Ereignissequenz:
-
Abrufen eines Videos aus dem Brightcove-Katalog (z.
catalog.findVideoByID()
). -
Sidecar-Untertitel werden aus der Katalogantwort geparst und den Videoeigenschaften hinzugefügt.
-
An dieser Stelle können Sie Untertitelquellen wie folgt abrufen:
video.getProperties().get(Video.Fields.CAPTION_SOURCES);
-
Stellen Sie die Videoansicht ein. Das Video wird zu ExoPlayer hinzugefügt.
brightcoveVideoView.add(video);
-
Das Native SDK ruft Untertitelquellen ab und gibt das folgende Ereignis aus:
EventType.CAPTIONS_LANGUAGES
-
Nachdem das Video zu ExoPlayer hinzugefügt wurde, sucht das Native SDK nach Untertiteln im Manifest. Alle Untertitel, die noch nicht in den Video-Untertitelquellen vorhanden sind, werden hinzugefügt. Wenn neue Untertitelquellen vorhanden sind, wird das folgende Ereignis gesendet, um den Brightcove-Mediencontroller zu aktualisieren.
EventType.CAPTIONS_LANGUAGES
Untertitel auswählen
Führen Sie diese Schritte aus, um Untertitel programmgesteuert auszuwählen:
-
Erstellen Sie eine Methode, um eine bestimmte Untertitelquelle mit dem Sprachcode zu finden. Zum Beispiel:
private Pair<Uri, BrightcoveCaptionFormat> getCaptionsForLanguageCode(Video video, String languageCode) { Object payload = video == null ? null : video.getProperties().get(Video.Fields.CAPTION_SOURCES); if (payload instanceof List) { @SuppressWarnings("unchecked") List<Pair<Uri, BrightcoveCaptionFormat>> pairs = (List<Pair<Uri, BrightcoveCaptionFormat>>) payload; for (Pair<Uri, BrightcoveCaptionFormat> pair : pairs) { if (pair.second.language().equals(languageCode)) { return pair; } } } return null; }
-
Beachten Sie, dass Untertitelquellen in
Pair<Uri, BrightcoveCaptionFormat>
. DieUri
im Paar gibt den Typ Closed Captions an:- Beiwagen: Die vollständige URL ist vorhanden
- In-Manifest: Das BrightcoveCaptionFormat.BRIGHTCOVE_SCHEME wird verwendet
-
Erstellen Sie eine Methode, die für die Auswahl von Untertiteln aus einem Video mit einem bestimmten Sprachcode verantwortlich ist, indem Sie die
EventType.SELECT_CLOSED_CAPTION_TRACK
Veranstaltung.private void selectCaption(Video video, String language) { Pair<Uri, BrightcoveCaptionFormat> pair = getCaptionsForLanguageCode(video, language); if (pair != null && !pair.first.equals(Uri.EMPTY)) { // BrightcoveCaptionFormat.BRIGHTCOVE_SCHEME indicates that is not a URL we need to load with the LoadCaptionsService, but instead we'll be enabled through a different component. if (!pair.first.toString().startsWith(BrightcoveCaptionFormat.BRIGHTCOVE_SCHEME)) { brightcoveVideoView.getClosedCaptioningController().getLoadCaptionsService().loadCaptions(pair.first, pair.second.type()); } Map<String, Object> properties = new HashMap<>(); properties.put(Event.CAPTION_FORMAT, pair.second); properties.put(Event.CAPTION_URI, pair.first); brightcoveVideoView.getEventEmitter().emit(EventType.SELECT_CLOSED_CAPTION_TRACK, properties); } }
-
Höre dem zu
EventType.CAPTIONS_LANGUAGES
Ereignis und wählen Sie die gewünschte Sprache über den Sprachcode aus.brightcoveVideoView.getEventEmitter().once(EventType.CAPTIONS_LANGUAGES, new EventListener() { @Override public void processEvent(Event event) { brightcoveVideoView.setClosedCaptioningEnabled(true); // You could find the desired language in the LANGUAGES list. // List<String> languages = event.getProperty(Event.LANGUAGES, List.class); selectCaption(brightcoveVideoView.getCurrentVideo(), "ja"); } });