英文原文:https://gstreamer.freedesktop.org/documentation/plugin-development/introduction/preface.html

Gstreamer是什么?

Gstreamer是一个创建流媒体应用的框架。基本的设计源自于奥立冈州立大学商学研究院关于视频流的研究,同时也引进了DirectShow的思想。

基于Gstreamer的开发框架,使得编写一个包含各种类型流媒体的应用成为了可能。Gstreamer的设计目的是为了能够更容易地编写一个处理音频及视频等的多媒体应用程序。它不局限于音频和视频,还能处理任何类型的数据流。Gstreamer中pipeline的设计是为了使得(所应用过滤器导致的)开销最小。这使得Gstreamer成为对设计延时和性能要求高的高端音频应用的一个很好的框架。

最明显的一个关于Gstreamer的应用是构建一个媒体播放器。Gstreamer已经包含了一些构建媒体播放器所需要的组件,这些组件支持非常多的格式,如MP3, Ogg/Vorbis, MPEG-1/2, AVI, Quiktime, mod等等。然而,Gstreamer并不仅仅是一个媒体播放器。它的主要优势在于可插拔式组件,此组件可混合并适配到任意的pipeline中,使得其能够写出一个完备的可编辑式应用。

基于插件的Gstreamer框架将提供多种编解码及其它功能。插件能够被链接到pipeline中,而pipeline定义了数据的流向。

Gstreamer的核心功能是提供一个框架,此框架可加入插件,定义了数据流向,同步机制及媒体类型处理/接洽。同时,它还提供了用于编写应用程序所需的API。

谁应该阅读此教程

此教程阐释了如何为Gstreamer写一个新的模块。以下几种类型的开发人员需要阅读此教程:

  • 任何想通过新的方式来处理Gstreamer中数据的人。如团队中的某位开发人员,想要创建一个新的数据格式转换器,一个新的可视化工具,或一个新的编解码器。
  • 任何想让Gstreamer支持新的输入或输出设备的人。如团队中的某位开发人员,想让Gstreamer支持一个新的视频输出,从一个数字摄像头或特殊的麦克风中读取数据等。
  • 任何想通过任何方式扩展Gstreamer的人。在了解插件系统的局限性之前,你需要理解插件系统是如何工作的。同时,当你阅读了此教程,你可能会惊讶插件所能做的事。

如果你仅仅想使用Gstreamer中已存在的功能,或者你只是想使用应用了Gstreamer的应用程序,此教程并不适合你。如果你只想用Gstreamer中已存在的插件来编写应用程序—Gstreamer中已经包含了许多插件—你可能想要阅读的是 Gstreamer应用开发手册。如果你只想获得一个Gstreamer应用程序的帮助,那你应该查看用户手册中对应的那部分。

读前准备

此教程假设你已经对Gstreamer基本的工作方式有了一定的了解。对于Gstreamer的编程概念,你可能需要先阅读Gstreamer应用开发手册,同时在Gstreamer网页上查看其它相关的教程。

为了能够理解此教程,你应该需要拥有基本的C语言知识。由于 Gstreamer遵守GObject编程方式,此教程也假设你了解基本的GObject编程。你也可能想阅读Eric Harlow的书籍<<Developing Linux Applications with GTK+ and GDK>>。

此教程的结构

为了帮助你导读此教程,此教程被分成了几个大的部分。每个部分处理了Gstreamer插件开发中的特定部分。此教程的各个部分将以以下的顺序进行展示:

  • 构建一个插件 - 通过讲解一个音频过滤器,介绍插件结构。

此部分包含了你构建一个插件需要的所有步骤,如在Gstreamer中注册一个Element并设置,使其能够接收及发送数据给与其连接的Element。此介绍一开始将给出一个生成基本的结构并注册一个Element的例子(教程:Constructing the Boilerplate)。接着,你将学会如何编写代码来获得一个基本的过滤插件(教程:Specifying the pads,The chain function and What are states?)。

然后,我们将介绍一些GObject是如何使得应用程序中Element可配置的概念,以及如何进行应用程序与Element的交互(教程:Adding Properties and Signals)。接着,你将学会构建一个快速测试应用程序用于测试所有你在Building a Test Application所学的内容。在这部分,我们将只涉及这些基本的内容。对于成熟的应用开发,你应该查看Gstreamer应用开发手册。

  • 高级过滤器概念 - 关于Gstreamer插件开发中高级特征的信息。
