四、GStreamer基础

news2024/10/9 20:23:37

本章介绍GStreamer的基本概念。理解这些概念对于阅读本指南的其他任何内容都是很重要的,它们都假定理解了这些基本概念。

元素

元素是GStreamer中最重要的一类对象。你通常会创建一个链接在一起的元素链,并让数据在这个元素链中流动。元素有一个特定的功能,可以是从文件中读取数据、解码数据或将数据输出到声卡(或其他东西)。通过将几个这样的元素链接在一起,您可以创建一个可以执行特定任务的管道,例如媒体播放或捕获。GStreamer默认提供了大量元素集合,使得开发各种媒体应用程序成为可能。如果需要,还可以编写新元素。这个主题在GStreamer插件编写指南中有大量解释。

Pads

pad是元素的输入和输出,可以连接其他元素。它们用于在GStreamer中协商元素之间的链接和数据流。pad可以被视为元素上的“plug”或“port”,可以与其他元素建立链接,数据可以通过它流向或从这些元素流出。Pads具有特定的数据处理能力:Pads可以限制流经它的数据类型。只有当两个Pads允许的数据类型兼容时,两个板之间才允许有链路。在pad之间通过caps协商过程协商数据类型。数据类型用GstCaps描述。

在这里打个比方可能会有帮助。pad类似于物理设备上的插头或插孔。例如,考虑一个由放大器、DVD播放机和(无声的)视频放映机组成的家庭影院系统。允许将DVD播放机连接到放大器,因为两种设备都有音频插孔,允许将投影机连接到DVD播放机,因为两种设备都有兼容的视频插孔。投影仪和放大器之间的连接可能不会进行,因为投影仪和放大器有不同类型的插孔。GStreamer中的Pads与家庭影院系统中的插孔具有相同的作用。

大多数情况下,GStreamer中的所有数据都是通过元素之间的链接单向流动的。数据通过一个或多个src pad从一个元素流出,元素通过一个或多个sink pad接受传入的数据。source和sink元素分别只有src pad和sink pad。数据通常指buffers(由GstBuffer对象描述)和事件(由GstEvent对象描述)。

Bins和pipelines

bin是存放一组元素的容器。由于箱子是元素本身的子类,你可以像控制元素一样控制bin,从而为你的应用程序抽象出很多复杂性。例如,你可以通过改变bin本身的状态来改变箱子中所有元素的状态。bin还转发来自其包含的子节点的总线消息(如错误消息、标记消息或EOS消息)。

管道是顶层的bin。它为应用程序提供了一个总线,并为其子程序管理同步。当你将其设置为暂停或播放状态时,数据流将开始并进行媒体处理。一旦启动,管道将在单独的线程中运行,直到您停止它们或到达数据流的终点。
在这里插入图片描述

Communication

GStreamer为应用程序和管道之间的通信和数据交换提供了几种机制。

  • buffer是用于在管道中的元素之间传递流数据的对象。buffer总是从source到sink(downstrean)。

  • event是在元素之间或应用程序给元素之间发送的对象。事件可以upstream和downstream之间传播。downstream事件可以与数据流同步。

  • messages消息是由管道消息总线上的元素发布消息的对象,它们将被应用程序保存在那里进行收集。消息可以从发送消息的元素的流线程上下文同步地截获,但通常由应用程序从应用程序的主线程异步处理。消息用于以线程安全的方式将错误、标签、状态更改、缓冲状态、重定向( errors, tags, state changes, buffering state, redirects)等信息从元素传输到应用程序。

  • 查询允许应用程序从管道请求诸如持续时间或当前播放位置等信息。查询总是同步回答。元素还可以使用查询从同级元素请求信息(例如文件大小或持续时间)。它们可以在管道中以两种方式使用,但上游查询更常见。
    在这里插入图片描述
    注意看箭头方向和颜色,表示不同元素、bus、应用程序之间的交流方式

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

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

相关文章

运动耳机有必要买吗、口碑最好的运动耳机品牌排行

冬天绝对是个减肥的好季节,因为这个季节天气比较冷,我们在运动过程中消耗的热量也就会更多,因此选择一款不错的运动耳机来用坚持就显得尤为重要了。这款运动耳机要能稳定在耳朵上,还要具备防水功能,同时音质上也要有保…

gd32f103vbt6 串口OTA升级-问题记录

今天研究了一下gd32单片机串口OTA升级的事情。我感觉ota的唯一好处就是不用调试器就可以下载(更新)单片机应用程序。(但是需要232串口,OTA程序我是使用stlink下载的!!) 可能有些同学要问,32的单片机本身就…

【综合】数字IC设计需要考虑的时序参数;Race Hazard;同步系统时序要求;建立时间、保持时间;偏斜;抖动;毛刺、竞争冒险;亚稳态

【综合】数字IC设计需要考虑的时序参数;Race Hazard;同步系统时序要求;建立时间、保持时间;偏斜;抖动;毛刺、竞争冒险;亚稳态数字设计时需要考虑的时序参数传播延迟 propagation delay, 上升时间…

十一、树结构的实际应用—堆排序

1、基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最好最坏平均时间复杂度均为O(n\log n) 。也不是稳定排序。堆是具有以下性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,…

云音乐实现注册功能

