Qt Multimedia - как заставить читать теги из медиа файла

Похоже, что QMediaPlayer не читает теги файлов списка воспроизведения без выполнения метода play() текущей дорожки. Есть ли способ принудительно считывать теги из плейлиста QMediaPlayer без его воспроизведения?

Извините, если это нубский вопрос, но я потратил много времени на поиски.

Спасибо

2 ответа

Решение

Не тратьте свое время на использование QMediaPlayer для чтения тегов (это решение хорошо работает, но сложно для многих файлов в списке), просто используйте TagLib или другую библиотеку с открытым исходным кодом.

Например, 3 простых шага для использования TagLib в Qt:

1. Скомпилируйте taglib из источника:

$ pwd
/home/user/taglib-1.9.1
$ cmake .
$ make

Достаточно развернуть рабочий экземпляр библиотеки тегов. В самом деле:)

2.Включите заголовки и библиотеку в ваш проект, просто добавьте этот или ваш собственный путь к файлу проекта:

unix:!macx: LIBS += -L$$PWD/3rdparty/taglib-1.9.1/taglib/ -ltag
INCLUDEPATH += $$PWD/3rdparty/taglib-1.9.1/taglib/Headers
DEPENDPATH += $$PWD/3rdparty/taglib-1.9.1/taglib/Headers

3. Используйте его, очень простую функцию для получения медиа-тегов из файлов, в этом примере исполнитель и название трека:

    #include <fileref.h>
    #include <tag.h>
    QString gettags(QString mediafile){
        QString string;
        TagLib::FileRef file(mediafile.toUtf8());
        TagLib::String artist_string = file.tag()->artist();
        TagLib::String title_string = file.tag()->title();
        QString artist = QString::fromStdWString(artist_string.toWString());
        QString title = QString::fromStdWString(title_string.toWString());
        string = artist + " - " + title;
        return string;
    }

Для текущего QT/OSX используйте этот фрагмент файла проекта (измените пути для вашей системы)

QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.11
LIBS += -L/Users/sir/prg.qt/TuneMerge/taglib-1.11.1/taglib/ -ltag -lz
INCLUDEPATH += /Users/sir/prg.qt/TuneMerge/taglib-1.11.1/
INCLUDEPATH += /Users/sir/prg.qt/TuneMerge/taglib-1.11.1/taglib/
INCLUDEPATH += /Users/sir/prg.qt/TuneMerge/taglib-1.11.1/taglib/toolkit/
DEPENDPATH += /Users/sir/prg.qt/TuneMerge/taglib-1.11.1/taglib
Другие вопросы по тегам