Медиаплеер JavaFX не получает метаданные - PullRequest
1 голос
/ 26 января 2020

Я создаю видеоплеер, используя библиотеку медиаплеера JavaFX. Мне нужно получить метаданные и отобразить в окне. У меня проблемы с получением данных.

Я уже прочитал 2 потока об этом, и я понимаю, что это делается асинхронно, поэтому мне нужен слушатель для получения метаданных.

Первый поток: Получение метаданных из мультимедийных файлов в JavaFX Второй поток: { ссылка }

Этот код был реализован, как показано ниже.

public void initialize(URL location, ResourceBundle resources) {

   //Initialising path of the media file, replace this with your file path
    String path = "Video.mp4";

    //Instantiating Media class
    Media media = new Media(new File(path).toURI().toString());

    //Listener
    media.getMetadata().addListener((MapChangeListener<String,Object>) change-> {
      System.out.println(change);
    });

   //Instantiating MediaPlayer class
    mediaPlayer = new MediaPlayer(media);
    mv.setMediaPlayer(mediaPlayer);


    mediaPlayer.setOnReady(() -> {

    ...

      mediaPlayer.play();
    });


  }


Я пробовал различные изменения в слушателе, такие как размещение его в разных областях кода и попытка получить данные из mediaPlayer, который обращается к самому носителю. Ни один из них, кажется, не решил проблему.

Я пытался вывести операторы print в коде, пытаясь распечатать содержимое media.getMetadata, но все, что я получил, - это пустой список обратно.

Я попытался создать прослушиватель для media.getTracks(), и это работает, как и ожидалось, с обновлением каждый раз, когда проигрыватель меняет свой статус. Это заставляет меня задуматься о том, что не так с media.getMetadata()

Так выглядят метаданные видео в настоящее время, поэтому я предполагаю, что мне нужно получить эту информацию

Я думаю, что слушатель не видит ничего измененного, поэтому print(change) никогда не достигается. Однако, даже если это правда, не должен ли я сделать system.out.print(media.getMetaData()) в setOnAction коде, чтобы дать мне данные? Потому что, когда я пытаюсь это сделать, я получаю пустой список.

Кто-нибудь знает, как это исправить или подскажите, что я делаю не так?

...