GStreamer

GStreamer 是一个基于管道的多媒体框架，基于GObject，以C语言写成。

凭借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宽通用公共许可证授权。

技術概述

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採用基於插件（plugin）和管道（pipeline）的體系結構，框架中的所有的功能模塊都被實現成可以插拔的組件（component），能夠很方便地安裝到任意管道上。GStreamer使用插件架構並造就了大量的GStreamer的共享庫。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"的名字)

参阅

另见
 Phonon
 VLC
 Xine
 MPlayer

外部链接
 GStreamer主页 
 GStreamer介绍 （英文）
 GStreamer 在Ohloh网站
 #gstreamer在freenode的讨论组
 GStreamer 的FFmpeg插件网站
 Windows 二进制安装包 
 Mac OS X 二进制安装包

自由软件
开源软件
多媒体框架
GNOME函式庫