Android용 네이티브 SDK를 사용하여 프로그래밍 방식으로 자막 선택

이 주제에서는 Android용 브라이트코브 네이티브 SDK를 사용할 때 프로그래밍 방식으로 캡션을 선택하는 방법을 배웁니다.

개요

Android 용 네이티브 SDK는 다음 중 하나에서 캡션을받습니다.

  • Brightcove 카탈로그 응답 (재생 API) : 사이드카 웹VTT
  • 동영상 매니페스트 (HLS 또는 DASH) : 매니페스트 내 웹VTT

캡션에 대한 자세한 내용은 Brightcove 네이티브 SDK와 함께 캡션 사용문서.

이벤트 순서

네이티브 SDK는 캡션과 관련된 다음 이벤트 시퀀스를 따릅니다.

  1. Brightcove 카탈로그에서 비디오를 검색합니다 (예 : catalog.findVideoByID() ).

  2. 사이드카 캡션은 카탈로그 응답에서 구문 분석되어 비디오 속성에 추가됩니다.

  3. 이 시점에서 다음과 같이 캡션 소스를 검색 할 수 있습니다.

    video.getProperties().get(Video.Fields.CAPTION_SOURCES);
  4. 비디오보기를 설정합니다. 비디오가 ExoPlayer에 추가됩니다.

    brightcoveVideoView.add(video);
  5. Native SDK는 캡션 소스를 가져오고 다음 이벤트를 내 보냅니다.

    EventType.CAPTIONS_LANGUAGES
  6. 비디오가 ExoPlayer에 추가 된 후 Native SDK는 매니페스트 캡션을 찾습니다. 비디오 캡션 소스에 아직없는 캡션이 추가됩니다. 새 캡션 소스가있는 경우 Brightcove 미디어 컨트롤러를 업데이트하기 위해 다음 이벤트가 전송됩니다.

    EventType.CAPTIONS_LANGUAGES

캡션 선택

프로그래밍 방식으로 캡션을 선택하려면 다음 단계를 따르세요.

  1. 언어 코드로 특정 캡션 소스를 찾는 방법을 만듭니다. 예:

    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. 캡션 소스는Pair<Uri, BrightcoveCaptionFormat> . 그만큼Uri쌍에서 유형 폐쇄 캡션을 나타냅니다.

    • 사이드카 : 전체 URL이 있습니다.
    • 매니페스트 : BrightcoveCaptionFormat.BRIGHTCOVE_SCHEME가 사용됩니다.
  3. 지정된 언어 코드를 사용하여 비디오에서 자막을 선택하는 방법을 만듭니다. 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);
    }
    }
  4. 들어 봐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");
    }
    });