【Gstreamer】Installing GStreamer--Installing on Linux / Building from source using Meson

Subpages:

Installing for Android development
Installing for iOS development
Installing on Mac OS X
Installing on Windows
Installing on Linux
Building from source using Cerbero – Setting up a development environment the modern way
Building from source using Meson – Setting up a development environment the modern way

Installing on Linux

先决条件

GStreamer 包含在所有 Linux 发行版中。我们建议使用快速移动发行版的最新版本,例如 Fedora、Ubuntu(非 LTS)、Debian sid 或 OpenSuse,以获取最新的 GStreamer 版本。

本节中给出的所有命令均应从终端输入。

警告确保您具有安装 GStreamer 的超级用户(root)访问权限。

在 Fedora 上安装 GStreamer

运行以下命令:

dnf install gstreamer1-devel gstreamer1-plugins-base-tools gstreamer1-doc gstreamer1-plugins-base-devel gstreamer1-plugins-good gstreamer1-plugins-good-extras gstreamer1-plugins-ugly gstreamer1-plugins-bad-free gstreamer1-plugins-bad-free-devel gstreamer1-plugins-bad-free-extras

在 Ubuntu 或 Debian 上安装 GStreamer

运行以下命令:

apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

使用 GStreamer 构建应用程序

唯一需要的其他“开发环境”是 gcc 编译器和文本编辑器。为了编译需要 GStreamer 并使用 GStreamer 核心库的代码,请记住将此字符串添加到 gcc 命令中:

pkg-config --cflags --libs gstreamer-1.0

如果您正在使用其他 GStreamer 库(例如视频库),则必须在上面的字符串中的 gstreamer-1.0 后添加其他包(例如,视频库的 gstreamer-video-1.0)。

如果您的应用程序是在 libtool 的帮助下构建的,例如,当使用 automake/autoconf 作为构建系统时,您必须从 gst-sdk-shell 环境内部运行 configure 脚本。

获取教程的源代码

可以将教程的源代码从教程页面复制并粘贴到文本文件中,但为了方便起见,它也可以在 subprojects/gst-docs/examples/tutorials 子目录中的 GIT 存储库中找到。在分支中找到自己想要的版本。

可以用以下方法克隆 GIT 存储库:库里面包含了很对代码,其中就有源代码教程,推荐直接下载存储库,里面是全的。

git clone https://gitlab.freedesktop.org/gstreamer/gstreamer

Building the tutorials构建教程

进入gstreamer-main/subprojects/gst-docs/examples/tutorials执行这个文件,只是一个C代码,是关于播放的教程

gcc basic-tutorial-1.c -o basic-tutorial-1 `pkg-config --cflags --libs gstreamer-1.0`

使用您感兴趣的教程的文件名(本例中为 basic-education-1)。
根据您需要使用的 GStreamer 库,除了 gstreamer-1.0 之外,您还必须向 pkg-config 命令添加更多包。在每个教程源代码的底部,您将找到该特定教程的命令,包括所需的库,按所需的顺序排列。在开发自己的应用程序时,GStreamer 文档将告诉您某个函数属于哪个库。

运行教程

要运行这些教程,只需执行所需的教程:

./basic-tutorial-1

这个文件已经是编译完了的,其中包括了头文件和各种已经已经连接好了的库。
实际上执行的是这个文件
请添加图片描述

也可以把上面的文件复制一份到别的文件夹,进行修改之后编译,再执行。

Building from source using Meson

如果您只想使用 GStreamer,请访问下载页面述。我们为 Windows、macOS、Android 和 iOS 提供预构建的二进制文件。

对于想要处理 GStreamer 代码本身和/或修改它的开发人员,或希望快速尝试尚未在 GStreamer 发布版本中的功能的应用程序开发人员,这是推荐的设置。

注意:这仅适用于在 Linux、Windows 和 macOS 上进行 GStreamer 开发。如果您:

  1. 想要为 Android、iOS 或 UWP 进行 GStreamer 开发,或者
  2. 必须构建 GStreamer 软件包以进行分发或部署,或者
  3. 需要具有外部依赖项但没有 Meson 端口的插件

请参阅使用 Cerbero 构建,它可用于构建特定的 GStreamer 版本或构建未发布的 GStreamer 代码。

什么是 Meson、gst-build 和 GStreamer monorepo?

