GStreamer
開發者 | GStreamer團隊 |
---|---|
首次釋出 | 2001年1月11日[1] |
目前版本 | 1.20.4(2022年10月12日 | )
預覽版本 | 1.21.1(2022年10月4日 | )
原始碼庫 | |
程式語言 | C語言[2] |
作業系統 | 跨平台 |
類型 | 多媒體框架 |
特許條款 | GNU較寬鬆公共許可證 |
網站 | gstreamer.freedesktop.org |
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較寬鬆公共許可證授權。[3]
技術概述
[編輯]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日[4] |
目前版本 | 1.6.0(2015年9月25日[5]) |
原始碼庫 | |
程式語言 | C |
作業系統 | 跨平台 |
平台 | GStreamer |
類型 | 多媒體框架外掛程式 |
特許條款 | GNU通用公眾特許條款 |
網站 | gstreamer.freedesktop.org/modules/gst-ffmpeg.html |
GStreamer採用基於外掛程式(plugin)和管道(pipeline)的體系結構,框架中的所有的功能模組都被實現成可以插拔的組件(component),能夠很方便地安裝到任意管道上。GStreamer使用外掛程式架構並造就了大量的GStreamer的共用庫。[6]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認證,[7]或依照GStreamer的 "contains a set of well-supported plug-ins under our preferred license"認證。[8] |
Bad | GStreamer所謂的「不良」外掛程式是指未經 up-to-par 的處理。這類外掛程式已經很接近高質素,但還缺乏一些認證事誼:程式碼審核、需要檔案說明、大量測試、真正的維修人員,或大量的使用群[9]。 |
Ugly | GStreamer所謂的「醜惡」外掛程式可能是質素良好,但是出現佈署(distribution)上的問題[10]。 |
參閱
[編輯]- ^ GStreamer "Slipstream" 0.1.0 released. [11 January 2001]. (原始內容存檔於2013-07-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 二進制安裝套件