注意:2021年9月,GStreamer项目将其所有git存储库合并为一个单一的统一存储库,通常称为 monorepo。这篇文章中称为“gst-build”的构建系统现在位于这个单一存储库的根目录中。
GStreamer依托于base和good等多个仓库构建其生态系统,目前在Gitlab拥有30多个项目。所以,一个统一的工具/构建系统一直是构建指定版本所必需的。 十多年来,gstreamer/scripts目录中存在一个名为gst-uninstalled的脚本来构建整个解决方案。虽然这个工具不是很灵活并且在命令行中缺少一些选项,但如果你想解决我们最喜欢的框架中的一个令人惊讶的错误,它已经足够好了。但它并不擅长提供真正的瑞士军刀方法来构建GStreamer及其依赖项。
几年前创建的另一个名为cerbero的构建系统提供了一个独立的解决方案来构建GStreamer包。除了适当的sandbox之外,该解决方案还提供了广泛的选项,以避免系统依赖性,并能够为给定版本准备包含第三方软件依赖性的软件包。 Cerbero是用Python编写的,可以像gst-uninstalled一样为主机创建构建,也可以根据主机为各种常见目标创建构建。事实上,Linux常规桌面主机将能够为x86(32/64位)交叉构建GStreamer,但也可以为ARM等体系结构和Microsoft Windows等系统交叉构建GStreamer。它还可以为Android和iOS创建构建。
尽管shell环境允许工件测试,但Cerbero对于与GStreamer相关的日常开发作为新插件开发或错误修复并不是很方便,因为在不丢失当前工作的情况下更新到最新版本并不容易,或者测试GStreamer的另一个分支。
gst-build的兴起
为了改善这种情况,gst-build诞生了。利用不断发展的Meson构建系统的灵活性,gst-build已被实施以取代 gst-uninstalled并提供快速流畅的环境来破解GStreamer及其依赖项。
Autotools已死,Meson万岁
自GStreamer 1.18以来,Meson已被选为官方GStreamer存储库的唯一构建系统。Meson以其简单、快速和灵活取代了Autotools,因此与gst-build一起使用也是完美的。事实上,gst-build只是一个Meson项目,包括GStreamer子项目,带有启用/禁用选定子项目的选项。
第一次使用gst-build
gst-build主要是一个meson.build项目。它读取位于子项目文件夹中.wrap 文件以确定项目的元素,例如gstreamer或gst-plugins-base。这些子项目也使用介子构建系统。gst-build附带了开始使用GStreamer所需的基本项目,并且几乎没有系统依赖性地构建它。 gst-build在子项目目录中捆绑了libffi或glib。它还可以使用系统中的pkg-config收集依赖项来构建GStreamer插件,例如flac,例如,它需要libflac来构建。
那么让我们来看看如何使用gst-build吧!
环境
由于我们要选择具体的开发环境,所以选择了64位机器:
- Ubuntu 18.04
- Bash shell
先决条件
- build-essential (gcc)
- python3
- git
- meson
- ninja
安装meson和ninja
以下是在运行meson和ninja之前需要安装的基本依赖项。
$ sudo apt install build-essential python3 git ninja-build python3-pip
您现在可以从pip存储库安装meson。
$ pip3 install --user meson
这会将meson安装到~/.local/bin中,默认情况下它可能会或可能不会自动包含在您的PATH中。
获取和配置
此步骤会将GStreamer存储库下载到subprojects文件夹中,其中包括一些依赖项,例如glib等。基本上它会尝试下载尽可能多的mesonified第三方库,并发布cmake的最新消息,因为最近已在必要时实施了桥梁。
$ git clone https://gitlab.freedesktop.org/gstreamer/gst-build
$ cd gst-build
$ meson build --buildtype=debug
...
All GStreamer modules 1.17.0.1
Subprojects
FFmpeg: YES
dssim: YES
gl-headers: YES
graphene: YES
gst-devtools: YES
gst-editing-services: YES
gst-examples: YES
gst-integration-testsuites: YES
gst-libav: YES
gst-omx: YES
gst-plugins-bad: YES
gst-plugins-base: YES
gst-plugins-good: YES
gst-plugins-rs: NO
gst-plugins-ugly: YES
gst-python: NO
gst-rtsp-server: YES
gstreamer: YES
gstreamer-sharp: Feature 'sharp' disabled
gstreamer-vaapi: YES
gtest: NO
libmicrodns: YES
libnice: YES
libpsl: YES
libsoup: NO
openh264: YES
orc: YES
pygobject: NO
sqlite: YES
tinyalsa: NO
x264: YES
Option buildtype is: debug [default: debugoptimized]
Found ninja-1.8.2 at /usr/bin/ninja
在此步骤之后,一个新创建的名为build的文件夹应该可供ninja用来构建二进制文件。
您可能会注意到,–buildtype=debug已添加到命令行以获得无需优化的完全可调试结果。如果您想微调构建,我邀请您访问此页面。
构建gst-build
此步骤将构建所有GStreamer库以及来自base/good/bad/ugly/libav的插件,如果它们的依赖关系已满足或由 st-build构建(即glib、openh264等)。
$ ninja -C build
测试 gst-build
此命令将创建一个环境,其中以前构建的所有工具和插件都可以在环境中作为系统环境的超集使用,并设置了正确的环境变量。
$ ninja -C build devenv
提示的前缀应显示为
[gst-master] bash-prompt $
[gst-master] bash-prompt $ env | grep GST_
在这个环境中,您现在可以使用GStreamer的强大功能,甚至可以在其中实现新功能,而不必担心使用过时的版本。
从这个shell中,您还可以在不退出环境的情况下进行编译,除非需要配置步骤。此功能非常方便测试分支或修复错误。进入subprojects文件夹直接修改代码然后调用ninja -C ../../build。
[gst-master] bash-prompt $ gst-inspect-1.0
让我们在gst-plugins-base中添加一行日志
在本教程中,我将解释如何在videotestsrc元素中添加日志行,gst-plugins-base的插件,使用 gst-build重建并测试新日志现在是否显示。
编辑文件
vim subprojects/gst-plugins-base/gst/videotestsrc/gstvideotestsrc.c
转到方法gst_video_test_src_start并添加以下行:
GST_ERROR_OBJECT (src, ""Starting to debug videotestsrc, is there an error ?");
这将添加一个错误级别的运行时日志。有关GStreamer中调试工具的更多信息,请访问以下页面。
然后关闭编辑器。
使用gst-build构建
$ ninja -C build
您应该看到仅重建了文件gstvideotestsrc.c。
测试更改
为了启用日志,您必须导出环境变量GST_DEBUG。
让我们开始播放并在终端中显示结果。以下命令将显示类别为ERROR(1) 的videotestsrc中的所有日志。
GST_DEBUG=videotestsrc:1 gst-launch-1.0 videotestsrc num-buffers=1 ! fakevideosink
你应该有这个输出:
Setting pipeline to PAUSED ...
0:00:00.225273663 21743 0x565528ab7100 ERROR videotestsrc gstvideotestsrc.c:1216:gst_video_test_src_start: Starting to debug videotestsrc, is there an error ?
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 0:00:00.033464391
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ..
更新gst-build
此命令将更新所有存储库并重新发布构建。
$ ninja -C build_dir update
添加新存储库
最好在devenv env之外。如果您想添加一个新的存储库并在此环境中工作。非常简单方便的方法,你必须:
$ cd subprojects
$ git clone my_subproject
$ cd ../build
$ rm -rf * && meson .. -Dcustom_subprojects=my_subproject
然后你可以进入你的子项目,编辑,改变,删除甚至凝视它的美。
$ ninja -C ../../build
$ ninja -C ../../build devenv
后话
瞧,你完成了!请继续关注我的下一篇博文,我们将在其中了解如何使用gst-build交叉编译GStreamer以在嵌入式平台上运行它。 和往常一样,如果您想了解更多关于meson、gst-build或GStreamer的任何其他部分的信息,请联系我们!
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
一、前言 最近由于工作需要,需要用到kettle工具进行数据迁移转换。特意找资料学习了一下,kettle基本操作算是学会了。 所学的也结合实际工作进行了验证。为了防止以后用到忘记了,便写了几篇文章记录一下。 二 、ETL简介 ETL ( Extract-Tra…