gstreamer插件编写指南:信号
GObject 信号可用于通知应用程序该对象的特定事件。但是请注意,应用程序需要了解信号及其含义,因此如果您正在寻找一种应用程序-元素交互的通用方法,信号可能不是您要找的。不过,在许多情况下,信号可能非常有用。有关信号的所有内部信息,请参阅GObject 文档。
GObject 信号可用于通知应用程序该对象的特定事件。但是请注意,应用程序需要了解信号及其含义,因此如果您正在寻找一种应用程序-元素交互的通用方法,信号可能不是您要找的。不过,在许多情况下,信号可能非常有用。有关信号的所有内部信息,请参阅GObject 文档。
控制元素行为的最主要和最重要的方式是通过 GObject 属性。GObject 属性是在_class_init ()函数中定义的。元素可选择实现_get_property ()和_set_property ()函数。如果应用程序更改或请求某个属性的值,这些函数将收到通知,然后可以填入该属性的值,或采取必要的措施使该属性的值在内部发生变化。 您可能还想保留一个实例变量,其中包含您在 get ...
状态描述了元素实例是否初始化、是否准备好传输数据以及当前是否正在处理数据。 GStreamer 中定义了四种状态: GST_STATE_NULL GST_STATE_READY GST_STATE_PAUSED GST_STATE_PLAYING 从现在起,它们将被简称为 “NULL”、”READY”、”...
通过查询功能,您的元素将收到必须回复的查询。这些查询包括位置、持续时间,也包括元素支持的格式和调度模式。 查询既可以向上游也可以向下游发送,因此您可以在汇衬底上接收查询,也可以在源衬底上接收查询。 下面是一个非常简单的查询函数,我们将其安装在元素的源衬底上。 static gboolean gst_my_filter_src_query (GstPad *pad, ...
事件功能可通知您数据流中发生的特殊事件(如衬底、流结束、新段、标记等)。事件既可在上游也可在下游传播,因此您既可以在汇衬底上接收事件,也可以在源衬底上接收事件。 下面是一个非常简单的事件函数,我们将其安装在元素的汇衬底上。 static gboolean gst_my_filter_sink_event (GstPad *pad, ...
链函数是进行所有数据处理的函数。在简单过滤器的情况下,_chain ()函数大多是线性函数——因此每输入一个缓冲区,也会输出一个缓冲区。下面是一个非常简单的链函数实现: static GstFlowReturn gst_my_filter_chain (GstPad *pad, GstObject *...
如前所述,pad 是数据进出元素的端口,因此在元素创建过程中非常重要。在模板代码中,我们已经看到静态 pad 模板是如何在元素类中注册 pad 模板的。在这里,我们将看到如何创建实际的元素,如何使用_event () 函数为特定格式进行配置,以及如何注册函数让数据在元素中流动。 在元素_init ()函数中,通过在_class_init ()函数中向元素类注册的 pad 模板创建 pad。...
在本章中,你将学习如何为一个新插件构建最基本的代码。从零开始,你将了解如何获取 GStreamer 模板源代码。然后,你将学习如何使用一些基本工具来复制和修改模板插件,以创建一个新插件。如果你能按照这里的示例进行操作,那么在本章结束时,你将拥有一个可以编译并在 GStreamer 应用程序中使用的功能性音频过滤器插件。 获取 GStreamer 插件模板 目前有两种方法为 GStream...
现在,你已经准备好学习如何制作插件了。在本部分指南中,你将学习如何应用基本的 GStreamer 编程概念来编写一个简单的插件。本指南的前几部分没有明确的示例代码,可能会让人觉得有些抽象和难以理解。相比之下,本部分将通过开发一个名为 “MyFilter “的音频过滤器插件示例,同时介绍应用程序和代码。 示例滤波器元素一开始只有一个输入衬底和一个输出衬底。起初,过滤器只是简单地将媒体和事件数...
导言 GStreamer 是一个功能强大、用途广泛的框架,可用于创建流媒体应用程序。GStreamer 框架的许多优点都来自于它的模块化:GStreamer 可以无缝集成新的插件模块。但是,由于模块化和强大的功能往往是以更高的复杂性为代价的(例如CORBA),因此编写新的插件并非易事。 本指南旨在帮助你了解 GStreamer 框架,以便开发新插件来扩展现有功能。本指南通过开发一个用 C...