Android Chromecast Companion Library - кнопка переключения субтитров

Я использую библиотеку Companion для трансляции видео из моего приложения в Chromecast. Можно ли как-нибудь добавить кнопку переключения субтитров / субтитров, чтобы пользователь мог включать и выключать их?

Я читаю их документацию, где я вижу, как можно установить URL субтитров

 MediaTrack englishSubtitle = new MediaTrack.Builder(1 /* ID */,
MediaTrack.TYPE_TEXT)
  .setName("English Subtitle")
  .setSubtype(MediaTrack.SUBTYPE_SUBTITLE)
  .setContentId("https://some-url/caption_en.vtt")
  /* language is required for subtitle type but optional otherwise */
  .setLanguage("en-US")
  .build();

Но нет слов о том, где я должен обрабатывать действия показать / скрыть.

Есть ли у вас какие-либо предложения, как я могу добавить кнопку переключения и обрабатывать действия показать / скрыть?

Я использую VideoCastManager который использует VideoCastControllerActivity из библиотеки кастинга.

Это мое CastConfiguration

// Build a CastConfiguration object and initialize VideoCastManager
    CastConfiguration options = new CastConfiguration.Builder(MyAppConfig.CHROMECAST_APP_ID)
            .enableAutoReconnect()
            .enableCaptionManagement()
            .enableDebug()
            .enableLockScreen()
            .enableNotification()
            .enableWifiReconnection()
            .setCastControllerImmersive(true)
            .setLaunchOptions(false, Locale.getDefault())
            .setNextPrevVisibilityPolicy(CastConfiguration.NEXT_PREV_VISIBILITY_POLICY_DISABLED)
            .addNotificationAction(CastConfiguration.NOTIFICATION_ACTION_REWIND, false)
            .addNotificationAction(CastConfiguration.NOTIFICATION_ACTION_PLAY_PAUSE, true)
            .addNotificationAction(CastConfiguration.NOTIFICATION_ACTION_DISCONNECT, true)
            .setForwardStep(10)
            .build();

    // Google Chrome Cast initialization of the VideoCastManager that is a helper class from the CasCompanionLibrary
    // that helps us deal with the flow of communicating with chromecast
    VideoCastManager.
            initialize(this, options)
            .setVolumeStep(MyAppConfig.VOLUME_INCREMENT);

И там я создаю MediaInfo

MediaMetadata mediaMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
                mediaMetadata.addImage(new WebImage(Uri.parse(MyAppConfigBase.IMAGE_API_ENDPOINT + movieVideoItem.getImages().getKeyart())));
                mediaMetadata.addImage(new WebImage(Uri.parse(MyAppConfigBase.IMAGE_API_ENDPOINT + movieVideoItem.getImages().getKeyart())));
                mediaMetadata.putString(MediaMetadata.KEY_TITLE, movieVideoItem.getTitle());
                mediaMetadata.putString(MediaMetadata.KEY_SUBTITLE, movieVideoItem.getDescription());
                mediaMetadata.putString("movie-urls", url);
                mediaMetadata.putString("content-type", movieVideoItem.getContent().getHighRes().getType());

                MediaTrack englishSubtitle = new MediaTrack.Builder(1 /* ID */, MediaTrack.TYPE_TEXT)
                        .setName("English Subtitle")
                        .setSubtype(MediaTrack.SUBTYPE_CAPTIONS)
                        .setContentId(closedCaptionsUrl)
                        /* language is required for subtitle type but optional otherwise */
                        .setLanguage("en-US")
                        .build();

                List tracks = new ArrayList();
                tracks.add(englishSubtitle);

                MediaInfo mediaInfo = new MediaInfo.Builder(url)
                        .setStreamDuration(movieVideoItem.getDuration())
                        .setStreamType(MediaInfo.STREAM_TYPE_NONE)
                        .setContentType(type)
                        .setMetadata(mediaMetadata)
                        .setMediaTracks(tracks)
                        .setCustomData(customData)
                        .build();

1 ответ

Решение

Вам нужно сделать следующее:

  1. Убедитесь, что ваши элементы MediaInfo имеют информацию о треках.

  2. Убедитесь, что треки включены в настройках и включите поддержку треков при настройке CastVideoManager.

  3. Зарегистрировать OnTracksSelectedListener Слушатель в вашей, скажем, активности, так что когда треки меняются, ваша активность может быть уведомлена.

4. Добавьте кнопку в свою деятельность и, нажав на кнопку, вызовите метод, подобный следующему.

private void showTracksChooserDialog()
        throws TransientNetworkDisconnectionException, NoConnectionException {
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    Fragment prev = getSupportFragmentManager().findFragmentByTag(DIALOG_TAG);
    if (prev != null) {
        transaction.remove(prev);
    }
    transaction.addToBackStack(null);

    // Create and show the dialog.
    TracksChooserDialog dialogFragment = TracksChooserDialog
            .newInstance(mCastManager.getRemoteMediaInformation());
    dialogFragment.show(transaction, DIALOG_TAG);
}

Откроется диалоговое окно (фрагмент), в котором отображаются текущие текстовые и звуковые дорожки и пользователь может выбрать один. Когда один из них выбран и в этом диалоговом окне нажата Ok, вызывается прослушиватель, который вы зарегистрировали на предыдущем шаге, а затем вы можете включить дорожку в прослушивателе.

  1. Убедитесь, что вы удалили слушателя, когда уходите от своей деятельности.
Другие вопросы по тегам