GStreamer

维基百科,自由的百科全书
跳转至: 导航搜索
GStreamer
Gstreamer-logo.svg
開發者 GStreamer团队
初始版本 2001年1月11日  (2001-01-11)[1]
穩定版本 1.4.3 / 2014年9月29日(19天前) (2014-09-29)[2]
預覽版本 1.3.91 / 2014年7月12日(3個月前) (2014-07-12)[3]
開發狀態 活跃
编程语言 C语言[4]
操作系统 跨平台
类型 多媒体框架英语Multimedia framework
许可协议 GNU宽通用公共许可证
網站 gstreamer.freedesktop.org

GStreamer 是一个基于流水线多媒体框架英语Multimedia framework,基于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(包括x86PowerPCARM架构),Solaris(Intel和SPARC)以及OpenSolarisFreeBSDOpenBSDNetBSDMac OS XMicrosoft WindowsOS/400上运行。GStreame也有针对其他语言的绑定PythonValaC++PerlGNU GuileRuby。GStreamer依据GNU宽通用公共许可证授权。[5]

技術概述[编辑]

GStreamer Technical Overview.svg

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 FFmpeg plug-in
開發者 GStreamer Team
初始版本 2004年2月26日  (2004-02-26)[6]
穩定版本 1.4.2 / 2014年9月19日(29天前) (2014-09-19)[7]
開發狀態 進行中
编程语言 C
操作系统 跨平台
平台 GStreamer
类型 多媒体框架英语Multimedia framework插件
许可协议 GNU通用公共许可证
網站 gstreamer.freedesktop.org/modules/gst-ffmpeg.html

GStreamer採用基於插件(plugin)和管道(pipeline)的體系結構,框架中的所有的功能模塊都被實現成可以插拔的組件(component),能夠很方便地安裝到任意管道上。GStreamer使用插件架構並造就了大量的GStreamer的共享庫[8]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認證,[9]或依照GStreamer的 "contains a set of well-supported plug-ins under our preferred license"認證。[10]
Bad GStreamer所謂的“不良”插件是指未經 up-to-par 的處理。這類插件已經很接近高品質,但還缺乏一些認證事誼:程式碼審核、需要文件說明、大量測試、真正的維修人員,或大量的使用群[11]
Ugly GStreamer所謂的“醜惡”插件可能是品質良好,但是出現佈署(distribution)上的問題[12]

参阅[编辑]

  1. ^ GStreamer "Slipstream" 0.1.0 released. [11 January 2001]. 
  2. ^ Release notes for GStreamer 1.4.3. 2014-09-29 [2014-09-29]. 
  3. ^ Release notes for GStreamer 1.3.91. 2014-07-12 [12 July 2014]. 
  4. ^ Ohloh Analysis Summary – GStreamer. Ohloh. [22 July 2010]. 
  5. ^ Licensing your applications and plugins for use with GStreamer. gstreamer.freedesktop.org. [22 July 2010]. 
  6. ^ GStreamer: news
  7. ^ Release notes for GStreamer FFmpeg Plug-ins 0.10.11. [3 November 2010]. 
  8. ^ GStreamer – Overview of the modules. [6 November 2010]. 
  9. ^ gstreamer0.10-plugins-good package description (Ubuntu 10.04)
  10. ^ Release notes for GStreamer Base Plug-ins 0.10.0. [3 November 2010]. 
  11. ^ gstreamer0.10-plugins-bad package description (Ubuntu 10.04)
  12. ^ gstreamer0.10-plugins-ugly package description (Ubuntu 10.04)

另见[编辑]

外部链接[编辑]