gstreamer插件工作原理与流程分析

【GStreamer】gst_init函数 GStreamer是Linux下最常用的音视频编解码框架,在音视频芯片中应用广泛(如MTK、AML等),也是嵌入式平台(如汽车、无人机、机器人等)音视频技术发展重要的技术。在使用GStreamer过程中,首先需要对GStreamer框架进行初始化,会使用gst_init()函数,下面简单记录这个函数的实现流程。 阅读详情

 gstreamer plugins的工作同所有的基于插件的程序的工作原理类似,本质上都是通过读取动态库实现的,只需要每个动态库都实现某一个特定的接口就可以了,比如XX_init等,gstreamer统一使用plugin_init。里面会有个像注册表一样的数据结构会存储所有的插件的信息。

     (1)在应用程序启动时,会调用gst_init--->gst_init_check。gst_init_check函数将用于初始化gstreamer函数库,建立内部的路径列表,注册内置元件以及加载标准plugins(插件)。

       (2)在gst_init_check函数中将调用init_post函数,它将设置日志处理器函数,初始化gst_format,并为gst_object注册一系列类型等等。在init_post函数中还将调用gst_update_registry函数,强制gstreamer对它的plugin所在路径进行重新扫描,并且更新默认的plugin registry(登记处,注册处)。读取注册库(处)信息是通过调用ensure_current_registry来实现的。首先,它会逐个去先后读取系统环境变量GST_REGISTRY,GST_REGISTRY_UPDATE以及GST_REGISTRY_FORK。其次,在读取完这些环境变量后,程序将知道是否要更新registry。最后,调用scan_and_update_registry函数,监测registry的变化并且最终更新registtry缓存。

     (3)在上面提到的scan_and_update_registry函数中,将会去读取GST_PLUGIN_PATH环境变量。在读取完环境变量后,将先调用gst_registry_remove_cache_plugins清除过时的plugin消息,然后调用gst_registry_binary_write_cache更新registry cache。

        对于大部分gstreamer应用程序来说,执行到第三步骤后基本就可以认为是结束了。随后,所有的plugin加载,都是用户触发而进行动态加载的。(danny更正:2012-07-26)

      而对于没有定义GST_DISABLE_OPTION_PARSING宏的应用程序来说,继续执行4和5步,以预先加载一些静态的插件程序。

       (4)以上第(2)第(3)步结束后,也就是ensure_current_registry函数调用返回到gst_update_registry函数中。

           if (preload_plugins) {
                  g_slist_foreach (preload_plugins, load_plugin_func, NULL);//遍历GST_PLUGIN_PATH目录,依次打开动态库

     (5)在load_plugin_func函数中将会去调用gst_plugin_load_file函数;该函数将依次调用g_module_open,g_module_symbol,gst_plugin_register_func,gst_default_registry_add_plugin函数。其中gst_plugin_register_func函数里将指定并调用进入每一个插件的入口函数plugin_init。

       程序自己实现的每一个plugin,都需要在XXX.c文件中定义plugin_init函数和宏GST_PLUGIN_DEFINE。宏GST_PLUGIN_DEFINE用于定义一个plugin的入口点和元数据。同时,它用于输出(export)一个plugin,这样它就就可以被其他应用程序使用。

     我们看一个实际的例子:

     至此,我们完成了gstreamer的插件加载原理与过程的分析。

编写 GStreamer 插件1:概述 GStreamer是一个非常强大和通用的框架,用于创建流媒体应用程序。GStreamer框架的许多优点来自于它的模块化:GStreamer可以无缝地合并新的插件模块。但由于模块化和强大的功能往往以更高的复杂性为代价(例如,考虑CORBA),编写新插件并不总是那么容易。 本指南旨在帮助您理解GStreamer框架,以便开发新插件来扩展现有功能。本指南通过开发一个用C编写的示例插件(音频过滤器插件)来解决大多数问题。但是,本指南后面的部分还介绍了编写其他类型插件所涉及的一些问题,并且本指南的结尾描述了GStre 阅读详情

相关推荐

深入探索GStreamer 1.16.2:源码与插件解构

GStreamer是一个开源的跨平台的多媒体框架,允许开发者快速创建复杂的媒体处理应用程序。其应用场景广泛,包括但不限于流媒体传输、音视频播放器、实时音视频处理等。GStreamer的强大之处在于其高度模块化的插件架构,这使得它不仅可以轻松处理多媒体数据,还可以支持各种媒体格式和编解码器。GStreamer支持多种类型的插件包,它们按照功能和质量被划分为不同级别:Ugly、Good、Bad。此外,还有一种名为Base的插件包,虽然不是官方的分法,但通常被用于基础的功能实现。Ugly插件。

weixin_35364187的博客 1216

gstreamer-插件开发的简单过程

Gstreamer的插件开发使用模板工具生成框架非常方便,比如我这里要实现一个videoprocess插件,使用gst-plugins-bad/toolsgst-element-maker 生成代码框架,然后再添加实际功能,可以达到事半功倍的效果。 根据插件模板创建插件videoprocess,videoprocess的bass class是videofilter

技术笔记 1733

Ubuntu22.04下安装LDAP

在Ubuntu22.04的时候可以使用apt的方式来安装,在安装LDAP的web 服务器的时候可以考虑选择 LDAP 帐户管理器 (LAM)。因为 PHPLDAPadmin 安装时需要 php 的环境依赖,相对来说安装麻烦。此外在 PHPLDAPadmin 中创建组织和用户时与平常的语法有很大不同,对新手来说不友好。

dl_11的博客 3944

GStreamer基本的接口

GStreamer基本的接口

cai742925624的专栏 443

DSSAT模型实战:从基础配置到气候情景模拟

本文详细介绍了DSSAT模型在农业模拟中的应用,从基础配置到气候情景模拟的全流程实战指南。通过土壤-植物-大气连续体的动态关系建模,DSSAT能精准预测作物产量,误差率低至8%。文章涵盖气象数据处理、土壤参数配置、管理措施调控等核心技巧,并提供了Python脚本和可视化方法,助力农业科研与决策。

weixin_29264201的博客 1013

【UE5】多用户协同编辑实战:从配置到实时协作

本文详细介绍了在虚幻引擎5中配置和使用多用户协同编辑功能的完整流程。从启用Multi-User Editing插件、配置UDP Messaging网络通信,到启动服务器、创建会话并实现实时协作,提供了从环境准备到实战协作的清晰指南。文章还分享了资产同步、场景分批、对象锁定等实用技巧,并强调了网络配置与版本一致性等关键避坑点,旨在帮助中小型团队提升关卡设计和原型开发的协作效率。

weixin_29001683的博客 267

gst_init和gst_init_check区别

gst_init和gst_init_check区别

cai742925624的专栏 384

航空发动机轴承故障诊断

《航空发动机主轴承故障诊断的挑战与HIT数据集研究》 摘要: 航空发动机主轴承作为关键部件,其可靠性直接影响飞行安全。然而,主轴承故障诊断面临信号信噪比低、传输路径复杂、故障类型多样、变工况运行等挑战。哈尔滨工业大学团队开发的HIT数据集为研究提供了真实工况下的实验数据,包含正常、内圈和外圈故障三种状态,具有高仿真度和强挑战性特点。研究表明,传统诊断方法在该数据集上准确率仅71-85%,突显了诊断难度。团队提出的ISONet新方法通过输入空间过参数化技术,将诊断准确率提升至99%以上,为航空发动机轴承故障诊

tyutwuxuan的博客 994

gstreamer插件工作原理与流程分析 .

gstreamer plugins的工作同所有的基于插件的程序的工作原理类似,本质上都是通过读取动态库实现的,只需要每个动态库都实现某一个特定的接口就可以了,比如XX_init等,gstreamer统一使用plugin_init。里面会有个像注册表一样的数据结构会存储所有的插件的信息。      (1)在应用程序启动时,会调用gst_init--->gst_init_check。gst_init

勤奋努力 一飞冲天 1798

学习笔记|多样本单因素方差分析|事后比较|方差齐性|F检验|韦尔奇检验|两独立样本T检验|两样本方差分析|规范表达|《小白爱上SPSS》课程:SPSS第七讲 | 单因素方差分析怎么做?

学习笔记|多样本单因素方差分析|事后比较|方差齐性|F检验|韦尔奇检验|两独立样本T检验|两样本方差分析|规范表达|《小白爱上SPSS》课程:SPSS第七讲 | 单因素方差分析怎么做?

Medlar_CN的博客 9515

驾驶行为检测数据集准备与处理详解

本文详细介绍了构建"未系安全带/打电话"检测模型的数据集准备流程。首先分析公开数据集(如StateFarm、AICityChallenge)的优缺点,并提供格式转换脚本。重点推荐自行采集+半自动标注方案:1)视频关键帧提取;2)使用预训练模型生成伪标签;3)人工修正标注;4)数据增强(光照变化、运动模糊等)。文章还包含数据配置文件编写指南,并针对类别不平衡、小目标检测等常见问题提出解决方案,如过采样、切片训练和负样本挖掘。通过这套流程可构建高质量数据集,为模型训练奠定基础。

