概覽
適用於Android的Native SDK會從以下任意一個接收字幕:
- Brightcove目錄響應(播放API):Sidecar WebVTT
- 視頻清單(HLS或DASH):資訊清單內網路
有關字幕的更多信息,請參見在Brightcove本機SDK中使用字幕文件。
事件順序
本機SDK遵循與字幕相關的此事件序列:
-
從Brightcove目錄中檢索視頻(即
catalog.findVideoByID()
)。 -
從目錄響應中解析Sidecar字幕,並將其添加到視頻屬性中。
-
此時,您可以按以下方式檢索字幕源:
video.getProperties().get(Video.Fields.CAPTION_SOURCES);
-
設置視頻視圖。該視頻已添加到ExoPlayer。
brightcoveVideoView.add(video);
-
本機SDK獲取字幕源並發出以下事件:
EventType.CAPTIONS_LANGUAGES
-
將視頻添加到ExoPlayer後,本機SDK會查找清單內字幕。添加了視頻字幕源中尚不存在的所有字幕。如果有新的字幕源,則發送以下事件以更新Brightcove媒體控制器。
EventType.CAPTIONS_LANGUAGES
選擇字幕
請按照以下步驟以編程方式選擇字幕:
-
創建一種方法來查找帶有語言代碼的特定字幕源。例如:
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; }
-
請注意,字幕源位於
Pair<Uri, BrightcoveCaptionFormat>
。的Uri
配對中的表示字幕類型:- 邊車:完整的URL存在
- 艙內:使用BrightcoveCaptionFormat.BRIGHTCOVE_SCHEME
-
通過發出帶有特定語言代碼的視頻,創建一種負責從視頻中選擇隱藏式字幕的方法
EventType.SELECT_CLOSED_CAPTION_TRACK
事件。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); } }
-
聽
EventType.CAPTIONS_LANGUAGES
事件,然後通過語言代碼選擇所需的語言。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"); } });