本文章介绍了gstreamer是如何从源码上构建的,并且记录了一些遇到的问题以及解决方法,供大家参考
前言
通过查阅官方文档和网上搜索教程,经过几天的努力,终于知道了如何从源码上编译gstreamer,将本次编译过程记录下来,供大家参考。
一、gstreamer是什么?
这是用来构建流媒体应用的开源框架,能够简化音视频应用的开发。
二、环境配置
通过查阅官方文档可知,需要 python 3.5+ 的版本,而Ubuntu18.04初始版本为 3.6.9,所以版本不需要改动,只需要一些操作即可
首先观察python版本及链接
ls /usr/bin/python*
然后删除旧的链接
rm -rf /usr/bin/python
再建立新的链接
sudo ln -s /usr/bin/python3.6 /usr/bin/python
下载pip3
sudo apt-get install python3-pip
给pip3换源,这里换成阿里云
mkdir ~/.pip
cd ~/.pip && touch pip.conf
gedit pip.conf
输入以下内容
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
use-mirrors = true
mirrors = http://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com
然后升级pip3
python -m pip install --upgrade pip
安装编译及安装的工具,这里meson选择 0.58.2 的版本
sudo pip3 install meson==0.58.2
sudo apt install ninja-build
安装依赖包
sudo apt-get install build-essential dpkg-dev flex bison autotools-dev automake liborc-dev autopoint libtool gtk-doc-tools python3-pip bison flex
sudo snap install valgrind --classic
sudo sanp install cmake --classic
sudo apt install valgrind pkg-config
sudo apt-get install libgirepository1.0-dev libcap-dev libgtk-3-dev libunwind-dev clzip gobject-introspection libdw-dev
三、初步构建
接下来就是获取gstreamer源码了,在这里我们使用git下载,其版本为1.18.3
可以将 gst-build 放在 home 的用户目录下
这里本人放在 /home/aaron-liu,aaron-liu即为用户名,切换回普通用户
git clone -b 1.18.3 https://gitlab.freedesktop.org/gstreamer/gst-build.git
进入目录中,开始构建,可以使用 -Dprefix 来指定安装路径
meson builddir -Dprefix=/home/aaron-liu/gst-build/install
然后等待一段时间,在这过程中会下载很多的数据包,所以建议大家把Ubuntu换成国内源
下载好了以后,执行下面这条命令
ninja -C builddir install
之后要设置环境变量,记得路径不要写错了
gedit ~/.bashrc
在末尾添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/aaron-liu/gst-build/install/lib/x86_64-linux-gnu:/home/aaron-liu/gst-build/install/lib/x86_64-linux-gnu/gstreamer-1.0
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/aaron-liu/gst-build/install/lib/x86_64-linux-gnu:/home/aaron-liu/gst-build/install/lib/x86_64-linux-gnu/pkgconfig
激活环境变量
source ~/.bashrc
这时候可以播放音乐测试一下,media目录需要自己创建
在此目录下 /home/aaron-liu/gst-build
./install/bin/gst-launch-1.0 filesrc location=media/0.mp3 ! decodebin ! audioconvert ! audioresample ! autoaudiosink
不出意外的话还是出意外了,本人有加载出时间,但是没有任何声音
这里提示部分插件不能使用,找不到文件或目录
还记得meson的时候出现过很多的 NO 吗?
推测还是这个原因,依赖包还是没有全面安装,meson编译不完整
四、补充依赖包
查阅资料,需要安装依赖包,若是前面的构建报错,大概是依赖包的问题,所以可以先安装依赖包,再构建框架
安装的时候可以进入 root 用户安装
sudo apt-get install libxv-dev libasound2-dev libtheora-dev libogg-dev libvorbis-dev libbz2-dev libv4l-dev libvpx-dev libjack-jackd2-dev libsoup2.4-dev libpulse-dev faad libfaad-dev libfaac-dev libx264-dev libmad0-dev yasm
仍需安装依赖包,在meson编译的时候,会出现许多的 NO ,这表明还有很多的依赖包没有安装,导致meson无法完全编译
sudo apt-get install libgl-dev gudev-1.0 wayland-protocols libgbm-dev libjpeg-dev libopus-dev libvorbisidec-dev libflac-dev libmp3lame-dev libcaca-dev libdv-dev libmpg123-dev libraw1394-dev libavc1394-dev libiec61883-dev
sudo apt-get install libshout-dev libspeex-dev libtwolame-dev librabbitmq-dev wildmidi flite libxkbcommon-x11-dev libmms-dev libmicrodns-dev libgme-dev libtesseract-dev libvisual-0.4 libssh-dev libsdl2-dev pocketsphinx
sudo apt-get install libwavpack-dev libopencv-dev libvulkan-dev libltc-dev bluez gudev-1.0 libusb-1.0 gudev-1.0 libva-dev gudev-1.0 libcmocka-dev libchromaprint-dev liblcms2-dev libdirectfb-dev libdca-dev libfdk-aac-dev libfluidsynth-dev libsndfile-dev
sudo apt-get install libpocketsphinx-dev libgupnp-igd-1.0-dev libbs2b-dev libgtest-dev libopenni2-dev libdvdnav-dev librtmp-dev libsbc-dev libsrtp2-dev libwebrtc-audio-processing-dev libopencore-amrnb-dev libcdio-dev libbluray-dev libshine-dev
sudo apt-get install libsoundtouch-dev libspandsp-dev libvo-aacenc-dev libvo-amrwbenc-dev libwildmidi-dev libx265-dev libzbar-dev libopenmpt-dev libmodplug-dev libmjpegtools-dev libkate-dev liblrdf-dev libde265-dev
五、再次构建
删除之前的目录,重新编译安装
rm -rf builddir/
rm -rf install/
meson builddir -Dprefix=/home/aaron-liu/gst-build/install
ninja -C builddir install
在meson的时候,出现了这个问题,查询了一下,发现是meson版本的问题,应该是系统自带的旧版本
找了一下解决方法,大家可以试试
然后就可以继续编译了,可以看到 NO 少了一点。。。看来一些依赖包还是没有安装
现在就没什么问题了,能够正常播放音乐,试了下mp4,可以正常播放
通过调用 ./install/bin/gst-launch-1.0 来播放媒体文件,很麻烦,所以这里我们使用链接简化一下命令,此链接效果大家可以参考前面的python
sudo ln -s /home/aaron-liu/gst-build/install/bin/gst-launch-1.0 /usr/bin/gst-launch-1.0
然后试试效果
gst-launch-1.0 filesrc location=media/0.mp3 ! decodebin ! audioconvert ! audioresample ! autoaudiosink
这样就可以在任意地方直接使用 gst-launch-1.0 了
当然了gstreamer有三个命令行工具,所以我们还需要给其他两个工具也链接一下
sudo ln -s /home/aaron-liu/gst-build/install/bin/ges-launch-1.0 /usr/bin/ges-launch-1.0
sudo ln -s /home/aaron-liu/gst-build/install/bin/gst-inspect-1.0 /usr/bin/gst-inspect-1.0
六、总结
至此 gstreamer 1.18.3 就构建完成了