赞
踩
如果您只想使用GStreamer,请访问下载页面。 我们为Windows、macOS、Android和iOS提供预构建的二进制文件。
对于希望处理GStreamer代码本身和/或修改它的开发人员,或者希望快速尝试尚未在GStreamer正式版本中的功能的应用程序开发人员,这是推荐的设置。
注意:这仅适用于在Linux、Windows和macOS上进行GStreamer开发。如果您:
请参阅使用Cerbero构建, 可用于构建特定的GStreamer版本或构建未发布的版本 GStreamer代码。
该介子构建系统Meson介子构建系统是一个便携式构建系统,它是快速和 旨在比替代品更用户友好。它生成构建 指令可以由ninja执行。GStreamer project将其用于所有子项目。
2021年9月,所有主要的GStreamer模块都合并到一个 单一代码存储库,GStreamer单一存储库存在 在主GStreamer git存储库中,这是所有 GStreamer开发现在发生在GStreamer版本1.19/1.20及更高版本。
在mono存储库合并不同的GStreamer模块之前 单独的git存储库,并且有一个单独的meta-builder项目 调用gst-build来下载和构建所有子项目。 这是你应该使用如果你想建立或发展对旧稳定的分支,例如GStreamer 1.16或1.18。
如果您想针对即将到来的开发或稳定的分支进行构建或开发 您应该使用包含mono的GStreamer模块的main
分支 存储库。
在以下部分中,我们将只讨论GStreamer单声道存储库, 但gst-build
的工作方式基本相同,唯一的区别是 它也会下载各种GStreamer子模块。
为了构建当前的GStreamer开发版本,该版本将在不久的将来成为1.20稳定分支,克隆GStreamer mono存储库:
- git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.git
- cd gstreamer
或者,如果您有权访问存储库:
- git clone git@gitlab.freedesktop.org:gstreamer/gstreamer.git
- cd gstreamer
如果要构建稳定的1.18或1.16分支,请克隆gst-build
:
- git clone https://gitlab.freedesktop.org/gstreamer/gst-build.git
- cd gst-build
该存储库包含一些值得注意的脚本和目录:
meson.build
是顶级构建定义,它将递归地 配置所有依赖项。它还定义了一些帮助命令,允许您 拥有开发环境或轻松更新git GStreamer模块的存储库。subprojects/
是包含GStreamer模块和 选择的依赖项。配置一个模块(或在gst-build中一次配置多个模块)通过执行:
meson setup <build_directory>
该build_directory
是所有构建指令和输出的位置 位于(这也称为“目录外”建筑)。如果目录是没有创建,它将在这一点上完成。请注意,旧版本的meson
可以在没有任何命令参数的情况下运行,现在已弃用。
关于build_directory
的位置只有一个限制: 它不能与源目录相同(即您克隆模块的位置)。 它可以在该目录之外,也可以在该目录的/下方。
meson 配置完成后,您可以:
进入指定的构建目录并运行ninja。
- cd <build_directory>
- ninja
或者不是每次都切换到构建目录 执行ninja
命令,您可以将构建目录指定为 参数。此选项的优点是您可以从任何地方运行它 (而不是切换到ninja目录)
ninja -C </path/to/build_directory>
这将从该模块构建所有内容(以及构建gst-build或mono存储库时的子项目)。
注意:修改源文件时不需要重新运行meson
,只需 需要重新运行ninja
。如果构建/配置文件更改,ninja
将 自己找出meson
需要重新运行并会这样做自动。
GStreamer由多个工具、插件和组件组成。为了使它 易于开发和测试,有一个目标(由gst-build
或者单声道存储库,将来直接由meson
本身) 相应地设置环境变量,以便您可以使用所有直接构建结果。
对于任何熟悉python和虚拟环境的人来说,您会有宾至如归的感觉。
脚本称为gst-env.py
,它位于 GStreamer单一存储库。
另一种进入虚拟环境的方法是执行ninja -C <path/to/build_directory> devenv
。此选项选项较少,并且是 因此与某些工作流程不兼容。
注意:您不能在虚拟环境中使用meson
或使用ninja
重新配置 环境,因此在进入环境之前构建或从 另一个终端/终端选项卡。
使用一组特定的环境变量启动一个新的shell会话,告诉GStreamer在哪里可以找到插件或库。
最重要的选项是:
gst-env
将 附加包含构建目录中可执行文件的文件夹。.so
/.dll
文件),gst-env
将添加在 GstPluginsPath.json
文件和其他几个位置。gst-env
到 避免使用安装在环境之外的插件。gst-env
使用在给定构建目录中找到的那个。gst-env
。可用于识别环境是否处于活动状态。gst-env
将使用在 prefix/share/gstreamer-1.0/validate/scenarios
目录中的父 目录的gst-env.py
。subprojects/gst-devtools/validate/plugins
。总体思路是设置meson 构建目录,构建项目和切换到使用gst-env
开发环境 shell中的开发环境,提供一组单独的插件和工具。 要检查您是否在开发环境中运行:echo $GST_ENV
,它将由gst_env
设置为gst-$GST_VERSION
。
您会注意到提示相应更改。然后,您可以运行任何GStreamer 您刚刚直接构建的工具(如gst-inspect-1.0
,gst-launch-1.0
,…)。
gst-env
builddir
build
或builddir
目录在同一文件夹中 gst-env.py
。此选项允许指定 不同的位置。当您有多个不同的 构建但您不想在文件夹之间跳转。srcdir
gst-env.py
的父文件夹。 此选项用于获取存储库的当前分支,以获取 用于gdb的插件。sysroot
例如,如果你的rootfs /srv/rootfs,那么v4l2codecs插件 可能建于 /srv/rootfs/home/user/gstreamer/build/subprojects/gst-plugins-bad/sys/v4l2codecs
. 通过执行gst-env.py --sysroot /srv/rootfs
路径将被存储 在GST_PLUGIN_PATH内: /home/user/gstreamer/build/subprojects/gst-plugins-bad/sys/v4l2codecs
.
wine
winepath
only-environment
这个案例非常简单,你所要做的就是:
./gst-env.py
从项目根目录ninja -C build devenv
(build是生成的介子构建目录)meson devenv
从介子构建目录(例如build
)中 项目根这个案例与之前非常相似,唯一重要的偏差是 文件系统结构很重要。gst-env
将寻找一个 GstPluginPaths.json
文件在介子构建目录(例如: build
)或在build/subprojects/gstreamer
。
对于交叉编译,一般来说,看看meson留档或项目 比如gst-build-sdk。
基本思想是在交叉编译主机上准备一个rootfs,即 与目标机器相似,准备一个 cross-file.txt, 构建项目并通过 NFS mount/NFS rootfs/SSHFS/Syncthing等。
然后,在目标机器上,您必须从GStreamer路径中删除构建机器上rootfs的路径:
./gst-env.py --sysroot /path/to/rootfs-on-cross-compile-host
跟踪多个git远程存储库(例如官方上游存储库和您在gitlab上的个人克隆)并不少见。
在gstreamer mono存储库中,只需像使用任何其他git存储库一样添加您的个人git 远程,例如:
- git remote add personal git@gitlab.freedesktop.org:awesomehacker/gstreamer.git
- git fetch
在gst-build(用于1.16/1.18分支)中,您可以在相关的子项目目录中添加您的个人git远程文件(这必须针对每个感兴趣的子项目进行,因为旧的1.16/1.18分支位于单独的git存储库中),例如:
- cd subprojects/gstreamer/
- git remote add personal git@gitlab.freedesktop.org:awesomehacker/gstreamer.git
- git fetch
您可以使用meson
项目的 配置命令:
meson configure
如果您有一个已经配置的构建目录,您可以提供它,并且您还将获得该构建的配置值:
meson configure <build-directory>
该命令将列出每个选项:
值与
auto
意味着meson
将计算出在配置时间 正确的值(例如,如果您有可用的开发包 构建某个插件)。您还将看到带有
<inherited from main project>
的值。这主要是 用于泛型选项。例如,doc
选项是 存在于顶层,也存在于每个子模块(例如:gstreamer:doc
)。通常你只想设置该选项的值 一次,所有子模块都将继承。
然后,您可以在配置构建时向meson
提供这些选项 -D<option_name>=<option_value>
。例如,如果不想构建 Rust插件在gst-build
(rs
选项),你会做:
meson -Drs=disabled <build-directory>
您还可以查看meson_options.txt
文件和subproject/xyz/meson_options.txt
列出各种项目特定构建选项的文件。 然而,这些不包括所有标准meson选项。
运行单元测试是通过从构建目录调用meson test
来完成的, 或meson test -C <path/to/build_directory>
。如果有任何失败你可以 看看最后指定的文件,或者你可以运行meson test --print-errorlogs
,它会显示失败测试的日志 执行。
您还可以通过指定名称名称来仅执行测试的子集。对于 示例meson test gst_gstpad
。完整的测试列表可从 meson test --list
。
如果构建gst-devtools
子模块,还可以使用 gst-validate-launcher
gst验证运行测试。
gst-validate-launcher check.gst*
更多详细信息可在GStreamer单存储库自述文件中找到 或(对于较旧的1.16/1.18分支)在gst-build留档中。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。