Как при помощи gstreamer получить метаинфу аудиофайла используя Java?

Рейтинг: -1Ответов: 1Опубликовано: 26.04.2023

У меня есть контроллер:

public AudioGSTController() {
    Gst.init(Version.BASELINE, "audioPlayer", "run");
    playbin = new PlayBin("playbin");
    playbin.setAudioSink(null);
    Element level = ElementFactory.make("level", "level");
    playbin.set("audio-filter", level);
}

и метод передачи аудиофайла:

public void setFile(File file){
    playbin.stop();
    playbin.setURI(file.toURI());
    playbin.play();
}

музыка воспроизводится, но я хочу получить информацию о названии трека, авторе и длительности. Я точно уверен что это можно сделать при помощи gstreamer, но не могу найти информацию как... Возможно, нужно использовать метод playbin.getAudioPad(), но я не знаю, какие аргументы нужно в него передавать.

Ответы

▲ 0

Нашел решение сам.

Вся информация лежит в тэгах, доступ к ним можно получить таким образом:

playbin.getBus().connect(busTag);

Предварительно создав Bus.TAG

private final Bus.TAG busTag = new Bus.TAG() {
    public void tagsFound(GstObject source, TagList tags) {
        for (String tagName : tags.getTagNames()) {
            for (Object o : tags.getValues(tagName)) {
                System.out.println("Media tag: " + tagName + " => " + o);
            }
        }
    }
};