Aperçu
Le SDK natif pour Android reçoit des sous-titres de l'un des éléments suivants :
- Réponse du catalogue Brightcove (API de lecture) : Sidecar WebVTT
- Manifeste vidéo (HLS ou DASH) : WebVTT dans le manifeste
Pour plus d'informations sur les sous-titres, consultez le Utilisation des sous-titres avec les SDK natifs Brightcove document.
Séquence d'événements
Le SDK natif suit cette séquence d'événements associée aux sous-titres :
-
Récupérez une vidéo du catalogue Brightcove (c.
catalog.findVideoByID()
). -
Les sous-titres annexes sont analysés à partir de la réponse du catalogue et ajoutés aux propriétés de la vidéo.
-
À ce stade, vous pouvez récupérer les sources de sous-titres comme suit :
video.getProperties().get(Video.Fields.CAPTION_SOURCES);
-
Définissez la vue vidéo. La vidéo est ajoutée à ExoPlayer.
brightcoveVideoView.add(video);
-
Le SDK natif obtient les sources de sous-titres et émet l'événement suivant :
EventType.CAPTIONS_LANGUAGES
-
Une fois la vidéo ajoutée à ExoPlayer, le SDK natif recherche les sous-titres dans le manifeste. Les sous-titres qui ne sont pas déjà présents dans les sources de sous-titres vidéo sont ajoutés. S'il existe de nouvelles sources de sous-titres, l'événement suivant est envoyé pour mettre à jour le contrôleur multimédia Brightcove.
EventType.CAPTIONS_LANGUAGES
Sélectionnez les légendes
Suivez ces étapes pour sélectionner des sous-titres par programmation :
-
Créez une méthode pour trouver une source de sous-titres spécifique avec le code de langue. Par exemple :
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; }
-
Notez que les sources de sous-titres sont dans
Pair<Uri, BrightcoveCaptionFormat>
. LesUri
dans la paire indique le type sous-titres codés :- Side-car: L'URL complète est présente
- Dans le manifeste: Le BrightcoveCaptionFormat.BRIGHTCOVE_SCHEME est utilisé
-
Créer une méthode chargée de sélectionner les sous-titres d'une vidéo avec un code de langue donné, en émettant le
EventType.SELECT_CLOSED_CAPTION_TRACK
un événement.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); } }
-
Écouter le
EventType.CAPTIONS_LANGUAGES
événement et sélectionnez la langue souhaitée par le code de langue.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"); } });