u010117029的博客 356

Gstreamer工作原理分析

1.         Abstract 主要讲的是gstreamer的工作原理,包括gst-launch的分析和playbin的分析,以及数据的流动分析。 2.         Introduction 先介绍一些术语,然后介绍了插件的工作原理,后面接着介绍了gst-launch,playbin,decodebin,typefind,数据流动. 3.         原理分析 3.1

xuke537的专栏 1729

第14.10章 高翔博士最新开源框架Lightning-LM源码解读(十):在线定位run_loc_online涉及到的核心模块总结

本文对Lightning-LM激光SLAM定位框架进行了全面剖析。该框架是一个轻量高效的激光雷达建图与定位系统,支持3D SLAM、动态图层管理等功能。文章首先介绍了项目概况和源码结构,包括核心模块如定位系统(loc_system)、激光匹配(lidar_loc)和位姿图优化(pose_graph)等。接着详细解析了各模块的关键函数和运行流程,如数据接收处理、NDT匹配和位姿优化等。最后总结了学习该框架所需的C++知识要点,包括智能指针、多线程编程等现代C++特性。该分析为SLAM开发者提供了实用的架构参考

行知SLAM 801

Gstreamer资料汇总

gstreamer工作原理分析 https://www.doc88.com/p-981996025101.html gstreamer中playbin的播放原理 https://blog.youkuaiyun.com/android_lee/article/details/6789272 Gstreamer的一些基本概念与A/V同步分析 https://www.cnblogs.com/shakin/p/4738349.html Embedded Linux | Gstreamer Support | Develo

