ubuntu下的qt和gstreamer1.0环境报错问题解决

defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer"

开发环境:

ubuntu14.04.5 

QT5.9.1

需求:

在ubuntu中实现qt播放MP3或者WAV音频文件

问题:

和开头的报错一样,只要大家搜索到这个报错,基本上搜不到相应的linux环境解决方法,网上只有windows的解决方案。经过多次尝试、甚至重新安装gstreamer1.0都不行

gstmreaer:

一个Linux环境下的音乐播放器,qt代码中的播放音频部分需要引用他的库multimedia。

当我们在Pro文件中添加了它之后,我们要使用它的带的QMediaPlayer类,代码很简单,就几行。

QMediaPlayer *musicPlayer = new QMediaPlayer();

    musicPlayer->setMedia(QUrl::fromLocalFile(绝对路径));

    musicPlayer->setVolume(80);

    musicPlayer->play();

正常编译后应该能够播放音乐的,但是这时遇到了文章开头的报错,网上现存的解决方法都没有用,经过研究,确定是QT没有找到gstreamer1.0的运行库。顺便解释一下,为什么是gstreamer1.0。

ubuntu14自带gstreamer是0.1版本的,qt5的官方文档中指出gstreamer的版本需要大于等于1.0,所以我们要重新安装新版gstreamer1.0,而且所谓的“1.0”是一个泛指,我这里用的是1.6版本,他最后生成的库的名字还是以1.0命名,所以下面看到1.6版本不要有疑惑,那是对的。

因上原因,我们现在安装gstreamer1.6,这里使用手工编译安装的方式安装。

这里参考https://blog.csdn.net/yibinqi6303/article/details/78984007这位作者的安装方式

或者查看我的备份

其中遇到些问题,

1.新安装的系统没有安装GCC和Cmake,自行百度安装

2.安装过程中会有依赖问题,通过aptitude软件解决依赖问题

sudo apt-get install -y aptitude

3.关于输出文件路径,我们在这里新建一个文件,路径为

/home/用户名/Downloads/gstreamer-1.0

用来存储编译成功后输出的运行库文件,也就是QT5所需的高版本运行库的最终引用路径

安装:

我们需要这几个文件,去这里下载。

●  gstreamer-1.6.0.tar.xz

●  gst-plugins-base-1.6.0.tar.xz

●  gst-plugins-good-1.6.0.tar.xz

●  gst-plugins-bad-1.6.0.tar.xz

●  gst-plugins-ugly-1.6.0.tar.xz

我们统一存在同一个路径下面:/home/用户名/Downloads/gstreamer-dl

下载成功后均在上面这个目录下解压,解压出来的效果是这样的


解压效果

我们需要在这五个文件夹中都执行同样的操作

1.配置编译安装完成后的输出路径,即为上面提到的   /home/用户名/Downloads/gstreamer-1.0

2.make

3.make install

补充,有的编译过程之前需要安装开发环境。

sudo apt-get install build-essential dpkg-dev flex bison autotools-

dev automake liborc-dev autopoint libtool gtk-doc-tools

libgstreamer1.0-dev  这个安装过程是没问题的


sudo apt-get install libxv-dev libasound2-dev libtheora-dev libogg-

dev libvorbis-dev这个也没问题

sudo apt-get install libbz2-dev libv4l-dev libvpx-dev libjack-

jackd2-dev libsoup2.4-dev libpulse-dev这里和系统自带的版本有冲突

需要先安装aptitude,然后通过aptitude命令重新安装

sudo aptitude install libbz2-dev libv4l-dev libvpx-dev libjack-

jackd2-dev libsoup2.4-dev libpulse-dev

无脑yes即可,后面的同理安装。

sudo aptitude  install faad libfaad-dev libfaac-dev

需要注意的是,我的安装顺序均按原作者的安装顺序,先编译主程序gstreamer-1.6.0(编译完后记得设置环境变量export PKG_CONFIG_PATH=/home/用户名/Downloads/gstreamer-1.0/lib/pkgconfig),再编译各个插件,顺序为base、good、bad、ugly。

最后再添加一个环境变量export LD_LIBRARY_PATH=/home/用户名/Downloads/gstreamer-1.0/lib/

到这里我们的gstreamer环境已经搞定了,我们继续搞定QT引用外部运行库的问题。

前面已经分析过QT之所以报错:defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer"  是因为没有找到外部库的路径,我们通过Pro文件的官方解释,通过LIBS     +=  -L/home/用户名/Downloads/gstreamer-1.0/lib/ -lgstreamer-1.0添加外部库的地址。

Pro修改方法

这里为什么这么写呢,因为官方语法是这么规定的!其中-L后面紧跟路径,不能有空格,-l后面紧跟库名,不能有空格。这里有几个细节,编译过程中会有类似提示(因为文章是事后写的,图没有原版的,找了个类似的,而且文中命令都是手写的,难免会有错误,请及时告知作者)


编译输出内容

我们可以看到他的本质是调用了gcc命令的-L方式,语法是这样的,-L后紧跟路径,-l后紧跟库名,当有多个库需要加载的时候以空格隔开,库名不要带后缀(windows下),linux下需要注意代码不要带前缀的lib和后缀的so,所以库名部分的命令这么写“-lgstreamer-1.0”,其实库名是“libgstreamer-1.0.so”!

这时候再去qt环境中,清空一下项目,重新编译看看,是不是能够愉快的播放音频了。如果不行考虑一下是不是mp3或者wav格式不对,都试下,我只试了wav可用,mp3不保证可用。再考虑一下qt代码中音频文件的地址是不是写对了。最后再仔细看看是不是哪里漏掉了。

你可能感兴趣的:(ubuntu下的qt和gstreamer1.0环境报错问题解决)