0

Пытаюсь получить информацию об аудиофайле с помощью MediaInfo.h

mainwindow.cpp

#include <MediaInfo/MediaInfo.h>
#define MediaInfoNameSpace MediaInfoLib;
#define _itot itoa
#include <string>

using namespace MediaInfoNameSpace; . . . void MainWindow::on_pushButton_1_clicked() { MediaInfoLib::MediaInfo MI;
MI.Open(file_str);
auto codec=MI.Get(stream_t::Stream_Audio, 0, "Format"); std::cout << "Codec :" << codec << std::endl;
MI.Close();

} . . .

На этот раз при компиляции вылетает ошибка: error: undefined reference to `MediaInfoLib::MediaInfo::MediaInfo()’

Helg1980
  • 371

1 Answers1

0

Подскажите, что я делаю не так?

Внимательно прочтите описание методов Open и тогда появится ответ:

        ...
    /// Open a file and collect information about it (technical information and tags)
    /// @brief Open a file
    /// @param File_Name Full name of file to open
    /// @retval 0 File not opened
    /// @retval 1 File opened
size_t Open (const String &amp;File_Name);

    /// Open a Buffer (Begin and end of the stream) and collect information about it (technical information and tags)
    /// @brief Open a buffer
    /// @param Begin First bytes of the buffer
    /// @param Begin_Size Size of Begin
    /// @param End Last bytes of the buffer
    /// @param End_Size Size of End
    /// @param File_Size Total size of the file
    /// @retval 0 File not opened
    /// @retval 1 File opened
size_t Open (const ZenLib::int8u* Begin, size_t Begin_Size, const ZenLib::int8u* End=NULL, size_t End_Size=0, ZenLib::int64u File_Size=0);

    ...

!! Оказывается правильный вопрос - "как собрать и подключить библиотеку MediaInfoLib", значит мой ответ не об этом.

Majestio
  • 5,050
  • В проекте, кроме использования заголовка, нужно еще подключать саму библиотеку для линкера. А метод Open возвращает целое size_t, в описании это указано и "расшифровано". – Majestio Sep 22 '20 at 13:43
  • В подкаталоге проекта MediaInfoLib/Project есть куча файлов под различные системы сборки - читайте, экспериментируйте. Сперва нужно собрать саму либу, потом ее проинсталлить в нужные каталоги. Ну а потом уже ее подключать. "Как подключать" - вопрос неточный. А как вы и чем собираете своей проект? Используете ли какие системы сборки, или вручную вызываете компилятор и линкер? Слишком много неизвестных условий. – Majestio Sep 22 '20 at 15:54
  • В Qt Creator на Manjaro Linux, компилятор gcc. Я сейчас думаю не проще ли подключить библиотеку QMediaMetaData, но еще не знаю как с ней работать. Меня в принципе устроит любой способ. – Helg1980 Sep 22 '20 at 16:01
  • В QtCreator'е есть три системы сборки: qmake, cmake, qbs – Majestio Sep 22 '20 at 16:11
  • Если Qt, то явно лучше QMediaMetaData, потому "как из коробки". А использовать внешнюю либу - только тогда, когда не хватает чего-то. – Majestio Sep 22 '20 at 16:17
  • На самом деле эта MediaInfoLib достаточно хреново документирована. Поэтому, как я говорил, лучше использовать Qt'шные классы, раз таковые имеются. – Majestio Sep 22 '20 at 16:38
  • https://doc.qt.io/archives/qt-5.11/qtmultimedia-multimediawidgets-player-example.html – Majestio Sep 22 '20 at 17:05