2

我正在使用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();
4

1 回答 1

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

这将打开一个(片段)对话框,显示当前的文本和音轨,并允许用户选择一个。When one is selected and Ok is pressed in that dialog, the listener that you had registered in the previous step is called and then you can enable the track in your listener.

  1. 确保在离开活动时移除侦听器。
于 2016-02-11T15:51:49.613 回答