Kernel-Zhang的个人主页

gstreamer插件编写指南:服务质量(QoS)

GStreamer 中的服务质量是指测量和调整流水线的实时性能。实时性能总是相对于流水线时钟来测量的,通常发生在汇元素根据时钟同步缓冲区时。 当缓冲区到达汇的时间较晚,即缓冲区的运行时间小于时钟的运行时间时,我们就会说流水线出现了服务质量问题。以下是几个可能的原因: CPU 负载高,CPU 没有足够的能力处理数据流,导致缓冲区延迟到达汇。 网络问题 ...

gstreamer插件编写指南:时钟

播放复杂媒体时,每个声音和视频样本都必须在特定时间按照特定顺序播放。为此,GStreamer 提供了同步机制。 时钟 GStreamer 中的时间定义为特定GstClock对象通过gst_clock_get_time () 方法返回的值。 在典型的计算机中,有许多时间源可以用作时间源,例如系统时间、声卡、CPU 性能计数器……因此,GStreamer 中有许多GstClock实现。时钟...

gstreamer插件编写指南:事件:搜索、导航及更多

事件类型多种多样,但在流水线中的传播方式却只有两种:下游或上游。了解这两种方式的工作原理非常重要,因为如果流水线中的某个元素没有正确处理这些事件,管道的整个事件系统就会崩溃。在此,我们将尝试解释这些方法的工作原理,以及元素应如何实现这些方法。 下游事件 下游事件通过汇衬底的事件处理函数接收,该处理函数在创建 pad 时使用gst_pad_set_event_function ()设置。 ...

gstreamer插件编写指南:媒体类型和属性

有大量的媒体类型可用于在元素之间传递数据。事实上,每个新定义的元素都可以使用一种新的数据格式(不过,除非至少有一个其他元素能识别这种格式,否则这种格式将毫无用处,因为没有任何元素能与之链接)。 为了让媒体类型发挥作用,并让自动插入器等系统正常运行,所有元素必须就媒体类型定义以及每种媒体类型所需的属性达成一致。GStreamer 框架本身只是提供了定义媒体类型和参数的能力,但并没有固定媒体类...

gstreamer插件编写指南:内存分配

内存分配和管理是多媒体领域非常重要的课题。高清视频存储一帧图像需要很多兆字节。重要的是尽可能重复使用内存,而不是不断地分配和释放内存。 多媒体系统通常使用 DSP 或 GPU 等专用芯片来执行繁重的工作(尤其是视频)。这些专用芯片通常对运行内存和访问内存的方式有严格的要求。 本章将介绍 GStreamer 插件可用的内存管理功能。我们将首先讨论管理内存访问的低级GstMemory对象,然...

gstreamer插件编写指南:能力集协商

能力集协商是在元素之间找到一种它们可以处理的媒体格式(GstCaps)的行为。在大多数情况下,GStreamer 中的这一过程能为整个流水线找到最佳解决方案。在本节中,我们将解释其工作原理。 能力集协商基础知识 在 GStreamer 中,媒体格式的协商始终遵循以下简单规则: 下游元素在其汇衬底上建议一种格式,并将该建议置于在汇衬底上执行的 CAPS 查询结果中。 另请...

gstreamer插件编写指南:不同的调度模式

衬底的调度模式定义了从衬底(源)获取数据或向衬底(汇)提供数据的方式。GStreamer 可以在两种调度模式下运行,即推模式和拉模式。GStreamer 支持任何调度模式下的衬底元素,但并非所有衬底都必须在同一模式下运行。 到目前为止,我们只讨论了_chain() 操作的元素,即在其汇衬底(sink pad)上设置了链功能,并在其源衬底上推缓冲区的元素。我们称之为推送模式,是因为对等元素会...

gstreamer插件编写指南:请求型和暂态型衬底

到目前为止,我们只讨论了始终可用的衬底,但也有一些衬底仅在某些情况下创建,或者仅在应用程序请求衬底时创建。前者称为“暂态型”,后者称为“请求型”。在 pad 的模板中可以看到 pad 的可用性(始终、暂态或请求)。本章将讨论这两种垫何时有用、如何创建以及何时废弃。 暂态型衬底 暂态型衬底是在特定条件下创建的衬底,但并非在所有情况下都会创建。这主要取决于流的内容:解流器通常会解析流头,决定...

gstreamer插件编写指南:高级概念

现在,你应该能够创建可以接收和发送数据的基本过滤元素了。这就是 GStreamer 所代表的简单模式。但 GStreamer 能做的远不止这些!本章将讨论各种高级主题,如调度、特殊 pad 类型、时钟、事件、接口、标记等。这些主题是使 GStreamer 在应用程序中如此易于使用的 “糖”。 该部分由以下几个部分构成: 请求型和暂态型衬底 不同的调度模式 能力集协商 内存分配 媒...

gstreamer插件编写指南:构建测试应用程序

通常,您希望在尽可能小的环境中测试新编写的插件。通常,gst-launch-1.0是测试插件的第一步。如果没有将插件安装在 GStreamer 可以搜索到的目录中,则需要设置插件路径。 可以将 GST_PLUGIN_PATH 设置为包含插件的目录,或者使用命令行选项 --gst-plugin-path 来设置。如果你的插件是基于 gst-plugin 模板开发的,那么看起来就像gst-lau...