GStreamer 介绍

2024-06-12 12:20
文章标签 介绍 gstreamer

本文主要是介绍GStreamer 介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1,什么是GStreamer?

GStreamer是一个用于创建流媒体应用程序的框架。基本设计来自俄勒冈研究生院的视频管道,以及DirectShow的一些想法。

GStreamer的开发框架使得编写任何类型的流媒体多媒体应用程序成为可能。GStreamer框架旨在使编写处理音频或视频或两者兼而有之的应用程序变得容易。它不仅限于音频和视频,并且可以处理任何类型的数据流。管道设计的开销几乎不超过所应用的过滤器引起的开销。这使得GStreamer成为设计对延迟提出高要求的高端音频应用程序的良好框架。

GStreamer最明显的用途之一是使用它来构建媒体播放器。GStreamer已经包含了用于构建媒体播放器的组件,该播放器可以支持多种格式,包括MP3、Ogg/Vorbis、MPEG-1/2、AVI、Quicktime、mod等等。然而,GStreamer不仅仅是另一个媒体播放器。它的主要优点是可插拔组件可以混合和匹配到任意管道中,因此可以编写成熟的视频或音频编辑应用程序。

该框架基于插件,这些插件将提供各种编解码器和其他功能。插件可以链接并排列在管道中。该管道定义了数据流。管道也可以使用GUI编辑器进行编辑并保存为XML,以便以最少的工作量制作管道库。

GStreamer的核心功能是为插件、数据流和媒体类型处理/协商提供一个框架。它还提供了一个API来使用各种插件编写应用程序。

具体来说,GStreamer提供

  • 用于多媒体应用程序的API

  • 插件架构

  • 流水线架构

  • 媒体类型处理/协商机制

  • 同步机制

  • 超过250个插件提供超过1000个元素

  • 一套工具

GStreamer插件可分为

  • 协议处理

  • 来源:用于音频和视频(涉及协议插件)

  • 格式:解析器,格式化程序,复用器,解复用器,元数据,字幕

  • 编解码器:编码器和解码器

  • 过滤器:转换器、混音器、效果器、…

  • 接收器:用于音频和视频(涉及协议插件)

GStreamer 包:

  • gstreamer:核心包

  • gst-plugins-base:一组基本的示例性元素

  • gst-plugins-good:LGPL下的一组优质插件

  • gst-plugins-ugly:一组可能造成分发问题的高质量插件

  • gst-plugins-bad:一组需要更高质量的插件

  • gst-libav:一组包装libav进行解码和编码的插件

  • 其他几个包

2,设计原则

2.1,干净有力

GStreamer提供了一个干净的界面:

  • 想要构建媒体管道的应用程序程序员。程序员可以使用一组强大的工具来创建媒体管道,而无需编写任何代码。执行复杂的媒体操作变得非常容易。

  • 插件程序员,为插件程序员提供了一个干净简单的应用编程接口来创建独立的插件。集成了广泛的调试和跟踪机制。GStreamer还附带了一组广泛的现实生活中的插件,也可以作为示例。

2.2,面向对象

GStreamer 遵循GObject GLib 2.0对象模型 熟悉GLib 2.0GTK+将熟悉GStreamer。

GStreamer 使用信号和对象属性的机制。

可以在运行时查询所有对象的各种属性和功能。

GStreamer打算在编程方法论上类似于GTK+。这适用于对象模型、对象所有权、引用计数等。

2.3,可扩展

所有 GStreamer 对象都可以使用 GObject继承进行扩展方法。

所有插件都是动态加载的,可以独立扩展和升级。

2.4,允许仅二进制插件

插件是在运行时加载的共享库。由于所有的 插件的属性可以使用GObject属性进行设置不需要(实际上也不可能)安装任何头文件 插件。

特别注意使插件完全独立。插件的所有相关方面都可以在运行时查询。

2.5,高性能