1. 新建web项目 Shop_SM2. 复制Shop资源和相关代码,实现注册功能回顾当前配置下的加载顺序1.MyBatis的主配置文件mybatis-config.xml (在根目录下)和 工具类MyBatisUtil(注意总配置文件的路径)2.实体类(Use…

docker篇---pycharm连接docker,使用docker环境

pycharm连接docker,使用docker环境一、生成镜像和容器1.1 创建容器,需要加端口映射1.2 进入容器1.3 设置root密码,后续登录会用到1.4 修改配置文件1.5 重启ssh服务1.5 本机连接ssh二、pycharm连接docker2.1 允许远程客户端连接2.2 pycharm配置…

线程互斥与同步--Linux

文章目录线程互斥的概念与意义互斥的原理--原子性关于售票模拟的互斥应用死锁问题线程同步的概念与意义条件变量实现同步生产者消费者模型--互斥与同步基于阻塞队列的生产者消费者模型基于环形队列的生产者消费者模型POSIX信号量线程池线程安全下的单例模式总结线程互斥的概念与…

OMS标准 第二卷 主要通讯

版本4.1.2/2016-12-16 发布 1 引言 1.1 概述 本部分描述了从设备(仪表或执行器或断路器)和(固定的,通常由市电供电的)主设备(网关或其他通信单元)之间有线和无线通信的最低开放式计量系统要…

1. Mybatis 入门

文章目录1. Mybatis 简介2. Mybatis 快速入门3. 使用 idea 写 SQL4. Mapper 代理开发5. MyBatis 核心配置文件1. Mybatis 简介 MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发。 官方文档:https://mybatis.org/mybatis-3/zh/index.html 持久层&am…

【自学Docker】Docker cp命令

Docker cp命令 大纲 docker cp命令教程 docker cp 命令用于在本地文件系统与 Dokcer容器 之间复制文件或者文件夹。该命令后面的 CONTAINER 可以是容器Id,或者是容器名。 docker cp命令语法 从容器复制到宿主机 haicoder(www.haicoder.net)# docker cp [OPTION…

第57篇-某日头条signature参数分析【2023-02-01】

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、网站分析三、signature参数四、完整代码一、前言 今天来看一下新闻网站,分析一下参数 二、网站分析 网…

WebDAV之葫芦儿·派盘+一叶日记

一叶日记 支持WebDAV方式连接葫芦儿派盘。 推荐一款操作方便、界面简洁,记录生活点滴与心情,具有诗情画意的日记软件。 一叶日记是一款记录日记的手机软件,在这款软件中它里面有着各种不同的工具,可以方便用户去随时随地的记录日记,同时里面还有着各种不同的主题背景&…

补充:论Unity_InputSystemPacakage如何使用

图1补充一下默认特殊值如何设定,点击ProjectingSettings——InputSystemPacakage——Create Settings Asset 即可设置默认特殊值,或者点击图1中的Open input settings也可以打开此界面。 创建后会在Project窗口出现一个配置文件,不需要时删除…

你说反射有点难追,我觉得应该知难而退。

文章目录问题源码解析溯源问题解决方案第一种:第二种:第三种:问题 今天小伙伴遇到一个问题,有关于反射的,写个demo,大家看一下。 如上,运行之后会报错:出现了非法参数。 Exception…

深度学习论文: YOLOv6 v3.0: A Full-Scale Reloading及其PyTorch实现

深度学习论文: YOLOv6 v3.0: A Full-Scale Reloading及其PyTorch实现 YOLOv6 v3.0: A Full-Scale Reloading PDF: https://arxiv.org/pdf/2301.05586.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/PyTorch…

2023年IB考试该如何备考?

IB课程考试时间 考试时间:IBO官方近期公布了2023年的考试时间与计划,中国学生IB考试时间定在2023.5.1至5.19。 在世界各地,学生在IB体系中均按照相同的教学大纲进行,并且于毕业时参加全球统一考试。一年两次(北半球于5…

拉伯证券|北向资金1月净买入超1400亿,啥信号?

2023年1月份,电视剧《狂飙》热播,被视为A股投资“风向标”的北向资金也敞开“狂飙”态势,月内五次净买入额超百亿,1月30日单日净买入额更是创2021年12月以来新高。 单月净买入超1400亿,刷新纪录! 北向资金…

Ventoy安装教程

目录Ventoy五大优势Ventoy安装教程其他链接Ventoy是一款国人开发的新一代多ISO启动引导程序,用户只需要将所需的ISO镜像文件拷贝至优盘中即可在Ventoy界面中选择自己想要的ISO镜像文件。 Ventoy五大优势 广泛兼容:支持包括Windows 10、Windows 8.1、Wind…

【哈希表】leetcode15. 三数之和(C/C++/Java/Python/Js)--梦破碎的地方

leetcode15. 三数之和--梦破碎的地方1 题目2 思路2.1 哈希解法--含代码2.2 双指针2.3 去重逻辑的思考2.3.1 a的去重2.3.2 b与c的去重3 代码--双指针法3.1 C版本3.2 C版本3.3 Java版本3.4 Python3版本3.5 JavaScript版本4 总结用哈希表解决了两数之和 ,那么三数之和呢…

[Lua实战]Skynet-2.如何启动(Win10-WSL环境Ubuntu18.04)[开箱可用]

Skynet-2.如何启动Win10-WSL环境Ubuntu18.04接上文,在linux运行skynet1.WIN10-WSL1.1 用Microsoft Store安装WSL(会遇到商店下载失败等问题...)1.1.1控制面板支持Linux配置1.1.2Microsoft Store 找到 Ubuntu18.041.1.3如果遇到安装问题如图请直接跳到1.21.2 使用PowerShell工具…