使用Cerbero从源代码构建
如果您只想使用GStreamer,请访问下载页面。 我们为Windows、macOS、Android和iOS提供预构建的二进制文件。
Cerbero是开源项目的跨平台构建聚合器,为不同的平台、架构和发行版构建和创建本机包。它支持本机编译和交叉编译,可以在macOS、Linux和Windows上运行。
如果您:
- 想为Android、iOS或UWP做GStreamer开发,或者
- 必须构建GStreamer包以进行分发或部署,或
- 需要没有Meson端口的具有外部依赖项的插件
但是,如果您是想要处理GStreamer代码本身的开发人员 在Linux、Windows或macOS上,使用gst-build要方便得多。 请参阅使用介子构建。
最低要求
Cerbero为所有平台提供无融资创业设施,但它仍然需要一个最低基础来引导。
Linux设置
在Linux,您只需要一个python>=3.6的发行版。Cerbero将 使用您的包管理器安装所有其他必需的包 引导程序。
macOS设置
在macOS上,您需要安装以下软件:
- XCode
- Python 3.6+https://www.python.org/downloads/
Cerbero将在引导期间构建所有其他所需的包。
Windows安装程序
由于所需的包,Windows上的初始设置有点长 必须手动安装。您需要安装的详细步骤是 在页面的底部。
下载来源
要使用Cerbero构建GStreamer,您首先需要下载Cerbero:
$ git clone https://gitlab.freedesktop.org/gstreamer/cerbero
这将构建最新的未发布GStreamer代码。
尽管存在setup.py
,但此工具不需要安装。它是 通过cerbero-uninstalled
脚本调用,该脚本应该被调用为 ./cerbero-uninstalled
,或者你可以创建一个别名到它在你的.bashrc
文件。
您可以通过签出该标签来构建特定版本,例如git checkout 1.18.4
。构建发布标签将导致Cerbero使用该版本 获取gstream er食谱时,tarball而不是git存储库 建筑。
您还可以构建最新的未发布的"稳定分支"代码,例如 1.18你会做:git checkout 1.18
,或git clone -b 1.18 [...]
,这将 在构建gstream er配方时获取相应的稳定分支。
您还可以使用git工作树,这在构建时可能更方便 几个不同版本的gstream er,因为构建工件总是去 进入git存储库内的build
目录。
引导到设置环境
在第一次使用cerbero之前,您需要运行bootstrap命令。此命令使用包管理器(如果可用)安装构建系统中缺失的部分,并在为Windows/MinGW或Android构建时下载必要的工具链。
请注意,这需要一段时间(在Windows上需要几个小时甚至更长时间)。
$ ./cerbero-uninstalled bootstrap
在Linux和macOS上,这将使用sudo
对系统进行更改。
然后引导过程将安装或构建构建GStreamer所需的所有软件包。
构建GStreamer
要生成GStreamer二进制文件,请使用以下命令:
$ ./cerbero-uninstalled package gstreamer-1.0
这将获取和构建所有必需的GStreamer组件并为您的发行版创建包,然后将它们放在Cerbero源目录中。
可以使用以下命令检索要构建的支持包列表:
$ ./cerbero-uninstalled list-packages
包由0个(如果是元包)或更多组件组成,如果需要,可以单独构建。这些组件定义为单独的配方,可以列出:
$ ./cerbero-uninstalled list
要构建单个配方及其依赖项,请执行以下操作:
$ ./cerbero-uninstalled build <recipe_name>
或者在不构建其依赖项的情况下构建或强制重建配方,请使用:
$ ./cerbero-uninstalled buildone <recipe_name>
要擦拭一切并从头开始:
$ ./cerbero-uninstalled wipe
构建完成后,所有配方构建的二进制文件将安装在内部 Cerbero源代码树中build
目录中的自动检测前缀。
交叉编译
如果您使用Cerbero交叉编译到iOS、Android、Cross-MinGW或UWP,则必须选择适当的配置文件并将其传递给所有步骤:引导、构建、打包等。
例如,如果你在Linux,你想为Android Universal构建,你必须运行:
# Bootstrap for Android Universal on Linux
$ ./cerbero-uninstalled -c config/cross-android-universal.cbc bootstrap
# Build everything and package for Android Universal
$ ./cerbero-uninstalled -c config/cross-android-universal.cbc package gstreamer-1.0
以下是每台目标机器的配置文件列表:
Linux目标
目标 | 配置文件 |
---|---|
MinGW 32位 | cross-win32.cbc |
MinGW 64位 | cross-win64.cbc |
安卓通用 | cross-android-universal.cbc |
安卓ARM64 | cross-android-arm64.cbc |
安卓ARMv7 | cross-android-armv7.cbc |
安卓x86 | cross-android-x86.cbc |
安卓x86_64 | cross-android-x86-64.cbc |
macOS目标
目标 | 配置文件 |
---|---|
macOS系统框架 | osx-x86-64.cbc |
iOS通用 | cross-ios-universal.cbc |
iOSARM64 | cross-ios-arm64.cbc |
iOSARMv7 | cross-ios-armv7.cbc |
iOSx86 | cross-ios-x86.cbc |
iOS | cross-ios-x86-64.cbc |
Windows目标
在Windows上,配置文件用于选择架构,变体用于选择工具链(MinGW、MSVC、UWP):
目标 | 配置文件 | 变体 |
---|---|---|
MinGW x86 | win32.cbc |
|
MinGWx86_64 | win64.cbc |
|
MSVC x86 | win32.cbc |
视觉工作室 |
MSVCx86_64 | win64.cbc |
视觉工作室 |
UWP x86 | win32.cbc |
uwp |
UWPx86_64 | win64.cbc |
uwp |
UWP ARM64 | cross-win-arm64.cbc |
uwp |
UWP Universal | cross-uwp-universal.cbc |
(隐式uwp) |
示例用法:
# Target MinGW 32-bit
$ ./cerbero-uninstalled -c config/win32.cbc package gstreamer-1.0
# Target MSVC 64-bit
$ ./cerbero-uninstalled -c config/win64.cbc -v visualstudio package gstreamer-1.0
# Target UWP, x86_64
$ ./cerbero-uninstalled -c config/win64.cbc -v uwp package gstreamer-1.0
# Target UWP, Cross ARM64
$ ./cerbero-uninstalled -c config/cross-win-arm64.cbc -v uwp package gstreamer-1.0
# Target UWP, All Supported Arches
$ ./cerbero-uninstalled -c config/cross-uwp-universal.cbc package gstreamer-1.0
CI设置的提示
Cerbero可以将其引导和打包命令拆分为对CI设置有用的阶段。例如,您可能想要进行任何系统设置(例如安装包),并在构建CI映像时获取所有源以缓存它们:
$ ./cerbero-uninstalled fetch-bootstrap
$ ./cerbero-uninstalled fetch-package gstreamer-1.0
# This will use "sudo"
$ ./cerbero-uninstalled bootstrap --system=yes --toolchains=no --build-tools=no --offline
然后在您的CI作业中,您将不需要root来执行其余步骤:
$ ./cerbero-uninstalled bootstrap --system=no --toolchains=yes --build-tools=yes --offline
# When building a non-tagged commit, this will update the git repos for all gstreamer recipes
$ ./cerbero-uninstalled fetch-package gstreamer-1.0
$ ./cerbero-uninstalled package gstreamer-1.0 --offline
有关更多灵感,请参阅GStreamer的GitLab CI设置。
使用变体启用可选功能
Cerbero通过variants
控制可选和特定于平台的功能。你 可以通过运行以下命令查看可用变体的完整列表:
$ ./cerbero-uninstalled --list-variants
一些变体默认启用,而另一些则不启用。您可以通过执行以下操作之一来启用特定变体:
-
使用
-v
参数调用cerbero-uninstalled
,例如:$ ./cerbero-uninstalled -v variantname [-c ...] package gstreamer-1.0
-
或者,编辑
~/.cerbero/cerbero.cbc
并添加variants = ['variantname']
在 底部。如果文件不存在,请创建它。
多个变体可以用逗号分隔,也可以用多个-v
参数,例如以下是等效的:
$ ./cerbero-uninstalled -v variantname1,variantname2 [-c ...] package gstreamer-1.0
$ ./cerbero-uninstalled -v variantname1 -v variantname2 [-c ...] package gstreamer-1.0
要显式禁用变体,请改用novariantname
。
在同一变体多次启用/禁用的情况下,命令行上的最后一个条件将生效。例如,如果noVariantname是最后一个,则禁用Variantname。
启用Qt5支持
从版本1.15.2开始,Cerbero内置了对构建Qt5的支持 QML GStreamer插件。您可以通过 启用qt5变体。
您还必须告诉Cerbero您的Qt5安装前缀在哪里。你可以做到的 通过设置QMAKE
环境变量指向qmake
,您 要使用,f. ex./path/to/Qt5.12.0/5.12.0/ios/bin/qmake
当构建Android通用与Qt<5.14,而不是QMAKE
,你 必须 设置指向目录的QT5_PREFIX
环境变量 在包含所有android目标的前缀f. ex中。 /path/to/Qt5.12.0/5.12.0
。
接下来,运行package
:
$ export QMAKE='/path/to/Qt5.12.0/5.12.0/<target>/bin/qmake'
$ ./cerbero-uninstalled -v qt5 [-c ...] package gstreamer-1.0
这将尝试构建Qt5 QML插件,如果找不到Qt5或无法构建插件,则会出错。插件将自动添加到输出的包中。
注意:输出的包将不包含Qt5库的副本。您必须在自己构建应用程序时链接到它们。
启用硬件编解码器支持
从版本1.15.2开始,Cerbero内置了对为英特尔和英伟达构建和打包硬件编解码器的支持。如果启用了适当的变体,插件要么会被构建,要么Cerbero会在不可能的情况下出错。
英特尔硬件编解码器
对于Intel,要启用的变体 是intelmsdk
,它将构建msdk
插件。
您必须设置INTELMEDIASDKROOT
var以指向您的英特尔媒体SDK前缀,或者您必须具有 SDK的pkgconfig前缀在PKG_CONFIG_PATH
在Windows上,INTELMEDIASDKROOT
由安装程序自动设置。在Linux, 如果您需要设置此项,则必须将其设置为指向以下目录 包含mediasdkinclude
和lib64
目录。
对于VA-API,要启用的变体 是vaapi
,它将构建gstream er-vaapi插件 如果可能,启用选项。
Nvidia硬件编解码器
自1.17.1以来,nvcodec
插件不需要访问Nvidia Video SDK 或CUDA SDK。它现在在运行时加载所有内容。因此,它现在已启用 默认情况下在所有平台上。
启用Visual Studio支持
从版本1.15.2开始,Cerbero支持构建所有GStreamer配方, 所有强制依赖项(如glib、libffi、zlib等),以及一些外部的 与Visual Studio的依赖关系。您必须通过启用 的visualstudio变体:
$ python ./cerbero-uninstalled -v visualstudio package gstreamer-1.0
如果您已经有Cerbero版本,强烈建议运行wipe
切换到使用Visual Studio构建之前的命令。
一些需要外部依赖的插件将被自动禁用,当 以这种模式运行。
目前,大多数使用Meson(btype = BuildType.MESON
)的配方和那些 将can_msvc
配方属性设置为True
的 工作室。
在Windows上安装最低要求
重要提示: 在Windows上使用cerbero和GCC/MinGW工具链 需要64位操作系统。该工具链仅适用于64位 它可以生成32位或64位二进制文件。
这些步骤是在Windows上使用Cerbero所必需的。
安装Python 3.6或更新版本(32位或64位)
下载Windows可执行安装程序 并运行它。
- 在安装程序的第一页上,选择以下内容:
-
在第二页,默认值很好
-
第三页,您必须选择以下选项:
-
启用或安装. NET3.5.1框架
-
在Windows 10上,从系统设置中的PATH变量中删除Windows应用商店路径条目。否则,Cerbero将尝试使用虚拟的Windows Store版本的Python
为Windows安装Git
下载Git for Windows安装程序并运行它。
-
第一页是许可证
-
下一页是
Select Components
,默认值很好,启用您喜欢的任何其他选项 -
Next
Choosing the default editor used by Git
,选择您喜欢的任何内容 -
Next
Adjusting your PATH environment
,您必须选择如屏幕截图所示
-
Next
Choosing HTTPS transport backend
,默认没问题 -
Next
Configuring the line ending conversions
,您必须选择如屏幕截图所示
-
Next
Configuring the terminal emulator
,默认没问题 -
Next
Configuring extra options
,默认没问题
Git将安装在C:\Program Files\Git
。
安装MSYS/MinGW
下载mingw-get-setup可执行安装程序并运行它。
-
第一页,保持所有选项不变
-
第二页将下载最新的包装目录和基本包装
-
完成后,MinGW安装管理器将打开,在基本设置下选择以下软件包:
然后,单击Installation
菜单并选择Apply Changes
。MSYS将 安装在C:\MinGW
。
重要提示: 安装后,您必须在桌面上创建一个快捷方式 C:\MinGW\msys\1.0\msys.bat
,它将运行MinGW shell。你必须从里面运行Cerbero。
注意 :Cerbero不使用MSYS附带的MinGW编译器工具链。 我们下载自己的定制GCC工具链 <a i=4>引导期间。
注意 :MSYS与MSYS2不同 GStreamer项目不支持在MSYS2中运行Cerbero 环境。东西可能会工作,也可能会坏掉,你可以保留碎片。
安装Visual Studio 2015或更新版本
这是正确生成使用MinGW构建的食谱的导入库所必需的。支持社区构建和专业构建。
安装Visual Studio时必须安装最新的Windows 10 SDK,如下所示。您不需要任何较旧的Windows SDK。
如果要为UWP(又名通用Windows平台)构建,则必须使用VS 2017或更新版本,并且还必须选择通用Windows平台工作负载:
您可以在以下位置找到所有版本的Visual Studio:https://visualstudio.microsoft.com/vs/older-downloads/
安装其他工具
重要的Windows特定注意事项
您应该将cerbero git目录添加到防病毒软件中排除的文件夹列表中,否则当Autotools执行重命名和删除等文件操作时,您将获得随机构建失败。它还会将您的构建速度减慢约3-4倍。
Cerbero必须在明GW shell中运行,可从主菜单访问 或桌面。如果不是,请在桌面上创建一个快捷方式到C:\MinGW\msys\1.0\msys.bat
您的$HOME
路径不能包含空格。如果您的Windows用户名 包含空格,您可以在/home
中创建一个新目录并执行:
如果您使用的是Windows 10,也强烈建议在Windows设置中启用"开发人员模式",如下所示。
$ echo 'export HOME=/home/newdir' > ~/.profile
然后重新启动shell并键入cd
以转到新的主目录。
请注意,在shell内部,/
被映射到C:\Mingw\msys\1.0\
© 2021, Nirbheek Chauha