【问题标题】:How to use LibVLC with Qt 5如何在 Qt 5 中使用 LibVLC
【发布时间】:2014-07-31 20:14:47
【问题描述】:

我正在尝试在 Qt 5 程序中使用 LibVLC 来打开 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();
}

编译很好。但是当我构建它时程序立即崩溃(使用 Qt Creator)。有什么想法吗?

非常感谢

【问题讨论】:

    标签: c++ qt vlc libvlc


    【解决方案1】:

    很多事情都可能导致这次崩溃。最好是获取 VLC 源代码来追溯问题。在初始化 libVLC 时传递选项“--verbose=2”也会有所帮助。

    在我的情况下,崩溃的原因是由于 vlc 的 ubuntu 包中的这个错误: https://bugs.launchpad.net/ubuntu/+source/vlc/+bug/1328466

    调用 libvlc_new() 时,vlc 模块及其依赖库被加载到内存中。 LibVLC 的 qt 模块正在搜索 Qt4 共享对象而不是 Qt5(手动安装)。

    解决方案是重建指向 Qt4 二进制文件的过时模块缓存。您可以在命令行上重置它:

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

    或将选项传递给 vlc:

    --reset-plugins-cache
    

    【讨论】:

    • 这对我没有帮助。我仍然有 usr/lib/libvlc-qt-widgets.so.0.9 取决于 QT4,而不是 QT5
    • 有时sudo ldconfig -v 有帮助。如果您重新安装了一些库,它将正确链接到它们
    【解决方案2】:

    我从未使用过这个库,但你使用的正是这段代码吗?

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

    这条路径可能是问题所在。

    【讨论】:

    • 我没有完全使用这段代码,我的路径很好;)
    • 好的,我开始编译代码并毫无问题地运行它。这是我用来安装库的: sudo apt-get install libvlc5 libvlc-dev libvlccore-dev 我没有足够的信息来说明可能出了什么问题。但是,它对我有用。
    • 好的我已经安装了你建议的库,但是没有改进。这就是我得到的:Starting /home/domi/build-projectLoic-Desktop-Debug/projectLoic... The program has unexpectedly finished. /home/domi/build-projectLoic-Desktop-Debug/projectLoic crashed
    • 我需要知道代码在哪一行崩溃。调试模式下的 QtCreator 应该为您提供程序执行的最后一行以及带有函数调用的堆栈。有时,安装了以前版本的库并产生这种冲突。我建议尝试卸载这两个库(Qt 和 libVLC)。确保您没有它们在库文件夹中。我认为是/usr/lib。然后,从头开始重新安装。 (我曾经用libosg遇到过同样的问题,我就是这样解决的)。
    • 非常感谢您帮助我。在调试模式下,我得到:The inferior stopped because it received a signal from the Operating System. Signal name : SIGSEGV Signal meaning : Segmentation fault
    【解决方案3】:

    您使用的是什么 Linux 发行版?

    我在使用 Qt5 和 LibVLC 时遇到了同样的问题,主要原因(Ubuntu 12.04 LTS 和 14.04 LTS)是 LibVLC 正在加载与 Qt5 冲突的 qt4 接口插件。如果您检查调用堆栈,您很可能会看到正在加载 Qt4 库,从而导致崩溃。

    如果这是问题所在,则只有 3 个选项(在 Ubuntu 12.04 和 14.04 LTS 64 位上使用 LibVLC 2.2 和 Qt5 进行测试)。

    第一个(最糟糕的)是删除qt4用户界面插件。您可以通过移动并运行然后将其设置回来来测试这是问题所在。删除很可能会破坏您的常规 VLC 播放器。

    第二个选项是创建插件目录的副本,并使用环境变量 VLC_PLUGIN_PATH 将其设置在运行时路径中。但是在不更改原始插件路径文件夹的情况下,我很难让它工作(这会破坏你的 VLC 播放器,除非你修改你的快捷方式等来设置 VLC_PLUGIN_PATH。

    第三个选项,也是我最终做的,是自定义构建我自己的静态 LibVLC 二进制文件,对源代码进行一些编辑,这样它就不会加载随 VLC 安装的 qt4 接口插件。您可以按照以下步骤执行此操作。

    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.
    

    然后只链接到这个库。

    【讨论】:

    • 此解决方案有效,因为在内部 libvlc 尝试链接到遍布系统的一些 wandom 库。尝试使用 strace 或 ltrace 来查看。通过静态链接,您可以避免该搜索。另一种方法是跟踪流氓库并将其删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2011-10-15
    相关资源
    最近更新 更多