サポート問い合わせ先| システムステータス
ページコンテンツ

    Android用ネイティブSDKを使用してプログラムでキャプションを選択する

    このトピックでは、Brightcove Native SDK forAndroidを使用するときにプログラムでキャプションを選択する方法を学習します。

    概要

    Android 用ネイティブ SDK は、次のいずれかのキャプションを受け取ります。

    • Brightcoveのカタログレスポンス (再生 API):サイドカーWebVTT
    • ビデオマニフェスト(HLSまたはダッシュ):マニフェストの WebVTT

    キャプションの詳細については、「 Brightcove ネイティブ SDK でキャプションを使用する」を参照してください。

    イベントシーケンス

    ネイティブ SDK は、キャプションに関連付けられた次のイベントシーケンスに従います。

    1. Brightcoveのカタログから動画を取得する(例:catalog.findVideoByID() )。

    2. サイドカーキャプションは、カタログ応答から解析され、ビデオプロパティに追加されます。

    3. この時点で、次のようにキャプションソースを取得できます。

      video.getProperties().get(Video.Fields.CAPTION_SOURCES);
    4. ビデオビューを設定します。動画がExoPlayerに追加されます。

      brightcoveVideoView.add(video);
    5. ネイティブ SDK は、キャプションソースを取得し、次のイベントを発します。

      EventType.CAPTIONS_LANGUAGES
    6. ビデオが ExoPlayer に追加されると、ネイティブ 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 languaged in the LANGUAGES list.
        // List<String> languages = event.getProperty(Event.LANGUAGES, List.class);
       selectCaption(brightcoveVideoView.getCurrentVideo(), "ja");
      }
      });

    ページの最終更新日04 Oct 2021