Как использовать LibVLC с Qt 5

Я пытаюсь использовать LibVLC в программе Qt 5, чтобы открыть экземпляр VLC и воспроизвести видео. Следующий код получен из https://wiki.videolan.org/LibVLC_Tutorial/ Я использую Linux.

.pro:

TEMPLATE = app
TARGET = projectLoic
INCLUDEPATH += . vlc
QT += widgets
# Input
HEADERS +=
SOURCES += main.cpp
LIBS +=-lvlc

главный:

#include <vlc vlc.h="">
#include <qapplication>
int main(int argc, char* argv[])
{ QApplication app(argc, argv); libvlc_instance_t * inst; libvlc_media_player_t *mp; libvlc_media_t *m; // Load the VLC engine inst = libvlc_new(0, NULL); // Create a new item m = libvlc_media_new_path (inst, "/home/........mp3"); // Create a media player playing environement mp = libvlc_media_player_new_from_media (m); // play the media_player libvlc_media_player_play (mp); return app.exec();
}
</qapplication></vlc>

Компиляция в порядке. Но программа сразу же падает, когда я ее создаю (с Qt Creator). Есть идеи?

Большое спасибо

3 ответа

Многое может вызвать этот крах. Лучше всего получить исходный код VLC для отслеживания проблемы. Передача опции "--verbose = 2" при инициализации libVLC также может помочь.

В моем случае причина сбоя была вызвана этой ошибкой в пакете vlc ubuntu: https://bugs.launchpad.net/ubuntu/+source/vlc/+bug/1328466

При вызове модулей libvlc_new() vlc и их зависимые библиотеки загружаются в память. Модуль qt LibVLC искал для Qt4 общих объектов вместо Qt5 (вручную установлен).

Решение состояло в том, чтобы перестроить кеш модуля, который устарел, указывая на двоичные файлы Qt4. Вы можете сбросить его в командной строке:

sudo /usr/lib/vlc/vlc-cache-gen -f /usr/lib/vlc/plugins/

Или перейдите к опции vlc:

--reset-plugins-cache


Какое распределение Linux вы используете?

Я столкнулся с этой проблемой с Qt5 и LibVLC, и основной причиной (Ubuntu 12.04 LTS и 14.04 LTS) было то, что LibVLC загружал плагин интерфейса qt4, который противоречил Qt5. Если вы проверите свой стек вызовов, вы, скорее всего, увидите, что при загрузке библиотеки Qt4 произошел сбой.

Если это проблема, есть только 3 варианта (протестировано с LibVLC 2.2 и Qt5 на Ubuntu 12.04 и 14.04 LTS 64 бит).

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

Второй вариант - создать копию каталога плагинов и установить его в вашем пути выполнения, используя переменную окружения VLC_PLUGIN_PATH. но у меня возникли проблемы с тем, чтобы работать, не изменяя также исходную папку пути плагина (что приведет к поломке вашего проигрывателя VLC, если вы не измените свои ярлыки и т.д., чтобы установить VLC_PLUGIN_PATH.

Третий вариант и то, что я закончил делать, состоял в том, чтобы настроить собственный собственный статический диск LibVLC с несколькими изменениями в исходный код, чтобы он не загружал плагин интерфейса qt4, установленный с VLC. Вы можете выполнить следующие действия.

1) Download VLC Source Code for your platforms distribution. http://download.videolan.org/pub/videolan/vlc/ Make sure you download the version matching your distribution. For example, match the VLC version to what is installed with Ubuntu.
2) Extract source code to folder
3) Install dependencies for the OS distribution sudo apt-get build-dep vlc
4) Modify src/modules/bank.c Edit the module_InitDynamic function Add the following code at the top of the function: // HACK TO DISABLE QT4 PLUGIN if(strstr(path, "qt4") != NULL) return NULL; // END HACK
3) From terminal ./bootstrap ./configure --disable-qt --disable-skins2 --enable-xcb --prefix=/home/$USER/vlc-custom_build_output_folder_name ./make ./make install
4) Copy/Save the resulting files in the install folder.

Затем просто связывайтесь с этой библиотекой.


Я никогда не использовал эту библиотеку, но вы используете именно этот код?

m = libvlc_media_new_path (inst, "/home/........mp3");

Этот путь может быть проблемой.

licensed under cc by-sa 3.0 with attribution.