gstreamer

GStreamer 是用來構建流媒體套用的開源多媒體框架(framework),其目標是要簡化音/視頻應用程式的開發,目前已經能夠被用來處理像 MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime 等多種格式的多媒體數據。

基本信息

發展歷史

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"的名字)

外掛程式集合的名稱描述
Good此一類的GStreamer外掛程式來自於“優秀”"組,具有高品質的LGPL認證,或依照GStreamer的 "contains a set of well-supported plug-ins under our preferred license"認證。
BadGStreamer所謂的“不良”外掛程式是指未經 up-to-par 的處理。這類外掛程式已經很接近高品質,但還缺乏一些認證事誼:代碼審核、需要檔案說明、大量測試、真正的維修人員,或大量的使用群。
UglyGStreamer所謂的“醜惡”外掛程式可能是品質良好,但是出現布署(distribution)上的問題。

簡介

GStreamer是一個開源的多媒體框架庫。利用它,可以構建一系列的媒體處理模組,包括從簡單的ogg播放功能到複雜的音頻(混音)和視頻(非線性編輯)的處理。

應用程式可以透明的利用解碼和過濾技術。開發者可以使用簡潔通用的接口來編寫一個簡單的外掛程式來添加新的解碼器或濾鏡。

特點

GStreamer是一個創建流媒體應用程式的框架。其基本設計思想來自於俄勒岡(Oregon)研究生學院有關視頻管道的創意, 同時也借鑑了DirectShow的設計思想。

GStreamer的程式開發框架使得編寫任意類型的流媒體應用程式成為了可能。在編寫處理音頻、視頻或者兩者皆有的應用程式時, GStreamer可以讓你的工作變得簡單。GStreamer並不受限於音頻和視頻處理, 它能夠處理任意類型的數據流。管道設計的方法對於實際套用的濾波器幾乎沒有負荷, 它甚至可以用來設計出對延時有很高要求的高端音頻應用程式。

GStreamer最顯著的用途是在構建一個播放器上。GStreamer已經支持很多格式的檔案了, 包括: MP3、Ogg/Vorbis、MPEG-1/2、AVI、Quicktime、 mod等等。從這個角度看,GStreamer更象是一個播放器。但是它主要的優點卻是在於: 它的可插入組件能夠很方便的接入到任意的管道當中。這個優點使得利用GStreamer編寫一個萬能的可編輯音視頻應用程式成為可能。

GStreamer 框架是基於外掛程式的, 有些外掛程式中提供了各種各樣的多媒體數位訊號編解碼器,也有些提供了其他的功能。所有的外掛程式都能夠被連結到任意的已經定義了的數據流管道中。GStreamer的管道能夠被GUI編輯器編輯, 能夠以XML檔案來保存。這樣的設計使得管道程式庫的消耗變得非常少 。

GStreamer核心庫函式是一個處理外掛程式、數據流和媒體操作的框架。 GStreamer核心庫還提供了一個API, 這個API是開放給程式設計師使用的---當程式設計師需要使用其他的外掛程式來編寫他所需要的應用程式的時候可以使用它。

版本發布

2012年09月25,GStreamer 1.0 發布,多媒體開發框架,主要改進內容包括:

更靈活的記憶體處理

可擴展的和可轉讓的元數據緩衝區

上限談判和重新談判機制,解耦從緩衝區分配

改進帽重新談判

自動轉發形成的狀態動態管道

返工,更細粒度的墊探測

更簡單、更具描述性的音頻和視頻帽

更有效的分配的緩衝區,事件和其他小型對象

改進時間戳處理

支持基於gobject檢查語言綁定

2013年6月8日,GStreamer 1.1.1 版本發布,它是一個開發版本,為下一個穩定版 1.2.x 做的準備。與 GStreamer 1.0 比較,該版本包含 8 個新 API,以及一些新外掛程式,改進了框架本身的視頻處理以及 bug 修復。請注意的是 1.x 系列不兼容 0.10.x 版本系列,而且 0.10.x 也不再進行維護。

2013年9月25日,GStreamer多媒體框架發布1.2版本,API和ABI均與GStreamer1.0兼容的同時,引入了新的功能、大量bug修復和最佳化。新的外掛程式支持DASH adaptive streaming、JPEG2000 images、VP9和Daala video,以及WebP的解碼。

相關詞條

相關搜尋

熱門詞條

聯絡我們