从零开始成为GStreamer专家——基于Windows的GStreamer从源码下载、编译到开发

在windows上用CMake GUI编译opencv+GStreamer 折腾hailo8边缘计算卡,我的采集卡需要Opencv+GStreamer,我就进行了编译,以下来自于回忆内容,实际可能有偏差。 阅读详情
AI摘要

本文详细介绍了在Windows平台从GitLab下载GStreamer源码、配置Visual Studio 2019及Meson/Ninja构建环境、解决常见编译错误(如_REPARSE_DATA_BUFFER冲突、_alloca未定义、头文件缺失等)、处理第三方依赖(如OpenSSL via Meson WrapDB)、宏展开调试、Hello World示例开发及日志管理方法,覆盖从零构建到基础开发的完整流程。

基于Windows的GStreamer从源码下载、编译到开发

        本文介绍了在GStreamer下载方法, 使用过程中的部分依赖,以及在Windows上编译配置GStreamer 过程,为学习GStreamer 创建条件。

 GStreamer 代码下载

  1. 到Sign up · GitLabfreedesktop.org GitLab loginhttps://gitlab.freedesktop.org/users/sign_up上注册一个用户。
  2. 在PC机上用ssh-keygen -t rsa -C "yourname@yourhost.com"生成id_rsa.pub值,把这个值贴到下面Key框里,如果这一步不会,请搜索参考 ssh-keygen的用法。
  3. git clone git@gitlab.freedesktop.org:gstreamer/gstreamer.git  或 git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.git 下载源码。下载下来的代码是整个工程,目录结构如下:​

相关基础知识

一、glib路径:https://www.linuxfromscratch.org/blfs/view/svn/general/glib2.htmlhttps://www.linuxfromscratch.org/blfs/view/svn/general/glib2.html

二、准备GObject相关知识,代码在glib中

        GObject又称为GLib对象系统,和glibc,libc没有关系,glibc是linux下的GNU C函数库,libc是linux下的ANSI C函数库。面向对像的方法常常用私有来隐藏信息,而用C语言实现的系统中,私有却没有那么简单。一种方法是将私有成员分离到独立的结构体中;另外一种方法是将私有结构体存放到源码文件,对外结构体中仅仅保存一个指针,指向这个结构。

        GObject相关URL:GObject – 2.0https://docs.gtk.org/gobject/

三、下载gst-template:git clone git://anongit.freedesktop.org/gstreamer/gst-template.git 可以利用其中的工具来产生plugin,方法是:../tools/make_element plugin_name

四、第三方依赖库下载
        Gstreamer的功能有时候依赖第三方库,这些库在Gstreamer的subprojects下面没有对应的工程。如果自己下载编译,修改meson.build其实是个挺费时的工程,这个时候,可以到https://mesonbuild.com/Wrapdb-projects.html#meson-wrapdb-packages 这个网站上下载Meson WrapDB packages,然后将对应的.warp文件放到subprojects/目录下即可。如编译openssl就可以下载openssl.wrap。

五、编译三方库过程中,只生成*.dll文件,未生成*.lib的故障解决:故障原因由未导出任何API导致,可以由以下方式解决,如在.c文件中增加一个API,并且export。

#if defined(_WIN32)
__declspec(dllexport) int OPENSSL_generate_lib_func() 
{
    return 1;
}
#endif

        但这种方式治标不治本,编译产生的函数声明等等都没有导出来,导致链接的时候符号查找不到,可以在链接时,加入/DEF:openssl.def选项,

openssl_cflags = ['/DEF:openssl.def',]
libssl_dep = declare_dependency(
  include_directories: include_directories,
  dependencies: dependencies + [libcrypto_dep],
  link_with: libssl_lib,
  link_args:openssl_cflags,
)

官方指导链接:Built-in optionshttps://mesonbuild.com/Builtin-options.htmlopenssl.def是描述需要导出符号的文件:
LIBRARY   crypto
EXPORTS
    a2i_IPADDRESS
    ASN1_ANY_it
    ASN1_item_d2i
    ASN1_item_free
    ASN1_item_i2d
    ASN1_item_new

        详情参见官方指导文档:/DEF (Specify Module-Definition File) | Microsoft Docs

        可以在Gstreamer的顶层meson_options.txt中加入option('openssl', type : 'feature', value : 'auto'),在meson.build的subprojects中加入  ['openssl', { 'option': get_option('openssl'), 'match_gst_version': false}],就可以编译openssl了。

        事实上.def文件要配置全是很难的,这里给出一种方式:

1. 首先,您可以创建静态库。修改meson.build,加入
libcrypto_lib = static_library(
  'crypto',
  dependencies: dependencies,
  sources: libcrypto_sources,
  include_directories: include_directories,
  c_args: c_args,
  install: true,
  link_args:openssl_cflags,
)

libssl_lib = static_library(
  'ssl',
  dependencies: dependencies + [libcrypto_dep],
  sources: libssl_sources,
  include_directories: include_directories,
  c_args: c_args,
  link_args:openssl_cflags,
  install: true,
)
2. 然后使用“dumpbin/linkermember”从静态库中导出所有符号。
    dumpbin /LINKERMEMBER libcrypto.a > libcrypto.txt
    dumpbin /LINKERMEMBER libssl.a > libssl.txt
3. 将所有符号放入.def文件。
4. 使用.def文件创建dll。

Gstreamer libogg中使用.def的方式:
sources = ['bitwise.c', 'framing.c']

libogg = library('ogg',
  sources,
  include_directories : incdir,
  vs_module_defs: '../win32/ogg.def',
  install: true,
)