通过前面基本的学习,你应该能够创建一个多功能且性能良好的音频或视频过滤插件。然而,Gstreamer为插件编写者提供了更多。此部分教程包含了插件编写的高级主题,如时间安排,媒体类型定义,时钟,接口及标签等。由于这些特征都有其特殊的目的,你可以以任意的顺序去阅读对应教程,它们中的大多数不要求先阅读其它章节。
第一个章节(不同的时间安排模式)将阐述Element时间安排的一些基础内容。虽然它不是非常的深入,但它会或多或少地介绍为什么会是如此工作的。如果你对Gstreamer的内容机制感兴趣,可以阅读此章节。接着,我们将运用此部分知识并讨论另一种类型的数据传输(而不是你在The chain function: Different scheduling modes章节所了解的那样)。基于循环的Element将使你更好地控制输入速率。这对写一些插件,如整流器和分流器,将非常有用。
接下来,我们将讨论Gstreamer中的媒体定义(教程:Media Types and Properties)。你将学会如何定义一个新的媒体类型及了解Gstreamer中已定义的一系列媒体类型。
在下一个章节,你将学习request-和sometimes-pads,这些pads是动态创建的,或者是应用程序所需要的(request-pads),或者是媒体流所需要的(sometimes),这在Request and Sometimes pads教程中有介绍。
下一个章节,时钟,将阐述Gstreamer中时钟的概念。当你想知道Element如何实现音频/视频的同步时,你需要了解此内容。
接下来的几个章节将会讨论应用程序与Element交互的高级方式。在之前,我们学习了GObject的方式来交互(教程Adding Properties and Signals)。我们将讨论动态参数,这是一种提前定义好Element行为的方式(教程:Supporting Dynamic Parameters)。接着,你将学习接口(教程:interfaces)。接口是应用程序与Element交互中目的明确的一种方式,它是基于GObject的接口的。最后,你将学习Gstreamer中元数据是如何被处理的(教程:Tagging(Metadata and Streaminfo)。
最后一章节,Element:搜索,导向等更多,将讨论Gstreamer中Events的概念。Events是应用程序与Element交互的另外一种方式。它们主要关心搜索。它们也是Elements之间进行交互的一种方式,如令彼此知道媒体流的间断点,在pipeline中向前传递tags等等。
  • 经创建特殊的Element类型 - 阐述编写其它的插件类型
由于一开始教程是以音频过滤器作为例子,讲述的概念主要是应用在过滤插件上。但其中很多的概念同样可以应用到其它插件类型上,包括sources, sinks, and autopluggers。此部分的教程将展示当使用这些特殊的插件类型时会出现的问题。此章节一开始将关注能够用基本类型(Pre-made base clases)编写的Element,之后关注编写特殊类型的Element(教程:Writing a Demuxer or Parser,Writing a N-to-1 Element or Muxer and Writing a Manager)。
  • 附录 - 更多关于关于插件开发的信息
此附录介绍一些并不严格遵守之前关于插件构建的规则,大多数未完成。

此章节所剩余的部分会简介涉及到Gstreamer插件开发的基本概念。包含了Elements and Plugins,Pads,GstMiniObject, Buffers and Events and Media types and Properties。如果你已经对这些内容很熟悉了,你可通过此部分来回顾之前的内容,或者你可略过此部分,直接看Building a Plugin。

正如你所看到的,此教程有许多内容需要学习,所以,让我们开始吧!

  • 通过扩展GstBin,创建混合的,复杂的Element。这将使得你能够创建(其它插件嵌入到里面的)插件。
  • 添加新的媒体类型及类型检测到注册表中。这将使得你的插件能够在一个全新的媒体类型中工作。

Gstreamer插件教程1.1—介绍(Introduction):前言(Preface)相关推荐

  1. GStreamer基础教程10——GStreamer工具

    目标 GStreamer提供了一系列方便使用的工具.这篇教程里不牵涉任何代码,但还是会讲一些有用的内容: 如何在命令行下建立一个pipeline--完全不使用C 如何找出一个element的Capab ...

  2. Gstreamer基础教程10: Gstreamer 工具

    文章目录 1. Goal 2. 介绍 3. gst-lanuch-1.0 3.1 Elements 3.2 Properties 3.3 Named elements 3.4 Pads 3.5 Cap ...

  3. 编写一个GStreamer插件

    前面章节对GStreamer做了概述,不过我们最终用到主要是插件,下面我们对插件做一个简单介绍,大部分内容都是copy的,并非原创,主要用于学习记录,英文好的可以看官方文档,我和官方校对过,翻译的大体 ...

  4. Htc Vive VR 手势识别插件教程 1.1 版本(附1.0版本教程PDF)

    VR手势识别插件教程1.1.1版本 VR手势识别插件教程1.1.1版本内容提纲 Htc Vive VR手势识别插件教程1.1.1版本.................................. ...

  5. grep 模糊匹配_vim 的模糊查找插件 LeaderF 新功能介绍(二)

    前言 本文介绍自<vim 的模糊查找插件 LeaderF 新功能介绍>以后,LeaderF增加的一些新的功能. 异步grep Leaderf rg 此功能已经在<vim的grep插件 ...

  6. 编写Eclipse插件教程–第1部分

    Eclipse是三个最受欢迎的Java开发IDE之一. 其成功的原因之一是其可扩展性. 对于任何知道该怎么做并且已经做到的人来说,编写eclipse插件都可以非常轻松快捷. 不幸的是,第一次在Ecli ...

  7. qq浏览器翻译功能启用划词插件教程

    qq浏览器翻译功能启用划词插件教程 qq浏览器翻译功能怎么启用?QQ浏览器对于我们经常浏览qq空间,微信聊天的人来说是非常不错的一个浏览器,而且,QQ浏览器也有非常多不错的功能,比如划词翻译等等.那么 ...

  8. 【GStreamer开发】GStreamer基础教程07——多线程和Pad的有效性

    目标 GStreamer会自动处理多线程这部分,但在有些情况下,你需要手动对线程做解耦.本教程会教你怎样才能做到这一点,另外也展示了Pad的有效性.主要内容包括: 如何针对部分的pipeline建立一 ...

  9. [转]详细的GStreamer开发教程

    详细的GStreamer开发教程 文章目录 详细的GStreamer开发教程 1. 什么是GStreamer? 2. GStreamer架构 2.1 Media Applications 2.2 Co ...

最新文章

  1. ASP.NET MVC 音乐商店 - 9. 注册和结账
  2. Nacos(五)之Spring集成
  3. web.xml.jsf_使用JSF 2.0可以更轻松地进行多字段验证
  4. stats | 介绍三个与数学规划函数
  5. 九章基础算法04:二叉搜索树与哈希表
  6. 有多么巨大的工作量,要交接一个月?
  7. mac能开发android吗,怎么在Mac上开发Android应用
  8. [SRM603] WinterAndSnowmen
  9. 【小程序】384- 如何一人五天开发完复杂小程序(前端必看)
  10. ctfshow七夕杯复现
  11. 解决git push 中remote: Permission to xxxxx.git denied to xxx. fatal: unable to acce
  12. MongoDB 学习笔记八 复制、分片、备份与恢复、监控
  13. 论文写作各种图片格式转成eps格式(inkscape)
  14. caffe中的多种loss函数
  15. 操作系统实验六 设备管理
  16. DPU-PYNQ使用笔记
  17. 软件项目外包的合作流程是怎样的?
  18. 在maven启动时tomcat端口冲突问题 Address already in use: JVM_Bind null:8080
  19. MySQL优化器如何预估查询成本
  20. R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE)、对矩阵进行转置操作

热门文章

  1. 【ROS】rosnode信息命令
  2. docker使用DockerFile构建php镜像
  3. Windows开机缓慢解决方法
  4. c语言智能停车场系统设计,智能停车场系统的设计与实现
  5. 3D轮廓渲染中的几种轮廓边
  6. 窥探 kernel --- 几个linux学习资源分享
  7. 5分钟教你轻松掌握箱线图
  8. 【QQ音乐Api】移花接木 打造自己的音乐电台
  9. Android楼梯清扫机器人上位控制系统设计
  10. Codeforces 1490G - Old Floppy Drive (二分、数学)