Meson 构建系统是一种可移植的构建系统,它速度快,并且比其他替代方案更方便用户使用。它生成构建指令,然后可以由 ninja 执行。GStreamer 项目将其用于所有子项目。

2021 年 9 月,所有主要 GStreamer 模块都合并到一个代码存储库中,即GStreamer mono repo ,它位于主 GStreamer git 存储库中,如今,GStreamer 1.19/1.20 及更高版本的所有 GStreamer 开发都在这里进行。

在 mono 存储库合并之前,不同的 GStreamer 模块位于单独的 git 存储库中,并且有一个名为 gst-build 的单独元构建器项目来下载和构建所有子项目。如果您想针对较旧的稳定分支(例如 GStreamer 1.16 或 1.18)进行构建或开发,则应该使用它。

如果您想要针对即将推出的开发或稳定分支进行构建或开发,则应使用包含 mono 存储库的 GStreamer 模块的主分支。

在以下部分中,我们将仅讨论 GStreamer mono 存储库,但 gst-build 的工作方式几乎相同,唯一的区别是它还会下载各种 GStreamer 子模块。

使用 Meson 设置构建

为了构建当前的 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

存储库布局

存储库包含一些值得注意的脚本和目录:

  1. meson.build 是顶级构建定义(top-level build definition),它将以递归方式配置所有依赖项。它还定义了一些辅助命令,允许您拥有开发环境或轻松更新 GStreamer 模块的 git 存储库。
  2. subprojects/ 是包含 GStreamer 模块和一系列依赖项的目录。

基本 meson 和 ninja 用法

配置模块(或在 gst-build 中一次配置多个模块)通过执行以下命令完成:

meson setup <build_directory>

build_directory 是所有构建指令和输出所在的位置(这也称为“目录外”构建)。如果未创建目录,则此时将创建目录。请注意,旧版本的 meson 可以在没有任何命令参数的情况下运行,现在已弃用此功能。

关于 build_directory 的位置只有一个限制:它不能与源目录相同(即您克隆模块的位置)。但它可以在该目录之外或该目录之下/之内。

一旦 meson 完成配置,您可以:

  1. 进入指定的构建目录并运行ninja。
cd <build_directory>
ninja
  1. 或者,每次执行 ninja 命令时,您无需切换到构建目录,只需将构建目录指定为参数即可。此选项的优点是您可以从任何地方运行它(而不必切换到 ninja 目录)
ninja -C </path/to/build_directory>

这将从该模块构建所有内容(如果构建 gst-build 或 mono 存储库,则构建子项目)。

注意:修改源文件时无需重新运行 meson,只需重新运行 ninja。如果构建/配置文件发生更改,ninja 会自行确定需要重新运行 meson 并自动执行此操作。

进入开发环境

GStreamer 由多个工具、插件和组件组成。为了便于开发和测试,有一个目标(由 gst-buildmono 存储库提供,将来由 meson 本身直接提供)将相应地设置环境变量,以便您可以直接使用所有构建结果。

对于熟悉 python 和 virtualenv 的人来说,您会感到宾至如归。
该脚本名为 gst-env.py,位于 GStreamer mono 存储库的根目录中。

进入虚拟环境的另一种方法是执行 ninja -C <path/to/build_directory> devenv。此选项的选项较少,因此与某些工作流程不兼容。

注意:您无法在虚拟环境中使用 meson 或使用 ninja 重新配置,因此请在进入环境之前进行构建或从另一个终端/终端选项卡进行构建。

它是如何工作的?

使用一组特定的环境变量启动一个新的 shell 会话,这些环境变量告诉 GStreamer 在哪里可以找到插件或库。

最重要的选项是:

Shell 上下文相关变量

  • PATH - 用于搜索可执行文件的系统路径,gst-env 将附加包含构建目录中的可执行文件的文件夹
  • GST_PLUGIN_PATH - 搜索插件 (.so/.dll 文件) 的路径列表,gst-env 将添加在 GstPluginsPath.json 文件和其他几个位置中找到的所有插件。
  • GST_PLUGIN_SYSTEM_PATH - 设置后,GStreamer 将检查系统范围路径中的插件,gst-env 故意将其保留为空白,以避免使用安装在环境之外的插件。
  • GST_REGISTRY - 使用自定义文件作为插件缓存/注册表。gst-env 使用在给定构建目录中找到的文件。

