GStreamer编译安装——使用Meson从源代码编译

使用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 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子模块。

设置与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是顶级构建定义,它将递归地 配置所有依赖项。它还定义了一些帮助命令,允许您 拥有开发环境或轻松更新git GStreamer模块的存储库。
  2. subprojects/是包含GStreamer模块和 选择的依赖项。

Meson和ninja 的基本用法

配置一个模块(或在gst-build中一次配置多个模块)通过执行:

meson setup <build_directory>

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

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

meson 配置完成后,您可以:

  1. 进入指定的构建目录并运行ninja。

    cd <build_directory>
    ninja
    
  2. 或者不是每次都切换到构建目录 执行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在哪里可以找到插件或库。

最重要的选项是:

  • 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-在介子中设置构建版本。
    • GST_ENV-确保介子或忍者都不会从内部逃跑 gst-env。可用于识别环境是否处于活动状态。
  • 验证(测试运行者)相关变量
    • GST_VALIDATE_SCENARIOS_PATH-搜索验证的路径列表 场景文件(管道要执行的操作列表)。默认情况下 gst-env将使用在 prefix/share/gstreamer-1.0/validate/scenarios目录中的父 目录的gst-env.py
    • 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.0gst-launch-1.0,…)。

选项gst-env 

  • builddir 

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

    • 默认使用gst-env.py的父文件夹。 此选项用于获取存储库的当前分支,以获取 用于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 devenv从介子构建目录(例如build)中 项目根
使用GStreamer作为另一个项目的子项目

这个案例与之前非常相似,唯一重要的偏差是 文件系统结构很重要。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-buildrs选项),你会做:

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-launchergst验证运行测试。

gst-validate-launcher check.gst*

进一步探索

更多详细信息可在GStreamer单存储库自述文件中找到 或(对于较旧的1.16/1.18分支)在gst-build留档中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用adb通过wifi连接手机

1&#xff0c;手机打开开发者模式&#xff0c;打开无线调试 2&#xff0c;命令行使用adb命令配对&#xff1a; adb pair 192.168.0.102:40731 输入验证码&#xff1a;422859 3&#xff0c;连接设备&#xff1a; adb connect 192.168.0.102:36995 4&#xff0c;查看连接状态:…

海思Ascend精度分析详细操作指南

1.简介 海思平台在转模型量化时经常需要精度分析,可以参考官方文档《精度比对工具使用指南.pdf》,但是里面的一些细节描述还是不清楚,因此本文详细描述了精度分析对比的操作指南,方便新手入门。 2.对原始未量化的onnx模型进行dump 说明:原始模型为caffe的dump方法参考之…

C++Qt做一个鼠标在按钮上悬浮3s显示一个悬浮窗口

当你想要在 Qt 中创建一个自定义按钮并添加悬浮窗口的功能时&#xff0c;你可以通过继承 QPushButton 类来实现。下面是一个示例代码&#xff0c;演示了如何创建一个自定义按钮类 HoverButton&#xff0c;并在鼠标悬浮在按钮上 3 秒后显示一个悬浮窗口&#xff0c;窗口包含图片…

GIGE 协议摘录 —— 照相机的标准特征列表(五)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现&#xff08;一&#xff09; GIGE 协议摘录 —— GVCP 协议&#xff08;二&#xff09; GIGE 协议摘录 —— GVSP 协议&#xff08;三&#xff09; GIGE 协议摘录 —— 引导寄存器&#xff08;四&#xff09; GIGE 协议…

11.1 Go 标准库的组成

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Unity EasyRoads3D插件使用

一、插件介绍 描述 Unity 中的道路基础设施和参数化建模 在 Unity 中使用内置的可自定义动态交叉预制件和基于您自己导入的模型的自定义交叉预制件&#xff0c;直接创建独特的道路网络。 添加额外辅助对象&#xff0c;让你的场景栩栩如生&#xff1a;桥梁、安全护栏、栅栏、墙壁…

meilisearch,老版本的文档

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

深入理解Vue3.js响应式系统设计之栈结构和循环问题

如果您觉得这篇文章有帮助的话&#xff01;给个点赞和评论支持下吧&#xff0c;感谢~ 作者&#xff1a;前端小王hs 阿里云社区博客专家/清华大学出版社签约作者/CSDN百万访问前端博主/B站千粉前端up主 此篇文章是博主于2022年学习《Vue.js设计与实现》时的笔记整理而来 书籍&a…

黄金投资软件选择标准:多角度全面考量指南

