1)概述

Bins是一种容器element。你可以往Bins中添加element。由于Bins本身也是一种element,所以你可以像普通element一样 操作Bins。因此,先前关element的内容同样可以应用于Bins。

Bins允许你将一组有链接的element组合成一个大的逻辑element。你不再需要对单个element进行操作,而仅仅操作Bins。当你在构建一个复杂的管道时,你会发现Bins的巨大优势,因为它允许你将复杂的管道分解成一些小块。

Bins同样可以对包含在其中的element进行管理。它会计算数据怎样流入Bins,并对流入的数据流制定一个最佳的计划(generate an optimal plan)。计划制定(Plan generation)是GStreamer中最复杂的步骤之一。

形象化的Bins:

 

GStreamer程序员经常会用到的一个特殊的Bins:

(Pipeline)管道:是一种允许对所包含的element进行安排(scheduling)的普通容器。顶层(toplevel)Bins必须为一个管道。因此每个GStreamer应用程序都至少需要一个管道。当应用程序启动后,管道会自动运行在后台线程中。

 

 

2)创建Bins

你可以通过使用创建其他element的方法来创建一个Bins,如使用GstElementFactory等。当然也有一些更便利的函数来创建Bins— (gst_bin_new()和 gst_pipeline_new ())。你可以使用gst_bin_add()往Bins中增加element,使用gst_bin_remove()移除Bins中的element。当你往Bins中增加一个element后,Bins会对该元件产生一个所属关系;当你销毁一个Bins后,Bins中的element同样被销毁 (dereferenced);当你将一个element从Bins移除后,该element会被自动销毁(dereferenced)。

#include <gst/gst.h>

int main (int   argc, char *argv[])

{

  GstElement *bin, *pipeline, *source, *sink;

  /* init */

  gst_init (&argc, &argv);

  /* create */

  pipeline = gst_pipeline_new ("my_pipeline");

  bin = gst_pipeline_new ("my_bin");

  source = gst_element_factory_make ("fakesrc", "source");

  sink = gst_element_factory_make ("fakesink", "sink");

  /* set up pipeline */

  gst_bin_add_many (GST_BIN (bin), source, sink, NULL);

  gst_bin_add (GST_BIN (pipeline), bin);

  gst_element_link (source, sink);

[..]

}

 

3)定义bins

程序员可以自定义能执行特定任务的Bins。例如,你可以参照下面的代码写一个 Ogg/Vorbis 解码器。

int main (int   argc, char *argv[])

{

  GstElement *player;

  /* init */

  gst_init (&argc, &argv);

  /* create player */

  player = gst_element_factory_make ("oggvorbisplayer", "player");

  /* set the source audio file */

  g_object_set (player, "location", "helloworld.ogg", NULL);

  /* start playback */

  gst_element_set_state (GST_ELEMENT (player), GST_STATE_PLAYING);

[..]

}

自定义的Bins可以同插件或XML解释器一起被创建。你可从 Plugin Writers Guide得到更多关于创建自定义Bins的信息。gst-plugins-base中的playbin与decodebin元件都是自定义箱柜的例子。

 

