Gstreamer的用途
其实这个框架主要是用来替代ffmpeg的学习和使用。它也可以直接挂载各种媒体处理库,用字符串的形式构建流。
Gstreamer的构建问题
首先构建分为宿主机构建(比较简单)
以及基于kv260官方docker的交叉编译构建(另一篇说。因为交叉编译问题比直接编译问题大的多的多的多)
编译准备
首先要知道,可能存在一些已经构建过的库被我忽略了。但是基本上应该能构建全了。至少全流程没有比glib更难伺候的。而它难伺候的核心原因是因为天坑python iconv(注意不是python-iconv。这是俩库。)
关于以来libdvdread库他的autoconf生成的configure有极其混乱的语法问题。这个暂时没办法解决。交叉编译和宿主编译都过不了。这个以后单独开篇说。
apt install libxml2-dev libcurl4-openssl-dev libglib2.0-dev libjson-glib-dev libtool help2man texinfo
(因为交叉编译日常用debain系列。也就是常用ubuntu,所以对于redhat系列,包含CentOS和openEuler暂时没看库文件名称。但是应该大同小异。注意redhat系列一般用devel而不是dev作为开发组件的尾缀)
pip3 install meson==0.64.0rc2 ninja hotdoc gitlint
hotdoc用于构建doc部分。但是这部分又gir的问题。以后解决了再说。也就是暂时不构建doc。反正有官方文档。
(
尽可能只编译需要的。因为整个流程的不能自己处理的依赖巨长无比
交叉编译需要host。(vitis-ai填aarch64-xilinx-linux。安装根目录可以用到环境变量SDKTARGETSYSROOT(这个变量在vitis-ai官方的交叉编译环境初始化脚本中。我用的是3.0版本的库。)
)
../configure --prefix=$SDKTARGETSYSROOT/usr/local --host=aarch64-xilinx-linux
依赖: glib要2.74以上
meson --prefix=/install/path builddir
meson compile -C builddir
meson install -C builddir
依赖: faac
https://github.com/knik0/faac
注意在git下克隆别克隆错了
./bootstrat
本身没依赖也没选项,顶多启动一个--enable-drm。注意,即使是要有drm依赖,也要编译一遍不带drm的。因为很多库依赖原版。而启动了drm就不会编译原版了
依赖: faad
https://github.com/knik0/faad2
先为CMakeLists.txt添加如下参数(在Project后面添加)
add_compile_options(-fPIC)
要想生成动态库,需要手动为其添加SHARED关键字
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
依赖: libmodplug
https://github.com/Konstanty/libmodplug.git
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_SHARED_LIBS=ON ..
依赖: mjpegtools
需要注意这个依赖于mpeg 6b(6b是最低版本。但是这个版本很难编译。直接最新版本就行)
http://www.ijg.org/
注意,这个依赖不会自动编译库。需要添加--enable-shared开启动态库的编译。
../configure --enable-shared --prefix=/usr/local
开始编译mjpegtools本体:
https://sourceforge.net/projects/mjpeg/
编译mjpegtools直接
../configure --prefix=/usr/local
依赖: nasm
https://www.nasm.us/
这个不支持创建子目录编译,必须在源码根目录
同时这个是需要nasm的命令,而非库
依赖: x265
https://www.videolan.org/developers/x265.html
在build/linux直接运行
make-Makefiles.bash
依赖于nasm,默认直接安装在 /usr/local
,不用修改。需要修改直接改脚本内容。
如果你的host不在列表里(注意是全称必须一样),那就用通用linux然后配置环境变量
本质上它还是在用cmake编译。可以直接改脚本的参数。也可以用环境变量
依赖: a52
https://code.videolan.org/videolan/liba52
需要先运行bootstrap
再运行configure
这个库太老了,以至于无法正常查找automake版本。它最多只支持11,但是正常现在我们的版本都是16,所以把16添加到版本号列表就正常了
for v in 11 10 9 8 7 6 5;
do
在11前面添加个16
依赖: libcdio
需要依赖help2man
命令作为配置工具。不用交叉编译
https://www.gnu.org/software/libcdio/
直接在下面找git下载。没有包下载页面
先运行autogen.sh
注意他会自己运行configure,所以参数要提前带上。主要是prefix,因为它基本没别的参数
例如:
autogen.sh --perfix=/path/to/install --host=$HOST
依赖: libmpeg2
https://libmpeg2.sourceforge.io/files/libmpeg2-0.5.1.tar.gz
和a52一样有bootstrap对automake版本判断出错的问题
依赖: libcairo2
这个库不知道为啥,配置时检查不出来,必须编译时候才能被检查出来
git clone
git://anongit.freedesktop.org/git/cairo
meson setup --prefix=/usr/local -Dpkg_config_path=/usr/local/lib/x86_64-linux-gnu/pkgconfig/:/usr/local/lib/pkgconfig build
meson compile -C build
meson install -C build
依赖: libiconv
警告:这个库不仅仅要编译出来,而且要安装python模块。而且要求再python中成功import iconv
(注意,和python-iconv是两个库)
https://savannah.gnu.org/projects/libiconv/
字符集转换库
../configure --prefix=$PREFIX --enable-static=yes --host=$TARGET
如果出现O_BINARY报错:
解决办法来自:http://answers.google.com/answers/threadview/id/185259.html
在出现问题的文件加入如下:
#ifndef
O_BINARY
#define
O_BINARY 0
#endif
来自https://blog.csdn.net/pengjin1985/article/details/7518796
新版本有交叉编译莫名其妙的问题
编译本体
PATH=$PATH:/usr/local/bin meson setup -Dgstreamer:tools=enabled -Dbad=enabled -Dgst-plugins-bad:openh264=enabled -Dgst-plugins-bad:x265=enabled -Dgst-plugins-bad:faad=enabled -Dgst-plugins-bad:mpeg2enc=enabled -Dgst-plugins-bad:mplex=enabled -Dgst-plugins-ugly:a52dec=enabled -Dgst-plugins-ugly:dvdread=disabled -Dgst-plugins-ugly:mpeg2dec=enabled --prefix=/usr/local/gstreamer -Dpkg_config_path=/usr/local/lib/x86_64-linux-gnu/pkgconfig/:/usr/local/lib/pkgconfig -Dgpl=enabled --default-library=shared builddir
meson compile -C builddir
meson install -C builddir