Обо мне

Моя фотография
Индивид, которому нравится слушать качественную музыку, а потом делиться впечатлениями с другими!

суббота, 23 апреля 2011 г.

[Qt] Сборка vlc-qt. Пошагово. Часть 1

Сегодня я хотел бы рассказать о том, как можно собрать и использовать в своем проекте замечательную библиотеку vlc-qt, посредством которой становится возможным воспроизведение любых мультимедийных файлов.

1. Скачиваем саму библиотеку vlc-qt по ссылке http://qt-apps.org/content/show.php/VLC-Qt+library?content=133649

2. Скачиваем исходный код проигрывателя VLC по ссылке http://sourceforge.net/projects/vlc/files/1.1.9/vlc-1.1.9.tar.bz2/download, а также собранный дистрибутив проигрывателя, который сразу же устанавливаем.

3. Скачиваем дистрибутив CMake, который понадобится нам для сборки библиотеки по ссылке http://www.cmake.org/cmake/resources/software.html

4. Убеждаемся в том, что у нас в системе есть библиотека Qt, компилятор mingw32 и, что пути к ним прописаны в системном PATH.

5. Создаем директорию, например, D:\VLC

6. Распаковываем в нее исходники библиотеки vlc-qt, которую скачали в п.1 (у нас должно получиться D:\vlc\libvlc-qt-0.5.0\)

7. Из исходников VLC копируем (распаковываем) папку vlc, которая находится в папке vlc-1.1.9\include\vlc в D:\vlc\libvlc-qt-0.5.0\src (должно получиться D:\vlc\libvlc-qt-0.5.0\src\vlc)

8. Создаем каталог D:/vlc/libvlc-qt-0.5.0/build

9. Устанавливаем Cmake и запускаем cmake gui

10. "Where is the source code" нажимаем кнопку Browse Source и выбираем каталог D:/vlc/libvlc-qt-0.5.0

11. "Where to build the binaries" нажимаем кнопку Browse Build ... и выбираем каталог D:/vlc/libvlc-qt-0.5.0/build

12. Нажимаем кнопку Configure

13. Получаем ошибку. Не расстраиваемся и делаем все в соответствии с изображением из следующего пункта

14.

Смысл в том, чтобы для поля LIBVLC_INCLUDE_DIR выбрать в качестве параметра директорию D:/vlc/libvlc-qt-0.5.0/src/vlc (то есть ту папку в которую мы копировали заголовочные файлы из архива с исходниками самого проигрывателя)

Для параметра LIBVLCCORE_LIBRARY выбираем библиотеку C:/Program Files/VideoLAN/VLC/libvlccore.dll, которая установилась с проигрывателем VLC из п. 2

Для параметра LIBVLC_LIBRARY выбираем библиотеку C:/Program Files/VideoLAN/VLC/libvlc.dll, которая установилась с проигрывателем VLC из п. 2

Установленные библиотеки нужны для линковки.

15. Снова нажимаем Configure

16. Нажимаем на кнопку Generate

17. Закрываем Cmake

18. Открываем командную консоль (Меню Пуск-Выполнить-cmd либо через Total Commander, если пользуетесь им, Open Terminal Here)

19. В консоли переходим в нужный нам каталог, если не перешли ранее, cd D:/vlc/libvlc-qt-0.5.0/build

