首页 > 其他分享 >gstreamer教程(6)——构建应用之Bin的使用

gstreamer教程(6)——构建应用之Bin的使用

时间:2024-08-29 10:38:36浏览次数:10  
标签:Bin bin 教程 元素 gst gstreamer pipeline element source

Bin:

  bin 是一个容器元素。您可以将 element 元素添加到 bin 中。由于 bin 本身就是一个元素,因此 bin 可以像任何其他元素一样处理。因此,上一章 (element)的操作也适用于 bin。

什么是bin:

  bin 允许您将一组链接起来的元素合并为一个逻辑元素。您不再处理每一个元素,而只处理一个 bin 元素。我们会发现这非常强大,当你想要构建一个复杂的 pipeline 管道时,你可以将 pipeline 管道分解成一个个小一点的块。

  bin 还将管理其中包含的元素。它将对其内部的所有元素执行状态变更,以及收集和转发总线消息。

  GStreamer 程序员可以使用一种特殊类型的 bin:

  • pipeline:管理所包含元素的同步和总线消息的通用容器。顶层 bin 必须是一个 pipeline,因此每个应用程序至少需要一个 pipeline。

创建 bin:

  bin 的创建方式与其他元素的创建方式相同,即使用 element factory 元素工厂。还有一些方便的函数可用(gst_bin_new() 和 gst_pipeline_new() )。可以使用 gst_bin_add() 和 gst_bin_remove()将元素添加到 bin 或从 bin 中删除元素 。请注意,您添加元素的 bin 将获得该元素的所有权。如果销毁 bin,则元素将随之取消引用。如果从 bin 中删除元素,它也将自动取消引用。

  basic-example-8.c

#include <stdio.h>
#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_bin_new ("my_bin");
    source = gst_element_factory_make ("fakesrc", "source");
    sink = gst_element_factory_make ("fakesink", "sink");

    /* First add the elements to the bin */
    gst_bin_add_many (GST_BIN (bin), source, sink, NULL);
    /* add the bin to the pipeline */
    gst_bin_add (GST_BIN (pipeline), bin);

    /* link the elements */
    gst_element_link (source, sink);

    [..]
}

  该示例并不是完整代码,不能运行,主要用于理解pipeline和bin的创建,和向bin中添加element元素。

  有多种函数可用于在 bin 中查找元素。最常用的是 gst_bin_get_by_name() 和 gst_bin_get_by_interface() 。您还可以使用函数 gst_bin_iterate_elements() 迭代查找 bin 包含的所有元素。有关详细信息,请参阅 GstBin 的 API 参考。

自定义 bin:

  应用程序程序员可以创建包含元素的自定义 bin 来执行特定任务。例如,这允许您仅使用以下代码行编写 Ogg/Vorbis 解码器:

  basic-example-9.c

#include <stdio.h>
#include <gst/gst.h>
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);
    [..]
}

  (当然,这是一个愚蠢的例子,已经存在一个更强大、更通用的自定义 bin,例如:playbin 元素。)

   可以使用插件或从应用程序创建自定义 bin。您可以在 Plugin Writer's Guide 中找到有关创建自定义 bin 的更多信息

  此类自定义 bin 的示例是 gst-plugins-base 中的 playbin 和 uridecodebin 元素。

bin管理其子项的状态:

  bin 管理其中包含的所有元素的状态。如果使用 gst_element_set_state() 将 bin(或管道,这是一种特殊的顶级 bin)设置为某个目标状态,它将确保其中包含的所有元素都将设置为此状态。这意味着通常只需要设置顶级 pipeline 管道的状态即可启动或关闭 pipeline 管道。

  bin 将对其从 sink 元素到 source 元素的所有子元素执行状态更改,顺序也是先设置 sink,再设置 source。这可确保下游 element 元素在上游 element 元素被置于 PAUSED 或 PLAYING 状态时准备好接收数据。同样在关闭时,sink 元素将首先设置为 READY 或 NULL,这会使上游 element 元素收到 FLUSHING 错误,会让 element 元素被设置为 READY 或 NULL 状态之前就停止流式处理线程了。

  但请注意,如果将元素添加到已经在运行的 bin 或 pipeline 中,例如从 “pad-added” 信号回调中,element 元素状态不会自动与添加到的 bin 或 pipeline 的当前状态或目标状态保持一致。相反,当你向已经运行的pipeline中添加元素时,你需要使用 gst_element_set_state() 或 gst_element_sync_state_with_parent() 自行将其设置为所需的目标状态。

