QMediaPlayer 在 Ubuntu 16.04 / Qt 5.6 上不播放任何内容
QMediaPlayer doesn't play anything on Ubuntu 16.04 / Qt 5.6
我在 Ubuntu 16.04 上使用官方 Qt 5.6 SDK,当我尝试播放 mp3 文件时,我得到:
defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer"
代码非常简单:
mMediaPlayer->setMedia(QUrl::fromLocalFile(myMp3File));
mMediaPlayer->play();
这适用于 Android 并且它之前适用于我的 Ubuntu 14.04 机器。我错过了什么?默认情况下似乎已经安装了所有必需的 gstreamer(通过文档)东西,但它仍然不起作用:
$ dpkg -l | grep gstream
ii gir1.2-gstreamer-1.0 1.8.2-1~ubuntu1 amd64 GObject introspection data for the GStreamer library
ii gstreamer1.0-alsa:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugin for ALSA
ii gstreamer1.0-clutter-3.0 3.0.18-1 amd64 Clutter PLugin for GStreamer 1.0
ii gstreamer1.0-fluendo-mp3:amd64 0.10.32.debian-1 amd64 Fluendo mp3 decoder GStreamer 1.0 plugin
ii gstreamer1.0-libav:amd64 1.8.2-1~ubuntu1 amd64 libav plugin for GStreamer
ii gstreamer1.0-plugins-bad:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugins from the "bad" set
ii gstreamer1.0-plugins-bad-faad:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer faad plugin from the "bad" set
ii gstreamer1.0-plugins-bad-videoparsers:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer videoparsers plugin from the "bad" set
ii gstreamer1.0-plugins-base:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugins from the "base" set
ii gstreamer1.0-plugins-base-apps 1.8.2-1ubuntu0.1 amd64 GStreamer helper programs from the "base" set
ii gstreamer1.0-plugins-good:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugins from the "good" set
ii gstreamer1.0-plugins-ugly:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugins from the "ugly" set
ii gstreamer1.0-plugins-ugly-amr:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugins from the "ugly" set
ii gstreamer1.0-pulseaudio:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugin for PulseAudio
ii gstreamer1.0-tools 1.8.2-1~ubuntu1 amd64 Tools for use with GStreamer
ii gstreamer1.0-x:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugins for X11 and Pango
ii libgstreamer-plugins-bad1.0-0:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer development files for libraries from the "bad" set
ii libgstreamer-plugins-base1.0-0:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer libraries from the "base" set
ii libgstreamer-plugins-good1.0-0:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer development files for libraries from the "good" set
ii libgstreamer1.0-0:amd64 1.8.2-1~ubuntu1 amd64 Core GStreamer libraries and elements
ii libreoffice-avmedia-backend-gstreamer 1:5.1.4-0ubuntu1 amd64 GStreamer backend for LibreOffice
...当然我的声音在其他方面也很完美。
首先,运行 您的应用程序 QT_DEBUG_PLUGINS=1 查看插件错误。
如果您看到关于 "libgstaudio-0.10.so.0" 的错误,这是 GStreamer 版本问题。官方 Qt 二进制文件似乎需要 GStreamer 0.10。
我找到的解决方案:
- 使用您的发行版附带的 libqt,使用您的包管理器:这是我找到的最佳解决方案,因为它是使用正确的 GStreamer 版本构建的。我使用不同的 chroot 为嵌入不同 GStreamer 版本的发行版制作包。
- Compile Qt from source to enable Gstreamer 1.0:未测试
- 安装 Gstreamer 0.10:我不推荐此选项,或者如果需要,请使用具有较旧发行版的 chroot。
我在 Ubuntu 16.04 上使用官方 Qt 5.6 SDK,当我尝试播放 mp3 文件时,我得到:
defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer"
代码非常简单:
mMediaPlayer->setMedia(QUrl::fromLocalFile(myMp3File));
mMediaPlayer->play();
这适用于 Android 并且它之前适用于我的 Ubuntu 14.04 机器。我错过了什么?默认情况下似乎已经安装了所有必需的 gstreamer(通过文档)东西,但它仍然不起作用:
$ dpkg -l | grep gstream
ii gir1.2-gstreamer-1.0 1.8.2-1~ubuntu1 amd64 GObject introspection data for the GStreamer library
ii gstreamer1.0-alsa:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugin for ALSA
ii gstreamer1.0-clutter-3.0 3.0.18-1 amd64 Clutter PLugin for GStreamer 1.0
ii gstreamer1.0-fluendo-mp3:amd64 0.10.32.debian-1 amd64 Fluendo mp3 decoder GStreamer 1.0 plugin
ii gstreamer1.0-libav:amd64 1.8.2-1~ubuntu1 amd64 libav plugin for GStreamer
ii gstreamer1.0-plugins-bad:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugins from the "bad" set
ii gstreamer1.0-plugins-bad-faad:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer faad plugin from the "bad" set
ii gstreamer1.0-plugins-bad-videoparsers:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer videoparsers plugin from the "bad" set
ii gstreamer1.0-plugins-base:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugins from the "base" set
ii gstreamer1.0-plugins-base-apps 1.8.2-1ubuntu0.1 amd64 GStreamer helper programs from the "base" set
ii gstreamer1.0-plugins-good:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugins from the "good" set
ii gstreamer1.0-plugins-ugly:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugins from the "ugly" set
ii gstreamer1.0-plugins-ugly-amr:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugins from the "ugly" set
ii gstreamer1.0-pulseaudio:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugin for PulseAudio
ii gstreamer1.0-tools 1.8.2-1~ubuntu1 amd64 Tools for use with GStreamer
ii gstreamer1.0-x:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer plugins for X11 and Pango
ii libgstreamer-plugins-bad1.0-0:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer development files for libraries from the "bad" set
ii libgstreamer-plugins-base1.0-0:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer libraries from the "base" set
ii libgstreamer-plugins-good1.0-0:amd64 1.8.2-1ubuntu0.1 amd64 GStreamer development files for libraries from the "good" set
ii libgstreamer1.0-0:amd64 1.8.2-1~ubuntu1 amd64 Core GStreamer libraries and elements
ii libreoffice-avmedia-backend-gstreamer 1:5.1.4-0ubuntu1 amd64 GStreamer backend for LibreOffice
...当然我的声音在其他方面也很完美。
首先,运行 您的应用程序 QT_DEBUG_PLUGINS=1 查看插件错误。
如果您看到关于 "libgstaudio-0.10.so.0" 的错误,这是 GStreamer 版本问题。官方 Qt 二进制文件似乎需要 GStreamer 0.10。
我找到的解决方案:
- 使用您的发行版附带的 libqt,使用您的包管理器:这是我找到的最佳解决方案,因为它是使用正确的 GStreamer 版本构建的。我使用不同的 chroot 为嵌入不同 GStreamer 版本的发行版制作包。
- Compile Qt from source to enable Gstreamer 1.0:未测试
- 安装 Gstreamer 0.10:我不推荐此选项,或者如果需要,请使用具有较旧发行版的 chroot。