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 开发。如果您:
- 想要为 Android、iOS 或 UWP 进行 GStreamer 开发,或者
- 必须构建 GStreamer 软件包以进行分发或部署,或者
- 需要具有外部依赖项但没有 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
存储库布局
存储库包含一些值得注意的脚本和目录:
meson.build
是顶级构建定义(top-level build definition),它将以递归方式配置所有依赖项。它还定义了一些辅助命令,允许您拥有开发环境或轻松更新 GStreamer 模块的 git 存储库。subprojects/
是包含 GStreamer 模块和一系列依赖项的目录。
基本 meson 和 ninja 用法
配置模块(或在 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
或 mono
存储库提供,将来由 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 - 确保
meson
或ninja
均未在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
所在的同一文件夹中的 build
或 builddir
目录中查找构建目录。此选项允许指定不同的位置。当您有多个不同的构建但不想在文件夹之间跳转时,这可能会很有用。
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 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-validate 来运行测试。
gst-validate-launcher check.gst*
进一步了解
更多详细信息请参阅 GStreamer mono repo README 或(针对旧版本 1.16/1.18 分支)gst-build 文档。