本文给出了Gstreamer的总体设计。通过阅读本文可以了解Gstreamer的内部工作原理。本文编译自gstreamer源码中的文档,原文在源码中的位置是/gstreamer/docs/design/part-overview.txt。
概述
Gstreamer是一个libraries和plugins的集合,用于帮助实现各种类型的多媒体应用程序,比如播放器,转码工具,多媒体服务器等。
利用Gstreamer编写多媒体应用程序,就是利用elements构建一个pipeline。element是一个对多媒体流进行处理的object,比如如下的处理:
- 读取文件。
- 不同格式的编解码。
- 从硬件采集设备上采集数据。
- 在硬件设备上播放多媒体。
- 多个流的复用。
elements的输入叫做sink pads,输出叫做source pads。应用程序通过pad把element连接起来构成pipeline,如下图所示,其中顺着流的方向为downstream,相反方向是upstream。
应用程序会收到来自pipeline的消息和通知,比如EOS等。
总体设计
Gstreamer的设计目标如下:
- 快速处理大规模数据。
- 对多线程处理的完全支持。
- 能处理各种格式的流媒体。
- 不同数据流的同步。
- 处理多种设备的能力。
基于Gstreamer的应用程序能够具备的处理能力依赖于系统中安装的不同种类功能的elements的数量。
Gstreamer核心不具备处理具体的media的功能,但是element处理media时需要具备的特性很多是由Gstreamer的核心提供的。
elements
element是pipeline的最小组成部分。element提供了多个pads,或者为sink,或者为source。一个element有四种可 能的状态,分别是NULL,READY,PAUSED,PLAYING。NULL和READ