Programmatische Auswahl von Untertiteln mit dem Native SDK für Android

In diesem Thema erfahren Sie, wie Sie bei Verwendung des Brightcove Native SDK für Android programmgesteuert Untertitel auswählen können.

Ü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:

  1. Abrufen eines Videos aus dem Brightcove-Katalog (z. catalog.findVideoByID()).

  2. Sidecar-Untertitel werden aus der Katalogantwort geparst und den Videoeigenschaften hinzugefügt.

  3. An dieser Stelle können Sie Untertitelquellen wie folgt abrufen:

    video.getProperties().get(Video.Fields.CAPTION_SOURCES);
  4. Stellen Sie die Videoansicht ein. Das Video wird zu ExoPlayer hinzugefügt.

    brightcoveVideoView.add(video);
  5. Das Native SDK ruft Untertitelquellen ab und gibt das folgende Ereignis aus:

    EventType.CAPTIONS_LANGUAGES
  6. 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:

  1. 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;
    }
  2. Beachten Sie, dass Untertitelquellen in Pair<Uri, BrightcoveCaptionFormat>. Die Uri im Paar gibt den Typ Closed Captions an:

    • Beiwagen: Die vollständige URL ist vorhanden
    • In-Manifest: Das BrightcoveCaptionFormat.BRIGHTCOVE_SCHEME wird verwendet
  3. 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);
    }
    }
  4. 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");
    }
    });