qq_36959443的博客 337

YOLOv8改进 | Neck篇 | Slim-Neck替换特征融合层实现超级涨点 (又轻量又超级涨点)

本文给大家带来的改进机制是Slim-neck提出的Neck部分,Slim-neck是一种设计用于优化卷积神经网络中neck部分的结构。在我们YOLOv8中,neck是连接主干网络(backbone)和头部网络(head)的部分,负责特征融合和处理,以便提高检测的准确性和效率。亲测在小目标检测和大尺度目标检测的数据集上都有大幅度的涨点效果(mAP直接涨了大概有0.4左右。同时本文对Slim-Neck的框架原理进行了详细的分析,不光让大家会添加到自己的模型在写论文的时候也能够有一定的参照。

Snu77的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

gstreamer核心源码走读typefind原理浅析(二) .

在我的上一篇文章里,谈到:  8)Filesrc最终会调用open函数打开文件。接着src组件状态也发生切换,创建一个task,最后把文件信息推送给typefind;  9) typefind会从src读取一部分数据然后送出typefind_callback,在callback里面创建合适的plugin。合适的plugin.    本文将从源码分析的角度,重点将这2步分析清楚。可以说,理解了

勤奋努力 一飞冲天 1545

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

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

gstreamer插件指南

https://blog.youkuaiyun.com/sinat_28502203/article/details/46010485 GStreamer插件开发指南(0.10.9.1) I.介绍 GStreamer是一个用来创建流媒体应用程序的非常强大和通用的框架。GStreamer框架的许多优点来源于它的模块性 :GStreamer可以无缝地接纳新的插件模块。但是由于模块性和强大的功能通常以极高的复杂性为代价(例如CORBA),编写一个新的插件并不总是一件简单的事。 本手册旨在帮助你了解GStre...

eydwyz的专栏 2709

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

gstreamer插件开发指南(一)

翻译自:https://gstreamer.freedesktop.org/documentation/plugin-development/index.html 1 简介 GStreamer是一个非常强大且通用的框架,用于创建流媒体应用程序。GStreamer框架的许多优点来自其模块化:GStreamer可以无缝地合并新的插件模块。但是,由于模块化和功耗通常需要更高的复杂性(例如,考虑CORBA...

cdknight_happy的专栏 9854

编写一个GStreamer插件

GStreamer是一个非常强大和通用的框架,用于创建流媒体应用程序。GStreamer框架的许多优点来自于它的模块化:GStreamer可以无缝地合并新的插件模块。但由于模块化和强大的功能往往以更高的复杂性为代价(例如,考虑CORBA),编写新插件并不总是那么容易。 本指南旨在帮助您理解GStreamer框架,以便开发新插件来扩展现有功能。本指南通过开发一个用C编写的示例插件(音频过滤器插件)来解决大多数问题。但是,本指南后面的部分还介绍了编写其他类型插件所涉及的一些问题,并且本指南的结尾描

我的专栏 2775

(转)Gstreamer工作原理分析

<br /><br />Tech<br />Gstreamer工作原理分析<br />Guide<br />How to Mount Maemo File System——Guide Issue: <0.5><br />System Analysis and Design Documents Issue Date: <10/29/2007><br /><Document identifier><br />Tech, 2005 Page 2 of 22<br />Revision History<br />

lvliang2008的专栏 5529

gstreamer-hlsdemux插件的初始流程

在gst_soup_http_src_read_buffer部分,如果读不到buffer就会返回GST_FLOW_EOS,gst_base_src_loop中会根据GST_FLOW_EOS创建EOS event,然后push到pad上,gst_uri_downloader_sink_event中再释放downloader->priv->cond条件变量,这个条件变量会结束downloader uri的线程的等待,在gst_uri_downloader_fetch_uri_with_range中可以看到。

技术笔记 1046
上一篇: 快速上手Gobject
下一篇: gstreamer教程系列之动态插件的实现与原理
fei_ing
博客等级 码龄13年 7粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值