GStreamer
GStreamer 是一个基于管道的多媒体框架,基于GObject,以C语言写成。
![]() | |
开发者 | GStreamer团队 |
---|---|
首次发布 | 2001年1月11日[1] |
当前版本 |
|
原始码库 | |
编程语言 | C语言[3] |
操作系统 | 跨平台 |
类型 | 多媒体框架 |
许可协议 | GNU宽通用公共许可证 |
网站 | gstreamer.freedesktop.org |
凭借GStreamer,程序员可以很容易地创建各种多媒体功能组件,包括简单的音频回放,音频和视频播放,录音,流媒体和音频编辑。基于流水线设计,可以创建诸如视频编辑器、流媒体广播和媒体播放器等等的很多多媒体应用。
发展历史
编辑1999年Erik Walthinsen建立了GStreamer,2001年1月11日发表了第一个主要版本是0.1。没过多久,GStreamer出现了第一个商业版本,由RidgeRun公司发行,这是一家嵌入式Linux 公司。RidgeRun后来遇到了财务困难,工作人员大多离去,包括Walthinsen。 GStreamer的进展并未受影响。2001年7月发表了0.2.0的版本,2002年9月,发表了0.4.0,2004年3月又发表了0.8.0。
2004年,新公司Fluendo成立,并使用GStreamer编写一个流媒体伺服器Flumotion, 并提供多媒体解决方案。2005年12月发表了0.10.0版本。日后GStreamer渐渐普及,2006年,Totem , Rhythmbox 和 Banshee等媒体巨头都使用 GStreamer。
GStreamer日后在商业上获取巨大成功有许多不同的公司采用(诺基亚、摩托罗拉、德州仪器、 飞思卡尔、英特尔等等),并已成为一个非常强大的跨平台多媒体框架。
其跨平台设计,使其能够在Linux(包括x86,PowerPC和ARM架构),Solaris(Intel和SPARC)以及OpenSolaris,FreeBSD,OpenBSD,NetBSD,Mac OS X,Microsoft Windows和OS/400上运行。GStreame也有针对其他语言的绑定如Python,Vala,C++,Perl,GNU Guile和Ruby。GStreamer依据GNU宽通用公共许可证授权。[4]
技术概述
编辑GStreamer的程序通过连接数码媒体处理的元素注入管道(pipeline)。每个元素是由一个插件提供 。 元素可组合为箱(bins),箱可以进一步聚合,从而形成架构图。右图是一个例子一个过滤器图表 。
元素沟通是透过垫(pads)。来源垫(source pad)上一个元素可以被连接到一个接收垫(sink pad)在另一个。当管道是在播放状态,数据缓冲流(data buffers flow)从来源垫(source pad)流向接收垫(sink pad)。
该图可以体现出如何使用GStreamer播放MP3文件。该文件的源读取 MP3文件从一台电脑的硬盘驱动程式,并将其发送到MP3解码器。解码器解码该MP3数据,并转换成PCM,然后传递到ALSA声音驱动。ALSA的声卡驱动程式发送 PCM声音样本,最后从电脑的扬声器播放。
Plug-ins
编辑开发者 | GStreamer Team |
---|---|
首次发布 | 2004年2月26日[5] |
当前版本 |
|
原始码库 | |
编程语言 | C |
操作系统 | 跨平台 |
平台 | GStreamer |
类型 | 多媒体框架插件 |
许可协议 | GNU通用公共许可证 |
网站 | gstreamer.freedesktop.org/modules/gst-ffmpeg.html |
GStreamer采用基于插件(plugin)和管道(pipeline)的体系结构,框架中的所有的功能模块都被实现成可以插拔的组件(component),能够很方便地安装到任意管道上。GStreamer使用插件架构并造就了大量的GStreamer的共享库。[7]GStreamer基本功能包括登录与加载,新的组件可以透过基类来获取这些属性。Gstreamer的基类之一是GObject。以Gobject的实现思想而言,可通过2个struct,一个相当于C++ 成员变量,一个相当C++中的成员函数。GStreamer框架中的大部分函数都会涉及到对GstElement对象的操作,GstElement又被区分成Source Element、Filter Element、Sink Element。写gstreamer element的时候,不能使用全局变量,要把这些变量全部放到该element的class中。
Plug-ins 如果有需要的话, 可以半自动的加载。GStreamer并没有严格规定输入端和输出端的数目,事实上它们都可以是一个或者多个。所有的组件都从NULL状态开始,依次经历NULL、READY、PAUSED、PLAYING等状态间的转换。正处于播放状态的管道能够随时切换到PAUSED状态。
0.9版以后的插件可被区分成三种类 (来自电影黄金三镖客"The Good, the Bad and the Ugly"的名字)
插件集合的名称 | 描述 |
---|---|
Good | 此一类的GStreamer插件来自于“优秀”"组,具有高质量的LGPL认证,[8]或依照GStreamer的 "contains a set of well-supported plug-ins under our preferred license"认证。[9] |
Bad | GStreamer所谓的“不良”插件是指未经 up-to-par 的处理。这类插件已经很接近高质量,但还缺乏一些认证事谊:代码审核、需要文件说明、大量测试、真正的维修人员,或大量的使用群[10]。 |
Ugly | GStreamer所谓的“丑恶”插件可能是质量良好,但是出现布署(distribution)上的问题[11]。 |
参阅
编辑- ^ GStreamer "Slipstream" 0.1.0 released. [11 January 2001]. (原始内容存档于2013-07-21).
- ^ 2.0 2.1 GStreamer 1.24.7 stable bug-fix release. 2024年8月21日 [2024年8月21日] (英语).
- ^ Ohloh Analysis Summary – GStreamer. Ohloh. [2010-07-22]. (原始内容存档于2014-06-26).
- ^ Licensing your applications and plugins for use with GStreamer. gstreamer.freedesktop.org. [22 July 2010]. (原始内容存档于2014-06-15).
- ^ GStreamer: news. [2011-06-17]. (原始内容存档于2012-10-05).
- ^ Release notes for GStreamer FFmpeg Plug-ins 0.10.11. [3 November 2010]. (原始内容存档于2020-09-16).
- ^ GStreamer – Overview of the modules. [6 November 2010]. (原始内容存档于2020-09-17).
- ^ gstreamer0.10-plugins-good package description (Ubuntu 10.04)
- ^ Release notes for GStreamer Base Plug-ins 0.10.0. [3 November 2010]. (原始内容存档于2020-09-16).
- ^ gstreamer0.10-plugins-bad package description (Ubuntu 10.04)
- ^ gstreamer0.10-plugins-ugly package description (Ubuntu 10.04)
另见
编辑外部链接
编辑- GStreamer主页 (页面存档备份,存于互联网档案馆)
- GStreamer介绍 (页面存档备份,存于互联网档案馆)(英文)
- GStreamer (页面存档备份,存于互联网档案馆)在Ohloh网站
- #gstreamer[永久失效链接]在freenode的讨论组
- GStreamer (页面存档备份,存于互联网档案馆)的FFmpeg插件网站
- Windows 二进制安装包 (页面存档备份,存于互联网档案馆)
- Mac OS X 二进制安装包