博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
openwrt gstreamer实例学习笔记(四. gstreamer Bins)
阅读量:4653 次
发布时间:2019-06-09

本文共 1882 字,大约阅读时间需要 6 分钟。

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,如使用等。当然也有一些更便利的函数来创建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解释器一起被创建。你可从 得到更多关于创建自定义Bins的信息。中的playbin与decodebin元件都是自定义箱柜的例子。

 

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

你可能感兴趣的文章
好吧,如果一定要RESTFUL的DJANGO
查看>>
Why ngx-uploader doesn't like to cooperate with .net core 2.x?
查看>>
iOS-Senior20-Map定位
查看>>
Apache本地环境部署
查看>>
C#继承与多态
查看>>
关于面试总结2-SQL学生表
查看>>
Python小技巧
查看>>
fragment Activity之间传值的方法 之------------接口回调
查看>>
OSS研究
查看>>
Leetcode 116 Populating Next Right Pointers in Each Node
查看>>
Angular 1.63 双向数据绑定 通过 $http 发送数据
查看>>
php以及前端的一些小小的技术要点
查看>>
【Android实战开发】3G技术和Android发展简介
查看>>
【精解】EOS标准货币体系与源码实现分析
查看>>
AFore.NET 翻译
查看>>
[大牛翻译系列]Hadoop(8)MapReduce 性能调优:性能测量(Measuring)
查看>>
What to do when the Chinese Characters are messed up when extracting from zip archive?
查看>>
SQLYog快捷键大全
查看>>
(转载)DLL动态链接库编程入门之三:MFC规则DLL(上)
查看>>
隐藏Nginx或Apache以及PHP的版本号的方法
查看>>