Gstreamer基本概念介绍(开发前必读)

1. 元件(Elements)

元件(element)是GStreamer中最重要的概念。
你可以通过创建一系列的元件(Elements),并把它们连接起来,从而让数据流在这个被连接的各个元件(Elements)之间传输。
每个元件(Elements)都有一个特殊的函数接口,对于有些元件(Elements)的函数接口它们是用于能够读取文件的数据,解码文件数据的。
而有些元件(Elements)的函数接口只是输出相应的数据到具体的设备上(例如,声卡设备)。
你可以将若干个元件(Elements)连接在一起,从而创建一个管道(pipeline)来完成一个特殊的任务,
例如,媒体播放或者录音。GStreamer已经默认安装了很多有用的元件(Elements),
通过使用这些元件(Elements)你能够构建一个具有多种功能的应用程序。
当然,如果你需要的话,你可以自己编写一个新的元件(Elements)。

2. 箱柜(Bins)和管道(pipelines)

箱柜(Bins)是一个可以装载元件(element)的容器。
管道(pipelines)是箱柜(Bins)的一个特殊的子类型,管道(pipelines)可以操作包含在它自身内部的所有元件(element)。
因为箱柜(Bins)本身又是元件(element)的子集,所以你能够象操作普通元件(element)一样的操作一个箱柜(Bins), 
通过这种方法可以降低你的应用程序的复杂度。你可以改变一个箱柜(Bins)的状态来改变箱柜(Bins)内部所有元件(element)的状态。
箱柜(Bins)可以发送总线消息(bus messages)给它的 子集元件(element)(这些消息包括:错误消息(error messages),
标签消息(tag messages),EOS消息(EOS messages))。
管道(pipeline)是高级的箱柜(Bins)。当你设定管道的暂停或者播放状态的时候,数据流将开始流动,
并且媒体数据处理也开始处理。一旦开始,管道将在一个 单独的线程中运行,直到被停止或者数据流播放完毕。

3. 衬垫(Pads)

衬垫(Pads)在GStreamer中被用于多个元件的链接,从而让数据流能在这样的链接中流动。 
一个衬垫(Pads)可以被看作是一个元件(element)插座或者端口,元件(element)之间的链接就是依靠着衬垫(Pads)。 
衬垫(Pads)有处理特殊数据的能力:一个衬垫(Pads)能够限制数据流类型的通过。链接成功的条件是:
只有在两个衬垫(Pads)允许通过的数据类型一致的时候才被建立。
数据类型的设定使用了一个叫做caps negotiation的方法。数据类型被为一个GstCaps变量所描述。
下面的这个比喻可能对你理解衬垫(Pads)有所帮助。一个衬垫(Pads)很象一个物理设备上的插头。 
例如一个家庭影院系统。一个家庭影院系统由一个功放(amplifier),一个DVD机,还有一个无声的视频投影组成。 
我们需要连接DVD机到功放(amplifier),因为两个设备都有音频插口;
我们还需要连接投影机到DVD机上,因为 两个设备都有视频处理插口。
但我们很难将投影机与功放(amplifier)连接起来,因为他们之间处理的是不同的 插口。
GStreamer衬垫(Pads)的作用跟家庭影院系统中的插口是一样的。
对于大部分情况,所有的数据流都是在链接好的元素之间流动。
数据向元件(element)以外流出可以通过一个或者多个 source 衬垫(Pads),
元件(element)接受数据是通过一个或者多个sink 衬垫(Pads)来完成的。
Source元件(element)和sink元件(element)分别有且仅有一个 sink 衬垫(Pads)或者source 衬垫(Pads)。
数据在这里代表的是缓冲区(buffers) (GstBuffer对象描述了数据的缓冲区(buffers)的信息)和事件(events) 
(GstEvent对象描述了数据的事件(events)信息)。

时间: 2024-10-14 09:01:45

Gstreamer基本概念介绍(开发前必读)的相关文章

Shiro权限控制框架入门1:Shiro的认证流程以及基本概念介绍

前言:我在最开始学习Shiro这个框架时,在网上搜索到的一个介绍比较全面的教程是:<跟我学Shiro>系列教程.但是在我看了他写的前几篇文章后,我发现虽然他在这个系列教程中把shiro的一些特性介绍地非常全面详细,但是整个教程的叙述方式还是有很大缺陷的.文章与文章之间并没有很好地串联起来,每篇文章介绍的东西都过于分散了,如果是对shiro完全不了解的新手来看的话完全是一场噩梦.就像一个网友评价的这样: 看了看这个教程,看完之后都想放弃shiro了,完全看不懂,后来百度了很多别的资料才理解了sh

【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

