개요
Android 용 네이티브 SDK는 다음 중 하나에서 캡션을받습니다.
- Brightcove 카탈로그 응답 (재생 API) : 사이드카 웹VTT
- 동영상 매니페스트 (HLS 또는 DASH) : 매니페스트 내 웹VTT
캡션에 대한 자세한 내용은 Brightcove 네이티브 SDK와 함께 캡션 사용문서.
이벤트 순서
네이티브 SDK는 캡션과 관련된 다음 이벤트 시퀀스를 따릅니다.
-
Brightcove 카탈로그에서 비디오를 검색합니다 (예 :
catalog.findVideoByID()
). -
사이드카 캡션은 카탈로그 응답에서 구문 분석되어 비디오 속성에 추가됩니다.
-
이 시점에서 다음과 같이 캡션 소스를 검색 할 수 있습니다.
video.getProperties().get(Video.Fields.CAPTION_SOURCES);
-
비디오보기를 설정합니다. 비디오가 ExoPlayer에 추가됩니다.
brightcoveVideoView.add(video);
-
Native SDK는 캡션 소스를 가져오고 다음 이벤트를 내 보냅니다.
EventType.CAPTIONS_LANGUAGES
-
비디오가 ExoPlayer에 추가 된 후 Native 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"); } });