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元件都是自定义箱柜的例子。

转载于:https://www.cnblogs.com/xuyh/p/4562789.html

openwrt gstreamer实例学习笔记(四. gstreamer Bins)相关推荐

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

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

  2. gstreamer学习笔记---编码videoencoder

      既上一节的<gstreamer学习笔记-v4l2src>之后,我们这一次,学习gstreamer的编码流程.稍微了解gstreamer的小伙伴都知道,gstreamer具备强大的音视频 ...

  3. Gstreamer学习笔记(4):pad定义、连接、流动

    pad相当于element的接口,各个element就是通过pad连接进行传输数据,同时pad会通过caps限制特定的数据类型通过,只有当两个pad的caps数据类型一致时才可以建立连接.那么pad在 ...

  4. gstreamer学习笔记---pad定义、连接、流动

      pad相当于element的接口,各个element就是通过pad连接进行传输数据,同时pad会通过caps限制特定的数据类型通过,只有当两个pad的caps数据类型一致时才可以建立连接.那么pa ...

  5. gstreamer学习笔记---v4l2src

      v4l2src element源码位于gst-plugins-good-xxx/sys/v4l2/gstv4l2src.c,v4l2src主要是从v4l2设备获取视频数据的element,基于v4 ...

  6. gstreamer应用笔记

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

  7. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  8. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  9. MSSQL编程笔记四 解决count distinct多个字段的方法

    MSSQL编程笔记四 解决count distinct多个字段的方法 参考文章: (1)MSSQL编程笔记四 解决count distinct多个字段的方法 (2)https://www.cnblog ...

最新文章

  1. 新手入门必看:使用Selenium进行自动化测试
  2. python自动选取空闲gpu
  3. 图的基本算法实现(邻接矩阵与邻接表两种方法)
  4. HTML中label的两种使用方法
  5. js按位运算符及其妙用
  6. desktop docker 无法卸载_docker,生信人的福音!
  7. Build 2016,你可能忽视的几个细节
  8. Golang笔记——反射
  9. RNN隐藏层的两种计算方法GRU和LSTM
  10. oracle optimizermode,Oracle OPTIMIZER_MODE参数
  11. C#winform省市县联动,以及有的县是空值时显示异常的处理
  12. 大学 计算机 试题,【分享】《大学计算机基础》试题题库及答案 ~~~~~~~~~~~...
  13. Git以及Git小乌龟的安装使用
  14. c语言酒店信息管理实训作业,c语言实训报告宿舍管理系统.docx
  15. 从零学会Photoshop经典教程300集
  16. DELL台式机安装Centos7无法正常展示图形化安装界面
  17. linux模拟蓝牙播放器,为 Ubuntu Linux 开启蓝牙 APTX / LDAC 支持
  18. POJ3737UmBasketella
  19. linux看视频插件,Linux系统下安装Adobe Flash Player插件观播放视频
  20. 计算机高中竞赛自主招生,自主招生必备常识:高校认可的各类竞赛

热门文章

  1. Mr.J--C语言学习Errors:LNK2019
  2. volatile学习
  3. Java多线程--对象的可见性
  4. 软件开发生命周期模型
  5. 原生node创建路由的分层
  6. jQuery初识 - jQuery案例练习
  7. Python_urllib
  8. 正则表达式捕获分组和非捕获分组及用法
  9. 几种简单的社交网站的标志按钮
  10. 【ES6】let命令、const命令、解构赋值