2

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

Я читаю их documentation, где я могу видеть, как это можно установить 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(); 
+0

Вы не используете VideoCastControllerActivity? –

+0

Нет, у меня есть пользовательская активность, где я воспроизвожу видео, и я также могу передать видео на Chromecast. Я использую ChromeCastUtility из образца проекта. – Sandak

+0

@AliNaddaf Я вижу, вы были правы! Я использую VideoCastControllerActivity! Извините за непонимание, моя ошибка. – Sandak

ответ

0

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

  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); 
} 

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

  1. Обязательно удалите слушателя, когда вы покинете свою деятельность.
+0

Благодарим вас за ответ. Но у меня есть пользовательский плеер для Android, и я использую VideoCastManager, который использует VideoCastControllerActivity. Я не знаю, как я могу добавить кнопку CC и установить OnClickListener на нее, даже если я вижу, что есть кнопка CC внутри макета cast_activity.xml, но она не видна, и я не знаю, как ее включить. Спасибо за ваше время – Sandak

+0

Я отредактировал мой вопрос с дополнительной информацией.Вы были правы, я использую «VideoCastControllerActivity» – Sandak

+0

Если вы используете CastControllerActivity, и если вы включили теги подписи при инициализации VideoCastManager, и если на вашем носителе есть звуковые или текстовые дорожки, настроенные в нем, появится кнопка, проверьте приложение CastVideos-android –

Смежные вопросы