20. Собираем библиотеку. В консоли вводим команду mingw32-make (при условии, что путь к компилятору у вас добавлен в PATH, либо пишете полный путь к компилятору D:\Qt\2010.05\mingw\bin\mingw32-make.exe

21. ждите

22. Вроде собралось без ошибок.

Всё, на этом сборка собственной библиотеки закончилась. На днях я подробно расскажу о том, как подключить к своему проекту данную библиотеку. Для нетерпеливых рекомендую ознакомиться с примерами vlc-qt. Там все ясно и понятно.

Обсуждение на Russian Qt forum

Постоянный партнер блога:

Профессиональные услуги адвоката в Минске. Абрамович В.А. Корректировка таможенной стоимости. Защита интересов в хозяйственных судах. Признание и приведение в исполнение судебных постановлений иностранных судов на территории Республики Беларусь. - Abramovich.by

2 комментария:

  1. Есть проблемы при использовании libvlc для проигрывания сразу нескольких видео файлов в одном приложении. На сайте разработчиков пишут про использование 2 методов
    1) создание одного instance и нескольких mediaplayer и mediaitem

    2) создание для каждого видео отдельных instance,mediaplayer,mediaitem.

    к сожалению для обертки vlc-qt сделать это мне удалось.

    вот коды по первому и второму вырианту

    1)

    QStringList * VlcArgs = new QStringList();
    VlcArgs->append("--no-one-instance");

    VlcVideoWidget * video = new VlcVideoWidget();
    video->setGeometry(0,400,500,500);
    video->show();

    VlcInstance* instance1 = new VlcInstance(*VlcArgs,this);

    VlcMediaPlayer* player1 = new VlcMediaPlayer(video->widgetId(),video);
    player1->open("1.wmv");

    VlcVideoWidget * video2 = new VlcVideoWidget();
    video2->setGeometry(0,700,500,500);
    video2->show();

    VlcMediaPlayer* player2 = new VlcMediaPlayer(video2->widgetId(),video2);
    player2->open("2.avi");

    // запускается только последнее видео. при этом
    // в application output получаю

    [0x1a3e120] es demux error: cannot peek
    [0x1a3e120] es demux error: cannot peek
    [0x1a3e120] es demux error: cannot peek
    [0x1a3e120] es demux error: cannot peek
    [0x1a3e120] ps demux error: cannot peek
    [0x1a3e120] mjpeg demux error: cannot peek
    [0x1a3e120] mpgv demux error: cannot peek
    [0x1a3e120] ps demux error: cannot peek

    2)
    VlcVideoWidget * video = new VlcVideoWidget();
    video->setGeometry(0,400,500,500);
    video->show();
    VlcInstance* instance1 = new VlcInstance(*VlcArgs,video);
    VlcMediaPlayer* player1 = new VlcMediaPlayer(video->widgetId(),video);
    player1->open("1.wmv");


    VlcVideoWidget * video2 = new VlcVideoWidget();
    video2->setGeometry(0,700,500,500);
    video2->show();

    VlcInstance* instance2 = new VlcInstance(*VlcArgs, video2);

    VlcMediaPlayer* player2 = new VlcMediaPlayer(video2->widgetId(),video2);
    player2->open("2.avi");


    // результат тот же что и в первом примере
    // в application output имеем

    libvlc-qt "0.5.1" initialised
    Using libvlc version: "1.1.11 The Luggage"
    libvlc Media: "1.wmv"
    libvlc-qt "0.5.1" initialised
    Using libvlc version: "1.1.11 The Luggage"
    libvlc Media: "2.avi"

    если сталкивался с проблемой подскажи как решить ее.

    ОтветитьУдалить
  2. Не получилось собрать библиотеку, делал все по пунктам, проблема возникла после пункта 20:

    CMakeFiles\vlc-qt.dir/objects.a(moc_VideoWidget.cxx.obj):moc_VideoWidget.cxx:(.rdata$_ZTV14VlcVideoWidget[vtable for VlcVideoWidget]+0x104): undefined
    reference to `non-virtual thunk to QWidget::releaseDC(HDC__*) const'
    CMakeFiles\vlc-qt.dir/objects.a(moc_VideoWidget.cxx.obj):moc_VideoWidget.cxx:(.rdata$_ZTV14VlcVideoWidget[vtable for VlcVideoWidget]+0x108): undefined
    reference to `non-virtual thunk to QWidget::metric(QPaintDevice::PaintDeviceMetric) const'
    collect2: ld returned 1 exit status
    mingw32-make[2]: *** [src/libvlc-qt.dll] Error 1
    mingw32-make[1]: *** [src/CMakeFiles/vlc-qt.dir/all] Error 2
    mingw32-make: *** [all] Error 2

    Пробовал также в Visual Studio, там следующие ошибки:

    Ошибка 1 error C2057: требуется константное выражение E:\Downloads\GoogleDownload\libvlc-qt_0.5.1_win32_sdk\src\src\core\Instance.cpp 35 1 vlc-qt
    Ошибка 2 error C2466: невозможно выделить память для массива постоянного нулевого размера E:\Downloads\GoogleDownload\libvlc-qt_0.5.1_win32_sdk\src\src\core\Instance.cpp 35 1 vlc-qt
    Ошибка 3 error C2133: stdStrings: неизвестный размер E:\Downloads\GoogleDownload\libvlc-qt_0.5.1_win32_sdk\src\src\core\Instance.cpp 35 1 vlc-qt
    Ошибка 4 error C2057: требуется константное выражение E:\Downloads\GoogleDownload\libvlc-qt_0.5.1_win32_sdk\src\src\core\Instance.cpp 36 1 vlc-qt
    Ошибка 5 error C2466: невозможно выделить память для массива постоянного нулевого размера E:\Downloads\GoogleDownload\libvlc-qt_0.5.1_win32_sdk\src\src\core\Instance.cpp 36 1 vlc-qt
    Ошибка 6 error C2133: vlcArgs: неизвестный размер E:\Downloads\GoogleDownload\libvlc-qt_0.5.1_win32_sdk\src\src\core\Instance.cpp 36 1 vlc-qt
    Ошибка 7 error C2070: const char *[]: недопустимый оператор sizeof E:\Downloads\GoogleDownload\libvlc-qt_0.5.1_win32_sdk\src\src\core\Instance.cpp 43 1 vlc-qt

    Нужна помощь ;(

    ОтветитьУдалить