Qt 应用程序中的媒体播放只有在以 root 身份执行时才有可能

Media playback in Qt application only possible when executing as root

我不完全确定我的问题是与共享库访问有关还是特定于 Qt,但这里是:

简而言之,我有一个 Qt5.5 应用程序,其中包含基于 QtMultimedia 的视频和音频播放器。当我 运行 应用程序作为 root 时,视频播放;否则,它将停留在 Loading 状态。绝对没有报错。

稍微长一点的故事:我无法使用官方 Ubuntu 14.04 存储库中提供的 Qt5.2,因为我的应用程序同时使用了 QtWebKit 和 QtMultimedia 模块;不幸的是,这些模块分别针对 gstreamer 0.1 和 1.0 构建,因此不能很好地协同工作。

所以,我已经从 this repository 安装了 Qt5.5,它安装到 /opt/qt55。尽管按照指示设置了 LD_LIBRARY_PATH,我 运行 还是遇到了上述问题。但是当 运行以 root 用户身份运行应用程序时,一切都会顺利进行。

这是 echo $LD_LIBRARY_PATH 的输出:

/opt/qt55/lib/x86_64-linux-gnu:/opt/qt55/lib

对于它的价值,我只是意识到它在 运行 作为 root 时工作,所以我尝试在另一台干净的机器上从源代码编译 Qt5.5(既没有 Qt5.2 也没有5.5 来自回购协议),并且在那里工作正常。所以我假设 Qt5.5 构建(这似乎不太可能)或我的环境有问题。

编辑 :如果有任何帮助,媒体会在使用 sudo ./appsudo -s 之后执行应用程序时播放,但 不会 sudo -i

之后

嗯,在比较了 printenvsudo printenvsudo -i printenv 的输出后,我确定了罪魁祸首:

QT_NO_GLIB=1

取消设置即可解决问题。