Я создаю видеоплеер, используя библиотеку медиаплеера 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
коде, чтобы дать мне данные? Потому что, когда я пытаюсь это сделать, я получаю пустой список.
Кто-нибудь знает, как это исправить или подскажите, что я делаю не так?