GStreamer是一套强大的多媒体中间件系统,跟FFmpeg功能类似。官网链接点这儿。
各个Linux发行版(Ubuntu,fedora),大都集成了GStreamer相关工具,而作为软件层次结构最上层的播放器,几乎都是直接调用GStreamer相关库/插件来快速软件开发。
例如,播放器这类app的开发,只需重点关注各种菜单绘制、进度条更新、开始/暂停控件等,来响应用户操作,真正工作的大头都交给GStreamer库去干,例如demux,decode,render,
这种上-中-下的开发模块(软件架构)层次分明,不同(擅长不同业务)人干不同的事情,避免了重复造轮子(让做UI开发的再去重新开发个解码器或解码插件,肯定不现实)。
本篇的目标,主要介绍GStreamer源码如何编译成so库和bin,而不使用发行版自带的已构建好的库。因为Linux发行版常常滞后,而随同其发布时构建的GStreamer库也跟随滞后。
1. 环境
本人在Win10下虚拟机中进行代码构建、调试、验证,具体环境为:win10 + virtualbox + ubuntu16.04LTS + gstreamer1.17.0.1。
由于已是一年前做视频编解码插件时整的东西,有些知识点已经忘记了,但本人尽力保证信息的正确和完备性,特贴到博客中以备后面需要时查阅,有疑问的朋友们可以留言询问。
2. 源码下载
两种方式,一种是去官网下载,另外一种是去github上下载。前者提供各个版本的发行版(不带历史提交信息),后者是社区开发阶段中的仓库,可以方便查看历史修改记录。
3. 构建工具
早版本(2016-8-12前,Release 1.9.1前)的GStreamer源码编译,使用CMake+make方式,后来切换到了meson+ninja,介绍说的是编译速度加快了很多,如下描述:
貌似很多构建工具开始向meson和ninja切换,以后的开源包的编译可能会出现
由这种方式:
./autogen.sh && ./configure && make && sudo make install
变成了:
meson build && ninja -C build && sudo ninja -C build install
4. 构建前准备工作
上面一小节中已经介绍了要使用meson工具来构建,但是ubuntu16.04LTS是不带这个工具的,因此需要安装这个工具或由源码编译后安装。下面介绍搭建时的一些注意点:
4.1. python需要3.5以上版本,ubuntu16.04默认是2.7
4.2. meson版本>=0.48
meson的版本要求比较高,不能用apt-get直接安装。下载高版本的meson源码包(目前版本0.52.999),在meson包里面执行python3 setup.py install。
安装meson时又出现setuptools问题(sudo apt-get install python3-setuptools,再将meson工具从/usr/local/bin/meson默认安装路径中拷到/usr/bin下)。
4.3. meson build出错
glib未安装 -> sudo apt-get install glib-2.0,后面仍出问题显示模块未安装(放弃,通过源码编译安装)。
sudo apt-get install glib2.0这个可以安装。
4.4. 其他东西安装:flex,bison,直接使用apt-get来安装
5. 构建流程
meson build -Dprefix=/usr/gst-dev //利用meson.build生成文件meson.ninja,并放置于build目录
ninja -C build //进入目录,利用配置文件build.ninja编译
meson install //所有文件安装于/usr/gst-dev目录下
其他常用命令
meson build --reconfigure //重新配置,例如安装路径的前缀-Dprefix