本文适合开发者采用Gstreamer开发Gstreamer应用。只针对Linux。对于windows,可以参考 Building using Cerbero.
Meson构建系统是一种便携式构建系统,该系统速度快,并且比替代方案更加易于使用。 它生成构建指令,即可执行。 GStreamer项目将其用于所有子项目。由于GStreamer具有许多组件且具有许多依赖性,因此gst-build模块包含多个python3脚本,以简化使用Meson进行下载和配置的所有操作。 它使用meson的一项功能,该功能允许定义子项目,因此可以一次性配置和构建GStreamer模块以及某些依赖项。
一、设置gst-build
git clone https://gitlab.freedesktop.org/gstreamer/gst-build.git
cd gst-build
或者,如果您具有开发人员访问存储库的权限,请执行以下操作:
git clone git@gitlab.freedesktop.org:gstreamer / gst-build.git
cd gst-build
GST构建的布局
gst-build包含一些著名的脚本和目录:
meson.build是顶级构建定义,它将递归配置所有依赖项。它还定义了一些帮助程序命令,使您可以卸载开发环境或轻松更新GStreamer模块的git存储库。
subprojects /是包含GStreamer模块和一系列依赖项的目录。
基本meson用法
通过执行以下命令来配置模块(或在gst-build中一次完成几个配置):
meson<build_directory>
build_directory是所有构建指令和输出所在的位置(这也称为“目录外”构建)。如果未创建目录,则将在此时完成。请注意,不带任何命令参数调用meson就是隐式调用meson设置命令(即执行项目的初始配置)。
关于build_directory的位置只有一个限制:它不能与源目录相同(即,您在其中克隆模块或gst-build的位置)。它可以在该目录之外,也可以在该目录下/内。
配置meson后,您可以:
输入指定的构建目录并运行ninja。
cd <构建目录>
ninja
或者,您可以仅将构建目录指定为参数,而不是每次希望执行ninja命令时都切换到构建目录。此选项的优点是您可以在任何地方运行它(而不是更改为ninja目录)
ninja -C /path/ to/build_directory
这将从该模块(和子项目,如果在gst-build中)构建所有内容。
注意:修改源文件时,无需重新运行meson,只需要重新运行ninja 即可。如果您更改了构建/配置文件,ninja 将自行确定meson需要重新运行,并将自动执行。
进入“卸载”环境
GStreamer由几种工具,插件和组件组成。为了简化开发和测试,有一个目标(由gst-build提供)将相应地设置环境变量,以便您可以直接使用所有构建结果。
ninja -C <路径/到/构建目录> devenv
您会注意到提示已相应更改。然后,您可以运行直接构建的任何GStreamer工具(例如gst-inspect-1.0,gst-launch-1.0等)。
使用多个分支机构或远程站点
跟踪多个git远程存储库(例如官方上游存储库和您在gitlab上的个人克隆)并不罕见。
您可以使用configure命令列出meson项目的所有可用选项:
meson configure
这个命令非常关键,显示的结果如下:
这个可以指导如何写-D <选项名称> = <选项值> ,比如第一项 gst-plugins-bad:accurip, meson命令可以通过
meson -Dgst-plugins-bad:accurip=enabled
将该选项设置为使能。
如果您已经配置了构建目录,则可以提供该目录,并且还将获得该构建的配置值:
meson configure <build-directory>
该命令将列出每个选项:
注:auto的值表示meson将在配置时确定正确的值(例如,如果您有可用的开发包来构建某个插件)。
您还将看到<继承自主项目>的值。这主要用于作为通用选项的选项。例如,doc选项出现在顶层以及每个子模块上(例如:gstreamer:doc)。通常,您只想一次设置该选项的值,所有子模块都将继承自该选项。
然后,当使用-D <选项名称> = <选项值>配置构建时,可以为meson提供这些选项。例如,如果不想在gst-build(rs选项)中构建rust插件,则可以执行以下操作:
meson-Drs =disable <构建目录>
运行测试
通过从构建目录调用meson测试或meson测试-C <path / to / build_directory>来运行单元测试。如果有任何失败,您可以查看最后指定的文件,也可以运行meson测试--print-errorlogs,它将在执行后向您显示失败测试的日志。
您也可以通过指定名称name来仅执行测试的子集。例如meson测试gst_gstpad。完整的测试列表可通过meson测试--list获得。
如果构建了gst-devtools子模块,则还可以使用gst-validate-launchergst-validate来运行测试。
gst-validate-launcher check.gst *
下面是我用的meson 编译选项:希望可以作为大家的参考
meson --default-library=static -Dgst-full-libraries=app,video -Dgood=enabled -Dgst-plugins-good:qt5=enabled -Dauto_features=disabled -Dgstreamer:tools=enabled -Dbad=enabled -Dgst-plugins-bad:openh264=enabled -Dbad=enabled -Dgst-plugins-bad:msdk=enabled ./build