Meson(构建环境)相关变量

  • GST_VERSION - 在 meson 中设置构建版本。
  • GST_ENV - 确保 mesonninja 均未在 gst-env中运行。可用于识别环境是否处于活动状态。

验证(测试运行器)相关变量

  • GST_VALIDATE_SCENARIOS_PATH - 搜索验证场景文件的路径列表(管道要执行的操作列表)。默认情况下,gst-env将使用在 gst-env.py 父目录中的 prefix/share/gstreamer-1.0/validate/scenarios 目录中找到的所有场景
  • GST_VALIDATE_PLUGIN_PATH - 搜索要添加到插件注册表的插件文件的路径列表。默认搜索路径位于 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

默认情况下,脚本将尝试在 gst-env.py 所在的同一文件夹中的 buildbuilddir 目录中查找构建目录。此选项允许指定不同的位置。当您有多个不同的构建但不想在文件夹之间跳转时,这可能会很有用。
srcdir

默认情况下使用 gst-env.py 的父文件夹。此选项用于获取存储库的当前分支,获取 GstValidate 插件和 gdb
sysroot

如果项目是在另一台机器上交叉编译并通过网络文件系统/ssh 文件系统/等安装的,则很有用。通过删除与 sysroot 匹配的路径的前部来调整路径(例如在 GST_PLUGIN_PATH 中找到的路径)。
例如,如果您的 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

使用特定的 wine 命令扩展 GST_VERSION 环境变量
winepath

wine 环境向 WINEPATH 变量添加其他元素。
only-environment

不要打开新的 shell 环境,而是打印将要使用的环境变量。

用例

在保留分发包的同时设置开发环境
这种情况非常简单,您只需执行以下操作之一:

  • ./gst-env.py 来自项目根目录
  • ninja -C build devenv(build 是生成的 meson 构建目录)
  • meson devenv 来自项目根目录中的 meson 构建目录(例如 build)

将 GStreamer 用作另一个项目的子项目
这种情况与上一个非常相似,唯一重要的不同是文件系统结构很重要。gst-env 将在 meson 构建目录(例如 build)或 build/subprojects/gstreamer 中查找 GstPluginPaths.json 文件。

与网络共享结合进行交叉编译
对于交叉编译,一般查看 meson 文档或 gst-build-sdk 等项目。

基本思路是在交叉编译主机上准备一个 rootfs,与目标机器的 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

配置

您可以使用 configure 命令列出 meson 项目的所有可用选项:

meson configure

如果您有一个已配置的构建目录,则可以提供该目录,并且您还将获得该构建的配置值:

meson configure <build-directory>

该命令将列出每个选项:

  • 选项的名称
  • 选项的默认(或配置)值
  • 可能的值
  • 该选项的描述
    带有 auto 的值意味着 meson 将在配置时确定正确的值(例如,如果您有可用的开发包来构建某个插件)。
    您还将看到带有 <inherited from main project>的值。这主要用于通用选项。例如,doc 选项存在于顶层,也存在于每个子模块中(例如:gstreamer:doc)。通常,您只需设置该选项的值一次,所有子模块都将从该选项继承。
    然后,您可以在使用 -D<option_name>=<option_value> 配置构建时将这些选项提供给 meson。例如,如果不想在 gst-build(rs 选项)中构建 rust 插件,您可以执行以下操作:
meson -Drs=disabled <build-directory>

您还可以查看 meson_options.txt 文件和 subproject/xyz/meson_options.txt 文件,其中列出了各种项目特定的构建选项。但是,这些选项并不包括所有标准 Meson 选项。

运行测试

运行单元测试是通过从构建目录调用 meson testmeson test -C <path/to/build_directory> 来完成的。如果出现任何故障,您可以查看最后指定的文件,或者您可以运行 meson test --print-errorlogs,它将在执行后显示失败测试的日志。

您也可以通过指定名称来执行测试的子集。例如 meson test gst_gstpad。完整的测试列表可通过 meson test --list 获得。

如果构建了 gst-devtools 子模块,您还可以使用 gst-validate-launcher gst-validate 来运行测试。

gst-validate-launcher check.gst*

进一步了解

更多详细信息请参阅 GStreamer mono repo README 或(针对旧版本 1.16/1.18 分支)gst-build 文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eternal-Student

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值