高性能是通过以下方式获得的:

  • 使用GLib的GSlice分配器。

  • 插件之间极其轻量级的链接。数据可以以最小的开销在管道中传输。插件之间的数据传递只涉及典型管道中的指针取消引用。

  • 提供一种直接在目标内存上工作的机制。例如,插件可以直接写入X服务器的共享内存空间。缓冲区也可以指向任意内存,例如声卡的内部硬件缓冲区。

  • 写入时重新计数和复制最大限度地减少 memcpy 的使用。子缓冲区有效地将缓冲区拆分为可管理的部分。

  • 专用流线程,调度由内核处理。

  • 通过使用专门的插件允许硬件加速。

  • 使用带有插件规范的插件注册表,以便可以延迟插件加载,直到实际使用插件。

2.6,清理核心/插件分离

GStreamer的核心本质上与媒体无关。它只知道字节和块,只包含基本元素。GStreamer的核心甚至足以实现低级系统工具,如cp。

所有媒体处理功能都由核心外部的插件提供。这些告诉核心如何处理特定类型的媒体。

2.7,为编解码器实验提供框架

GStreamer还希望成为一个简单的框架,编解码器开发人员可以在其中 试验不同的算法,加快开发开放和免费的多媒体编解码器,如Xiph.Org基金会开发的编解码器(如Theora和Vorbis)。

3,基础概念

本章介绍了GStreamer的基本概念。理解这些概念对于阅读本指南的任何其余部分都很重要,所有这些概念都假设理解这些基本概念。

3.1,元素

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

3.2,Pads

Pads是元素的输入和输出,您可以在其中连接其他元素。它们用于协商之间的链接和数据流 GStreamer中的元素。Pad 可以看作是一个“插头”或“端口” 元素,其中可以与其他元素建立链接,并且通过它数据可以流入或流出这些元素。Pads 有特定的数据处理能力:pad可以限制流动的数据类型通过它。链接只允许在允许的情况下在两个pads之间两个数据类型(功能)是兼容的。数据类型是使用称为大写协商的过程在Pads之间协商。数据类型由 GstCaps 描述

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

在大多数情况下,GStreamer中的所有数据都通过一个链接单向流动元素之间。数据通过一个或多个从一个元素流出源Pads和元素通过一个或多个接收器pads。源和接收器元件只有源和接收器pad分别。数据通常意味着缓冲区(由 GstBuffer 对象)和事件(由 GstEvent 对象)。

3.3,Bin 和 管道

Bin是元素集合的容器,由于bin本身就是元素的子类,因此你可以像控制元素一样控制bin,从而为你的应用程序抽象出许多复杂性。例如,您可以更改bin中所有元素的状态 通过更改该bin本身的状态。Bins还转发总线消息来自它们包含的子级(例如错误消息、标签消息或 EOS消息)。

一个管道是一个顶级bin。它为应用程序提供一个总线 ,并管理其子元素的同步。当您将其设置为 PAUSEDPLAYING状态,数据流将启动,媒体处理将进行。一旦启动,管道将在单独的线程中运行,直到您停止它们或到达数据流的末尾。

3.4,通讯

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

  • Buffers 是用于在管道中的元素之间传递流数据的对象。缓冲区总是从源传输到接收器(下游)。

  • Events 是在元素之间或从应用程序发送到元素的对象。事件可以上游和下游传输。下游事件可以与数据流同步。

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

  • queries 查询允许应用程序从管道请求信息,如持续时间或当前播放位置。查询总是同步回答。元素也可以使用查询从其对等元素请求信息(如文件大小或持续时间)。它们可以在管道中两种方式使用,但上游查询更常见。

这篇关于GStreamer 介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054202

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

Mysql BLOB类型介绍

BLOB类型的字段用于存储二进制数据 在MySQL中,BLOB类型,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储的大小不同。 TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

nginx介绍及常用功能

什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务。 Apache:重量级的,不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。这些都决定了Apache不可能成为高性能WEB服务器  nginx:

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器