随着金融科技的迅猛发展&#xff0c;越来越多的投资者倾向于通过线上平台进行黄金投资。然而&#xff0c;面对市场上琳琅满目的黄金投资软件&#xff0c;如何选择一款既安全可靠又功能齐全的软件&#xff0c;成为了投资者们普遍关注的问题。 黄金投资软件的选择不仅直接影响到…

Excel自定义排序和求和

概览 excel作为办公的常备工具&#xff0c;好记性不如烂笔头&#xff0c;在此梳理记录下&#xff0c;此篇文章主要是记录excel的自定义排序和求和 一. 自定义排序 举个例子 1. 填充自定义排序选项 实现步骤&#xff1a; 选定目标排序值&#xff1b;文件->选项->自定…

CSS Display(显示)

CSS Display(显示) 概述 CSS&#xff08;层叠样式表&#xff09;中的display属性是控制元素如何显示的关键属性。它决定了元素的盒模型类型&#xff0c;即元素是块级元素、内联元素还是其他类型的元素。display属性对于网页布局和元素样式的控制至关重要。 基本用法 块级元…

取模软件测试版生成的有斜线,但测试字库的功能是好用无限制。只需要自己开发一个字库生成软件。IDA工具,如何搜中文

IDA工具&#xff0c;如何搜中文 在 IDA (Interactive Disassembler) 中搜索中文字符串&#xff0c;可以按照以下步骤操作&#xff1a; 方法一&#xff1a;使用“搜索文本”功能 打开 IDA 并加载目标文件&#xff1a;启动 IDA 并打开你需要分析的二进制文件。打开搜索文本对话…

Allegro光绘Gerber文件、IPC网表、坐标文件、装配PDF文件导出打包

Allegro光绘Gerber文件、IPC网表、坐标文件、装配PDF文件导出打包 一、Gerber文件层叠与参数设置二、装配图文件设置导出三、光绘参数设置四、Gerber孔符图、钻孔表及钻孔文件输出五、输出Gerber文件六、输出IPC网表七、导出坐标文件八、文件打包 一、Gerber文件层叠与参数设置…

WHAT - NodeJS 基本使用

目录 hello worldhttphttp requestaxios 版本 events: EventEmittererror catchconsoleNODE_ENVbufferfilefile openfile pathfile read and write streamos hello world const http require(http); const hostname 127.0.0.1; const port 3000; const server http.create…

沙普利值是什么,和沙普利值相结合的更好办法

目录 沙普利值是什么,应用场景有什么,举例说明 在云计算资源分配中举例 场景设定 用户需求和资源使用情况 沙普利值在资源分配中的应用(按需定价,) 归纳 和沙普利值相结合的更好办法 AHP法(层次分析法) ANP法(网络层次分析法) 模糊数学 沙普利值计算举例 沙…

一文讲清:生产报工系统的功能、报价以及如何选择

最近这几年&#xff0c;企业越来越注重生产的速度和成本&#xff0c;尤其是“性价比”&#xff0c;生产报工系统已经变成了制造业里不可或缺的一部分。不过&#xff0c;市场上生产报工系统的选择太多&#xff0c;价格也都不一样&#xff0c;这就给很多企业出了个难题&#xff1…

【笔记】【Git】多个dev分支合并到master分支的文件冲突

问题描述 多个dev分支在同步开发&#xff0c;同时发起代码评审&#xff0c;但合入master的时候存在先后顺序&#xff0c;那么后面同文件的操作则会提示“合并有文件冲突”&#xff0c;导致代码无法入库&#xff0c;只能重新提交。 在个人分支中如何解决与master分支差异&#…

最短路问题详解

一、引言 最短路问题&#xff08;Shortest Path Problem&#xff09;是计算机科学和运筹学中的一类重要问题。它通常用于解决网络中两个节点之间的最短距离或最低成本路径问题。这类问题在交通规划、通信网络、地图导航等领域有着广泛的应用。本文将详细介绍最短路问题的基本概…

指针的深入理解(3)(包括数组名的理解、一维数组传参的本质以及指针数组的相关知识及使用)

文章目录 1 数组名的理解2 使用指针访问数组3 一维数组传参的本质4 指针数组5 指针数组的使用 1 数组名的理解 当我们运行以下代码&#xff1a; #include <stdio.h> int main() {int arr[10] { 0 };printf("%p\n", &arr[0]);printf("%p\n", a…

护网设备的使用

设备概念 IPS IPS代表入侵防御系统&#xff08;Intrusion Prevention System&#xff09;&#xff0c;它不仅可以检测入侵行为&#xff0c;还可以主动采取措施进行防御。 IDS IDS代表入侵检测系统&#xff08;Intrusion Detection System&#xff09;&#xff0c;它通过监视网…