openwrt gstreamer实例学习笔记(四. gstreamer Bins)
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)的更多相关文章
- openwrt gstreamer实例学习笔记(一.初始化gstreamer)
GStreamer 是一个非常强大而且通用的流媒体应用程序框架. GStreamer所具备的很多优点来源于其框架的模块化: GStreamer能够无缝的合并新的插件. 但是, 由于追求模块化和高效率, ...
- openwrt gstreamer实例学习笔记(六. gstreamer Pads及其功能)
一:概述 如我们在Elements一章中看到的那样,Pads是element对外的接口.数据流从一个element的source pad到另一个element的sink pad.pads的功能(cap ...
- openwrt gstreamer实例学习笔记(三.深入了解gstreamer 的 Element)
在前面的部分,我们简要介绍过 GstElementFactory 可以用来创建一个element的实例,但是GstElementFactory不仅仅只能做这件事,GstElementFactory作为 ...
- openwrt gstreamer实例学习笔记(七. gstreamer 缓冲区(Buffers)和事件(Events))
1)概述 管道的数据流由一组缓冲区和事件组成,缓冲区包括实际的管道数据,事件包括控制信息,如寻找信息和流的终止信号.所有这些数据流在运行的时候自动的流过管道. 2) 缓冲区(Buffers) 缓冲区包 ...
- openwrt gstreamer实例学习笔记(五. gstreamer BUS)
1)概述 BUS(总线) 是一个简单的系统,它采用自己的线程机制将一个管道线程的消息分发到一个应用程序当中.总线的优势是:当使用GStreamer的时候,应用程序不需要线程识别,即便GStreamer ...
- openwrt gstreamer实例学习笔记(二.gstreamer 的 Element)
对程序员来说,GStreamer 中最重要的一个概念就是 GstElement 对象.该对象是构建一个媒体管道的基本块.所有上层(high-level)部件都源自GstElement对象.任何一个解码 ...
- [Openwrt 项目开发笔记]:Samba服务&vsFTP服务(四)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们讲述了如何在路由器上挂载U盘,以 ...
- gstreamer应用笔记
gstreamer官网 https://gstreamer.freedesktop.org/ 应用手册 https://gstreamer.freedesktop.org/documentation/ ...
- [openwrt 项目开发笔记]: 传送门
“Openwrt 项目开发笔记”系列传送门: [Openwrt 项目开发笔记]:Openwrt平台搭建(一) (2014-07-11 00:11) [Openwrt 项目开发笔记]:Openwrt平台 ...
随机推荐
- iphone丢了以后发现关机了怎么办?
有好几个办法都可以尝试一下: 1. "ICCID法",但目前这个办法只能寻找苹果iPhone手机,而对于安卓手机,则不能采取相同的方法进行寻找.之所以能采取该方法寻找苹果 iPho ...
- GT使用说明
GT文档:https://gt.qq.com/docs.html GT Android版的详细使用手册: https://gt.qq.com/docs/a/GTAndroidUserGuide.pdf
- python+selenium 鼠标事件操作
一.前言 除了可以使用 click( ) 来模拟鼠标的单击操作,现在Web产品中还提供了更丰富的鼠标交互方式,例如鼠标右键.双击.悬停.拖动等功能,在WebDriver中,将这些关于鼠标操作的方法都封 ...
- 【JavaScript 10—应用总结】:连缀
一.总体概述 1.1,什么叫连缀 所谓连缀,最简单的理解就是一句话同时设置一个或多个节点两个或两个以上的操作.比如: <span style="font-size:18px;" ...
- C# 方法冒号this的用法
public Class1(string host, int port, string password = null):this() { this.Host=host; this.Port=port ...
- 【bzoj4605】崂山白花蛇草水 权值线段树套KD-tree
题目描述 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实力,他轻松地进了山东省省队,现在便是他履行诺言的时候了.蒟蒻Bob ...
- 暑假训练Round1——G: Hkhv的水题之二(字符串的最小表示)
Problem 1057: Hkhv的水题之二 Time Limits: 1000 MS Memory Limits: 65536 KB 64-bit interger IO format: ...
- docker命令解析
1.docker run --name lllllll -d -p 8080:8080 -p 9000:9000 镜像id 将docker8080端口映射到服务器的8080端口 ...
- 窗口(codevs 4373)
题目描述 Description 给你一个长度为N的数组,一个长为K的滑动的窗体从最左移至最右端,你只能见到窗口的K个数,每次窗体向右移动一位,如下表: Window position Min val ...
- COdevs 2823 锁妖塔
2823 锁妖塔 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 琐妖塔会在一会儿后倒塌.大量妖魔涌出塔去,塔内的楼梯都挤满了人(哦 ...