集群概念介绍(一) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体系的总结,一则进行回顾复习,另则便于查询使用.本图文文档亦源于此.阅读Oracle RAC安装与使用教程前,笔者先对这篇文章整体构思和形成进行梳理.由于阅读者知识储备层次不同,我将从Oracle RAC安装前的准备与规划开始进行整体介绍安装部署Oracle RAC.始于唐博士指导,对数据库集群进行配置安装,前后经历2,3个

mysql数据引擎的概念介绍

什么是数据库引擎?每种数据库的数据格式,内部实现机制都是不同的,要利用一种开发工具访问一种数据库,就必须通过一种中介程序,这种开发工具与数据库之间的中介程序就叫数据库引擎. 如果你是个赛车手并且按一下按钮就能够立即更换引擎而不需要把车开到车库里去换,那会是怎么感觉呢?MySQL数据库为开发人员所做的就好像是按按钮换引擎:它让你选择数据库引擎,并给你一条简单的途径来切换它. MySQL 的自带引擎肯定是够用了,但是在有些情况下,其他的引擎可能要比手头所用更适合完成任务.如果愿意的话,你甚至可以使用

rac学习--集群概念介绍

集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体系的总结,一则进行回顾复习,另则便于查询使用.本图文文档亦源于此.阅读Oracle RAC安装与使用教程前,笔者先对这篇文章整体构思和形成进行梳理.由于阅读者知识储备层次不同,我将从Oracle RAC安装前的准备与规划开始进行整体介绍安装部署Oracle RAC.始于唐博士指导,对数据库集

[转]微信公众平台(测试接口)开发前的准备工作(转载自walkingmanc的专栏)

本文转自:http://blog.csdn.net/jiangweicpu/article/details/21228949 http://blog.csdn.net/walkingmanc/article/details/21457097第二讲 探秘微信公众号 1.   申请微信公众号 我们要进行微信公众平台的开发,第一步当然是要有公众号了.什么?不知道什么是微信公众号,看来你还要先回炉炼炼了,呵呵.通俗的说,我们微信平台就好像是一个大社会,里面有个体人,也有各种组织机构.你自己使用的普通微信

上门洗车APP --- Android客户端开发 前言及业务简介

上门洗车APP --- Android客户端开发 前言及业务简介 最近有些小累,私自接了一个项目,利用空余时间在开发,也比较乏力,时间和精力上有时候分配不过来,毕竟公司的事情要忙,只能自己抽时间来完成了,男人嘛,累点好,舒服是留给死人的(套用了一句逼格的话,o_O"~). 项目目前还在开发中,接口的调试以及业务的分析,框架的搭建,客户端这边已进行的差不多了,明天端午节,先祝大家节日快乐,汗~,看了下时间,貌似博客写完发表已经是端午节了,好吧,咕嘟咕嘟...... 大晚上的也是睡不着,写写博客,总

足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一)

在足球赛事数据库以及统计分析预测平台中,有很多概念,如果不搞懂,很难进行下一步的工作.所以为了配合团队人员的学习和任务进行,特意编写这篇文章.如果有其他问题和不懂的,请留言,将根据情况进行更新. 本文原文地址:足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一) 1.指数1/2/3.... 我在 足彩基础知识入门(3)足彩赔率的本质 一文中介绍了赔率的概念,那么指数的概念和赔率以及结果是相关的.我们举个例子: 如上图的比赛,前面是竞彩非让球的赔率:1.74-3.25-4.15,也就是说

攻城狮在路上(贰) Spring(二)--- Spring IoC概念介绍

一.IoC的概念: IoC(控制反转)是Spring容器的核心.另一种解释是DI(依赖注入),即让调用类对某一个接口的依赖关系由第三方注入,以移除调用类对某一个接口实现类的一览. 定义如此,由此可见,在面向接口编程的情况下,IoC可以很好的实现解耦,可以以配置的方式为程序提供所需要的接口实现类. 在实际程序开发中,我们只需要提供对应的接口及实现类,然后通过Spring的配置文件或者注解完成对依赖类的装配.二.IoC的类型: 1.通过构造函数: 此种方式的缺点是,在构造函数中注入之后一般会作为一个

从零开始编写自己的C#框架(2)——开发前准备工作

原文:从零开始编写自己的C#框架(2)--开发前准备工作 没想到写了个前言就受到很多朋友的支持,大家的推荐就是我最大的动力(推荐得我热血沸腾,大家就用推荐来猛砸我吧O^-^O),谢谢大家支持. 其实框架开发大家都知道,不过要想写得通俗点,我个人觉得还是挺吃力的.在本系列中,我不会很深入的去讲述那些映射啊关系啊(绕得我头都晕了,这些请大家去查看相关的文档学习吧)......概念上的东西会少讲,直接上实例,讲实际应用.当然如果您觉得这样很不尊重面向对象什么的,那也没办法,只能说我们不在一个频道上.