Сегодня я хотел бы рассказать о том, как можно собрать и использовать в своем проекте замечательную библиотеку 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. Получаем ошибку. Не расстраиваемся и делаем все в соответствии с изображением из следующего пункта
Смысл в том, чтобы для поля 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
Обсуждение на Russian Qt forum
Постоянный партнер блога:
Профессиональные услуги адвоката в Минске. Абрамович В.А. Корректировка таможенной стоимости. Защита интересов в хозяйственных судах. Признание и приведение в исполнение судебных постановлений иностранных судов на территории Республики Беларусь. - Abramovich.by
Есть проблемы при использовании 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"
если сталкивался с проблемой подскажи как решить ее.
Не получилось собрать библиотеку, делал все по пунктам, проблема возникла после пункта 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
Нужна помощь ;(