openwrt gstreamer实例学习笔记(四. gstreamer Bins)的更多相关文章

  1. openwrt gstreamer实例学习笔记(一.初始化gstreamer)

    GStreamer 是一个非常强大而且通用的流媒体应用程序框架. GStreamer所具备的很多优点来源于其框架的模块化: GStreamer能够无缝的合并新的插件. 但是, 由于追求模块化和高效率, ...

  2. openwrt gstreamer实例学习笔记(六. gstreamer Pads及其功能)

    一:概述 如我们在Elements一章中看到的那样,Pads是element对外的接口.数据流从一个element的source pad到另一个element的sink pad.pads的功能(cap ...

  3. openwrt gstreamer实例学习笔记(三.深入了解gstreamer 的 Element)

    在前面的部分,我们简要介绍过 GstElementFactory 可以用来创建一个element的实例,但是GstElementFactory不仅仅只能做这件事,GstElementFactory作为 ...

  4. openwrt gstreamer实例学习笔记(七. gstreamer 缓冲区(Buffers)和事件(Events))

    1)概述 管道的数据流由一组缓冲区和事件组成,缓冲区包括实际的管道数据,事件包括控制信息,如寻找信息和流的终止信号.所有这些数据流在运行的时候自动的流过管道. 2) 缓冲区(Buffers) 缓冲区包 ...

  5. openwrt gstreamer实例学习笔记(五. gstreamer BUS)

    1)概述 BUS(总线) 是一个简单的系统,它采用自己的线程机制将一个管道线程的消息分发到一个应用程序当中.总线的优势是:当使用GStreamer的时候,应用程序不需要线程识别,即便GStreamer ...

  6. openwrt gstreamer实例学习笔记(二.gstreamer 的 Element)

    对程序员来说,GStreamer 中最重要的一个概念就是 GstElement 对象.该对象是构建一个媒体管道的基本块.所有上层(high-level)部件都源自GstElement对象.任何一个解码 ...

  7. [Openwrt 项目开发笔记]:Samba服务&vsFTP服务(四)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们讲述了如何在路由器上挂载U盘,以 ...

  8. gstreamer应用笔记

    gstreamer官网 https://gstreamer.freedesktop.org/ 应用手册 https://gstreamer.freedesktop.org/documentation/ ...

  9. [openwrt 项目开发笔记]: 传送门

    “Openwrt 项目开发笔记”系列传送门: [Openwrt 项目开发笔记]:Openwrt平台搭建(一) (2014-07-11 00:11) [Openwrt 项目开发笔记]:Openwrt平台 ...

随机推荐

  1. 【转】SQL索引一步到位

    原文:http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.html SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章 ...

  2. 【java基础 7】java内存区域分析及常见异常

    本篇博客,主要是读书笔记总结,还有就是结合培训分享的总结,没有太多的技术含量! java 的自动内存管理机制,使得程序员不用为每一个new惭怍的对象写配对的delete/ free代码(回想起C++的 ...

  3. 九度oj 题目1125:大整数的因子

    题目描述: 已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k. 输入: 若干个非负整数c,c的位数<=30每行一个c,当c=-1时中止 ( ...

  4. MySQL5.7多源复制实践

    MySQL5.7开始新增多源复制功能,即允许一个salve同时复制多个主库的事务,slave会创建通往每个主库的管道.多源复制在应用来自多个源的事务的时候不会对有冲突的事务进行检测. 配置实现 主库支 ...

  5. 【bzoj2597】[Wc2007]剪刀石头布 动态加边费用流

    题目描述 在一些一对一游戏的比赛(如下棋.乒乓球和羽毛球的单打)中,我们经常会遇到A胜过B,B胜过C而C又胜过A的有趣情况,不妨形象的称之为剪刀石头布情况.有的时候,无聊的人们会津津乐道于统计有多少这 ...

  6. 【Luogu】P3384主席树模板(主席树查询K小数)

    YEAH!我也是一个AC主席树模板的人了! 其实是个半吊子 我将尽量详细的讲出我的想法. 主席树太难,我们先搞普通线段树好了 普通线段树怎么做?我的想法是查询K次最小值,每次查完把查的数改成INF,查 ...

  7. P1681 最大正方形II (动态规划)

    题目背景 忙完了学校的事,v神终于可以做他的"正事":陪女朋友散步.一天,他和女朋友走着走着,不知不觉就来到了一个千里无烟的地方.v神正要往回走,如发现了一块牌子,牌子上有有一行小 ...

  8. Min(BZOJ 1441)

    题目描述 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小 输入 第一行给出数字N,代表有N个数 下面一行给出N个数 输出 S ...

  9. 通过css将元素固定在左下角

    position:fixed; bottom:0; left:0;

  10. PSO(Thepopularity-similarity-oplimization) modol

    PSO(Thepopularity-similarity-oplimization) modol 在这篇文章里,我们试图将社交关系构成的网络结构从纷繁复杂的具体场景.细节条件中剥离出来,单单从个体间连 ...