bw_test = executable('bitwise', 'bitwise.c',
  include_directories : incdir,
  c_args : '-D_V_SELFTEST'
)
framing_test = executable('framing', 'framing.c',
  include_directories : incdir,
  c_args : '-D_V_SELFTEST'
)

test('bitwise', bw_test)
test('framing', framing_test)

Windows下VS2022+GStreamer+OpenCV实时RTSP流处理:从零搭建高效视频分析管道 本文详细指导在Windows平台下,使用Visual Studio 2022集成GStreamer与OpenCV,从零构建高性能实时RTSP视频流分析管道。内容涵盖环境配置、核心架构设计、多线程优化及硬件解码实战,旨在解决高分辨率流处理中的卡顿与延迟问题,为工业检测与智能分析应用提供稳定高效的开发方案。 阅读详情

相关推荐

Gstreamer 应用开发:1-基础介绍

介绍开始围绕如何用命令实现一个音视频混合,或者单独的音频,和单独的视频文件如何实现播放,并逐步开始使用C语言程序来实现之前我们用命令行来实现的功能

cau_weiyuhu的博客 4653

【gstreamer】入门介绍

gstreamer 概念介绍

ZSZ_shsf的博客 2385

【音视频处理】基础框架介绍,FFmpeg、GStreamer、OpenCV、OpenGL

音视频处理基础框架介绍,FFmpeg、GStreamer、OpenCV、OpenGL应用范围。

池鱼 - YiiGaa 5753

GStreamer编译

安装依赖库获取源码(Git 或稳定版)使用。

深之JohnChen的专栏 1085

UE5.3.2 + VS2022社区版在Win11上的C++编译环境配置全解

Unreal Engine 5的C++开发依赖严格的工具链协同,其核心在于Visual Studio编译器版本、Windows SDK与引擎构建系统(UBT)的精准匹配。UE5.3.2强制要求MSVC v143.4(即VS2022 17.4+)及Windows 11 SDK 10.0.22621.0,任何偏差都会引发LNK2019链接失败、C1083头文件缺失或MSB8066构建中断等典型错误。该配置不仅关乎安装顺序,更涉及注册表清理、PATH环境变量、SDK路径注入与运行时DLL加载等底层机制。适用于Wi

weixin_33978722的博客 367

多目标进化算法——NSGA-II(python实现)

NSGA-II(python实现)--最全注释,痴呆能懂--

no___good的博客 5281

为什么BGA焊点总在四个角先坏?一次热-振耦合仿真给你讲明白

本文通过Ansys Workbench进行热-振耦合仿真,深入分析了BGA焊点在四个角点先失效的机理。研究发现,角点焊点由于CTE失配、振动载荷放大及几何应力集中等因素,承受的等效塑性应变和动态应力显著高于中心区域,导致其疲劳寿命大幅降低。仿真数据揭示了角点焊点的应力分布和蠕变特性,为电子封装可靠性设计提供了重要依据。

weixin_42535461的博客 439

开源libmodbus编译为32位和64位动态库

libmodbus 是支持Linux,Mac OS X,window 的一个开源库,支持modbus TCP和RTU 两种模式。

lemontree1945的博客 1923

vue2 - elementUI表格table树形结构复选框勾选父子联动示例,el-table树状表格tree复选框checkbox多选框全选/反选取消children(当子级全选中,父级自动勾选)

vue2,elementui,el-table树状表格多选,树形结构结合多选框使用,实现单选父子联动全选反选,勾选联动父级勾选,表格多选check父子联动,table表格children如何嵌入复选框,el-table使用多选框与树形数据写一个有半选全选功能的表格,el-table树形表格实现复选框多选效果,表格树状结构多选,每一个row都可以选中并且联动全选按钮,table选父带子选子带父,树形数据与懒加载,Table表格树形结构多选框选中父级时会选中子级,elementUI表格里树形结构嵌套复选框全选全

✅ 精选推荐文章 1万+

SAP RAP 校验全流程:从 EML 读取到消息上屏与阻止落库

本文系统梳理了 SAP ABAP RAP 中的校验流程(The Validation Process),结合 Airline/Connection 案例,详细讲解了三类核心校验:语义键唯一性、外键有效性和字段间一致性。文章覆盖了 EML 的 READ ENTITIES 操作、reported-* 与 failed-* 结构的使用方法、消息创建与字段绑定技巧,以及处理草稿数据时的 UNION 查询策略。通过代码示例演示了如何实现校验逻辑、生成错误消息并阻止无效数据持久化,同时提供了常见问题的排查建议。全文注重

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 334

量化交易python代码解析:从狙击手算法到最优限价算法

在金融市场的竞技场上,量化交易如同一位冷静的策略大师,它以数学模型为剑,以计算机程序为盾,精准出击,捕捉市场的微妙波动。本文将深入探讨五种核心量化交易算法:直接委托算法(DMA)、时间加权平均算法(TWAP)、冰山算法(Iceberg)、狙击手算法(Sniper)、条件委托算法(Stop)以及最优限价算法(BestLimit),揭开它们背后的运作机制与实战应用。

木头大左的博客 1888

在ubuntu20.04中安装MATLAB时常见问题及解决方法

   如果你刚装完ubuntu20.04,这时你想要安装MATLAB2021A,在输入命令./install进行安装时,可能会报以下错误:    terminate called after throwing an instance of ‘JailContainerException’ what(): Error: 88: No JRE version parsed from/media/jzx/MATHWORKS_R2021A/sys /java/jre/glnxa64/jre/release   

慕羽★的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: 一文弄懂FFMPEG HLS & 加密HLS
下一篇: 从零开始成为GStreamer专家——GStreamer类型系统
Martyn哥
博客等级 码龄19年 71粉丝 23原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值