标签:Bin,bin,教程,元素,gst,gstreamer,pipeline,element,source
From: https://www.cnblogs.com/a4234613/p/18386121

相关文章

  • Git使用教程(小白也能看懂)
    git的使用教程(学习和工作中都能用到)1、所需工具gitbash1)安装gitbash官网:https://git-scm.com/download/win2)在文件夹空白处鼠标右键若出现上图说明安装成功2、使用1)我们想要克隆一个新项目1.1进入一个空文件夹右键点击OpenGitBashhere输入以下命令本......
  • 【MySQL】binlog常见问题
    https://mp.weixin.qq.com/s/n9vWkee2N-gpXpOHIYtRJg关于binlog,这里常见的问题如下:binlog是什么binlog的配置和查看binlog的类型binlog如何数据恢复binlog是逻辑日志还是物理日志binlog的作用binlog是什么binlo(binarylog),是MySql的二进制日志文件,这个文件记录了我们所......
  • DevExpress WinForms中文教程:Data Grid - 如何设置条件格式?
    本文介绍DevExpressWinForms中的Excel样式的条件格式设置,您可以了解最终用户可用的特性,了解可用的格式类型以及如何在设计时或在代码中设置条件格式。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构......
  • 最简最速!C++版OpenCV安装配置教程Win/Mac!!!
    Clion+OpenCV(C++版)开发环境配置教程Win/Mac        平时在学习和比赛的时候都是使用的Python版本的OpenCV,最近遇到了一个项目使用的上位机性能有限于是决定视觉方面使用C++的OpenCV来节约上位机资源提高运行的速度,在查阅了网上的各种资料后发现这些资料参差不齐......
  • Clion+OpenCV(C++版)开发环境配置教程WinMac
    Clion+OpenCV(C++版)开发环境配置教程Win/Mac        平时在学习和比赛的时候都是使用的Python版本的OpenCV,最近遇到了一个项目使用的上位机性能有限于是决定视觉方面使用C++的OpenCV来节约上位机资源提高运行的速度,在查阅了网上的各种资料后发现这些资料参差不齐有些博......
  • 2024年最新版Typora免费使用教程心得
    在数字化时代,写作已成为我们日常沟通、知识分享的重要手段。然而,繁琐的排版格式常常让人望而却步。幸运的是,Markdown编辑器以其简洁的语法和高效的排版功能,为我们带来了福音。Typora是一款功能强大的文本编辑器,它采用所见即所得的编辑方式,能够让用户快速地编辑各种文本格式,包括Mar......
  • Qdrant官方快速入门和教程简化版
    Qdrant官方快速入门和教程简化版说明:首次发表日期:2024-08-28Qdrant官方文档:https://qdrant.tech/documentation/关于阅读Qdrant一小部分的官方文档,并使用中文简化记录下,更多请阅读官方文档。使用Docker本地部署Qdrantdockerpullqdrant/qdrantdockerrun-d-p6333:6......
  • WPF 现代化开发教程:使用 Microsoft.Extensions.Hosting 和 CommunityToolkit.Mvvm
    介绍随着WPF应用程序的复杂性增加,使用现代化的开发工具和模式变得尤为重要。本教程将指导你如何使用Microsoft.Extensions.Hosting和CommunityToolkit.Mvvm来开发一个现代化的WPF应用程序。这些工具为开发者提供了依赖注入、应用程序生命周期管理、MVVM模式支持等功能。先决......
  • 设计必备Adobe Photoshop ps2023 最新版本v24.5 安装和下载教程
    从Photoshop开始,一场惊艳的视觉盛宴就此展开。无论是社交媒体帖子还是照片修饰,设计横幅还是精美网站,日常影像编辑还是重塑现实,Photoshop都能让创作更上一层楼。Photoshop24.5带来了全新的体验,让你的创作之旅更加轻松愉快。调整预设,为你的图像增添戏剧效果。这个功能让你只......
  • Lightroom 2023软件下载LCR2023最新版下载安装教程分享
    Lightroom是Adobe公司推出的专业图像管理和非破坏性编辑软件。它具有便捷的图像浏览、快速的原始格式支持、强大的批量编辑能力等优点。AdobeLightroom是一款图像处理软件,主要针对摄影师的照片管理和后期需求。Lightroom提供了专业级别的硬盘照片分类系统,可以自定义分类......