GStreamer应用程序——Buffers and Events

Buffers and Events(缓冲区和事件)

流经管道的数据由缓冲区和事件的组合组成。缓冲区包含实际的媒体数据。事件包含控制信息,例如查找信息和流结束通知器。所有这些都将在管道运行时自动流经管道。本章主要是向您解释这个概念;您不需要为此做任何事情。

Buffers 

缓冲区包含将流经您创建的管道的数据。源元素通常会创建一个新缓冲区,并通过pad将其传递到链中的下一个元素。当使用GStreamer基础架构创建媒体管道时,您不必自己处理缓冲区;元素会为您做这件事。

除其他外,缓冲区包括:

  • 指向内存对象的指针。内存对象封装了内存中的一个区域。

  • 缓冲区的时间戳。

  • 指示有多少元素正在使用此缓冲区的重新计数。当没有元素引用缓冲区时,此重新计数将用于销毁缓冲区。

  • 缓冲区标志。

简单的例子是创建一个缓冲区,分配内存,放入数据,并传递给下一个元素。该元素读取数据,做一些事情(比如创建一个新缓冲区并解码到其中),并取消引用缓冲区。这会导致数据被释放,缓冲区被销毁。典型的视频或音频解码器是这样工作的。

不过,还有更复杂的场景。元素可以就地修改缓冲区,即不分配新的缓冲区。元素还可以写入硬件内存(例如来自视频捕获源)或从X服务器分配的内存(使用XShm)。缓冲区可以是只读的,等等。

Events

事件是控制信息,与缓冲区一起在管道中向上和向下发送。向下传递事件通知流状态的其他元素。可能的事件包括查找、刷新、流结束通知等。向上传递事件既用于应用程序-元素交互,也用于元素-元素交互,以请求流状态的更改,例如查找。对于应用程序,只有向上传递事件是重要的。向下传递事件只是为了更完整地了解数据概念而解释的。

由于大多数应用程序以时间单位寻道,我们下面的示例也这样做:

static void
seek_to_time (GstElement *element,
          guint64     time_ns)
{
  GstEvent *event;

  event = gst_event_new_seek (1.0, GST_FORMAT_TIME,
                  GST_SEEK_FLAG_NONE,
                  GST_SEEK_METHOD_SET, time_ns,
                  GST_SEEK_TYPE_NONE, G_GUINT64_CONSTANT (0));
  gst_element_send_event (element, event);
}

函数gst_element_seek ()是一个快捷方式 主要是为了展示这一切是如何运作的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值