gstreamer教程(2)——gstreamer设计原则

设计原则:

  GStreamer 提供了一个干净的接口:

  • 应用程序程序员:给想要构建媒体处理流(media pipeline)的应用程序程序员。可以使用一组广泛的强大工具来创建媒体处理流(media pipeline),而无需编写任何代码。执行复杂的媒体操作变得非常容易。

  • 插件程序员:为插件程序员提供了一个简洁明了的 API 来创建自包含的插件。集成了广泛的调试和跟踪机制。GStreamer 还附带了一组广泛的真实插件作为示例。

面向对象:

  GStreamer 遵循 GLib 2.0 对象模型 GObject。熟悉 GLib 2.0 或 GTK+ 的程序员会熟悉 GStreamer。

  GStreamer 使用信号和对象属性的机制。

  所有对象都可以在运行时查询其各种属性和功能。

  GStreamer 打算在编程方法上与 GTK+ 相似。这适用于对象模型、对象的所有权、引用计数等。

扩展:

  所有 GStreamer 对象都可以使用 GObject 继承方法进行扩展。

  所有插件都是动态加载的,可以独立扩展和升级。

允许仅限二进制的插件:

  插件是在运行时加载的共享库。由于插件的所有属性都可以使用 GObject 属性进行设置,因此无需(实际上也没有办法)为插件安装任何头文件。

  我们特别注意使插件完全自包含。插件的所有相关方面都可以在运行时查询。

高性能:

  通过以下方式获得高性能:

  • 使用 GLib 的 GSlice 分配器
  • 插件之间的极轻量级链接。数据可以以最小的开销在管道中传输。典型管道里插件之间的数据传递仅需要指针的间接引用。
  • 提供一种直接作用于目标内存的机制。例如,插件可以直接写入 X 服务器的共享内存空间。缓冲区还可以指向任意内存,例如声卡的内部硬件缓冲区。
  • 引用技术 和 写时拷贝 最大限度地减少了 memcpy 的使用。Sub-buffer 可以有效地将 buffer 拆分为可管理的部分。
  • 专用的流式处理线程,其调度由内核处理。
  • 允许使用专用插件进行硬件加速。
  • 使用具有插件规格的插件注册表,以便可以使插件延迟到实际使用再加载。

清理核心/插件分离:

   GStreamer 的核心本质上是与媒体无关的。它只知道字节和块,并且只包含基本元素。GStreamer 的核心甚至具有足够的功能来实现低级系统工具,如 cp。

  所有媒体处理功能都由核心外部的插件提供。这些告诉核心如何处理特定类型的媒体。

为编解码器实验提供框架:

  GStreamer 还希望成为一个简单的框架,编解码器开发人员可以在其中试验不同的算法,从而加快开放和自由多媒体编解码器的开发,例如由 Xiph.Org Foundation 开发的编解码器(例如 Theora 和 Vorbis)。

posted @ 2024-08-27 16:02  风吹大风车  阅读(25)  评论(0编辑  收藏  举报