GStreamer是一個開源的多媒體框架庫,基于管道設計,可以將各種媒體處理系統鏈接在一起,完成復雜的工作流程。它支持多種媒體處理組件,包括簡單的音頻回放、音頻和視頻播放、錄音、流媒體和音頻編輯等。
GStreamer的設計目標是簡化音/視頻應用程序的開發,已經能夠處理多種格式的多媒體數據,如MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime等。GStreamer可以在多種操作系統上運行,如BSD、OpenSolaris、Android、Mac OS、IOS、Windows和OS/400等。GStreamer是免費的開源軟件,遵循LGPL-2.1或更高版本的條款,并托管在freedesktop.org上。
歷史發展
GStreamer由Erik Walthinsen于1999年創立,核心設計思想來自俄勒岡研究所的一個研究項目。Wim Taymans隨后加入了該項目,并在系統的許多方面大大擴展了它。自那時以來,許多其他軟件開發人員也做出了貢獻。第一個重大發布是0.1.0,它于2001年1月11日宣布。不久之后,GStreamer獲得了第一個商業支持者。
在2001年底,他們聘請了Erik Walthinsen,開發了將GStreamer嵌入較小(手機級)設備的方法。RidgeRun的另一名員工Brock A. Frazier設計了GStreamer的標志。RidgeRun后來陷入財務困境,不得不裁員,包括Erik Walthinsen。GStreamer的進展基本上沒有受到影響。
該項目發布了一系列重大版本,0.2.0于2001年7月發布,0.4.0于2002年9月發布,0.8.0于2004年3月發布。在此期間,該項目還改變了其版本策略,而最初的發布只是新版本,后來中間數字開始表示發布系列。這意味著該項目發布了一系列0.6.x和0.8.x版本,旨在在這些發布系列內保持二進制兼容。在此期間,Erik Walthinsen在很大程度上放棄了GStreamer的開發,轉而專注于其他事業。
所有的發布系列,該項目都面臨困難。每個系列在Linux社區中并不受歡迎,主要是因為穩定性問題和與競爭項目(如Xine、MPlayer和VLC Media Player)相比嚴重缺乏功能。該項目還面臨領導層的缺乏,因為自Erik Walthinsen離開后,項目負責人Wim Taymans基本上停止了參與。
2004年,成立了一家新公司Fluendo,希望使用GStreamer編寫流媒體服務器Flumotion,并為GStreamer提供多媒體解決方案。在此期間,Fluendo聘請了大部分核心開發人員,包括Wim Taymans,并吸引了諾基亞和英特爾等公司的支持,將GStreamer提升到專業水平并推動社區采用。
在Wim Taymans重新掌舵的情況下,GStreamer的核心進行了重新設計,成為當前的0.10.x系列,該系列于2005年12月首次發布(0.10.0)。自那時以來,它一直保持API和ABI兼容性。
有了一個新的穩定核心,2006年,GStreamer變得越來越受歡迎,被媒體播放器(包括Totem、Rhythmbox和Banshee)使用,隨后還有更多的應用程序。它還被諾基亞、摩托羅拉、德州儀器、飛思卡爾、Tandberg和英特爾等公司采用。
2007年,大部分核心GStreamer開發人員離開了Fluendo,包括GStreamer維護者Wim Taymans,他與其他GStreamer老將一起共同創立了Collabora Multimedia,而其他人則加入了Sun Microsystems、Oblong Industries和Songbird。
2012年6月至2014年8月,Collabora和Fluendo還將GStreamer 0.10作為多平臺SDK分發,放在第三方網站gstreamer.com上(而不是gstreamer.freedesktop.org上的上游社區項目)。該目標是為應用程序開發人員提供一個在Windows、Mac OS X、iOS和Android上功能相同的SDK。sdk計劃旨在促進GStreamer項目的商業采用,因為它提供了一個標準化的入口點,可以使用GStreamer開發多媒體應用程序,而無需自行構建整個平臺。SDK的用戶還可以從該SDK的文檔、教程和特定于該SDK的說明中受益。
GStreamer 1.0于2012年9月24日發布。1.x系列可以與GStreamer 0.10并行安裝,提供了許多優于0.10系列的架構優勢。一般來說,GStreamer 1.0為以下方面帶來了顯著改進:支持嵌入式處理器,降低功耗,將工作卸載到專用硬件單元(如DSP);使用GPU進行硬件加速的視頻解碼/編碼;零拷貝內存管理(避免CPU和GPU之間不必要的往返),以獲得更好的性能和更低的功耗;動態管道;API和代碼清理。
除了技術上的改進,1.x系列還通過新的發布版本方案進行了定義。正如GStreamer路線圖所解釋的那樣,所有1.x.y版本都帶有-1.0 API版本后綴,并具有穩定的API/ABI。API/ABI只能通過新的主要發布系列(即2.x)來打破;然而,目前沒有2.0發布系列的計劃。在那之前,新的版本編號方案可以用來預測每個發布的預期用途。路線圖引用了一些例子:
1.0.0、1.0.1、1.0.2、1.0.3穩定發布和后續bug修復發布。
1.1.0、1.1.1、1.1.2、1.1.3預發布,導致1.2.0的開發版本。
1.2.0、1.2.1、1.2.2、1.2.3穩定發布和后續bug修復發布。
1.3.0。
1.4.0等等。
2013年3月,GStreamer項目維護者發布了一份聲明,澄清了0.10系列不再維護的事實。該聲明重申了GStreamer項目愿意幫助應用程序和插件開發人員遷移到新技術,并暗示那些仍然認為切換到1.x系列不可能的人可以尋求各種咨詢公司的幫助。
1.2版本增加了對DASH自適應流媒體、JPEG 2000圖像、VP9和Daala視頻以及WebP的解碼支持。
1.14版本于2018年3月19日發布,增加了對WebRTC、AV1、英偉達 NVDEC和安全可靠傳輸等的支持。
1.22版本于2023年1月23日發布,增加了對AV1的改進支持,以及對HLS、DASH和微軟 Smooth Streaming的自適應比特率流媒體的支持。
應用簡介
GStreamer 是 GNOME 桌面環境下用來構建流媒體應用的多媒體框架(framework),其目標是要簡化音/視頻應用程序的開發,目前已經能夠被用來處理像 MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime 等多種格式的多媒體數據。
GStreamer是一個開源的多媒體框架庫。利用它,可以構建一系列的媒體處理模塊,包括從簡單的ogg播放功能到復雜的音頻(混音)和視頻(非線性編輯)的處理。
應用程序可以透明的利用解碼和過濾技術。開發者可以使用簡潔通用的接口來編寫一個簡單的插件來添加新的解碼器或濾鏡。
GNOME桌面環境是GStreamer的重度用戶,自GNOME 2.2版本以來一直包含GStreamer,并鼓勵GNOME和GTK應用程序使用它。其他項目也使用或支持它,如Phonon媒體框架和Songbird媒體播放器。它還用于WebKit瀏覽器引擎。GStreamer還在Jolla手機、Palm Pre、Tizen和諾基亞 770、N800、N810、N900和N9互聯網平板電腦上運行Maemo操作系統等嵌入式設備中。除了源代碼發布外,GStreamer項目還為Android、iOS、OSX和Windows提供二進制構建。LIGO實驗室利用GStreamer來模擬和分析引力波數據。GStreamer接口稱為GstLAL。
GStreamer通過將許多處理元素連接成管道來處理媒體。每個元素由插件提供。元素可以分組到容器中,進而形成分層圖。元素通過端口進行通信。一個元素上的源端口可以連接到另一個元素上的接收端口。當管道處于播放狀態時,數據緩沖區從源端口流向接收端口。端口使用能力來協商將要發送的數據類型。
GStreamer插件提供了對各種文件格式、協議和多媒體編解碼器的支持。通過gst-libav插件,GStreamer還提供了對100多種壓縮格式(包括MPEG-1、MPEG-2、MPEG-4、H.261、H.263、H.264、RealVideo、MP3、WMV等)的透明支持。
應用特點
GStreamer是一個創建流媒體應用程序的框架。其基本設計思想來自于俄勒岡(俄勒岡大學)研究生學院有關視頻管道的創意, 同時也借鑒了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是開放給程序員使用的---當程序員需要使用其他的插件來編寫他所需要的應用程序的時候可以使用它。
技術概述
應用功能
插件
GStreamer使用插件架構,將大部分功能實現為共享庫。GStreamer的基本功能包含用于注冊和加載插件的函數,以及以基類形式提供所有類的基礎類。插件庫會動態加載以支持各種編解碼器、容器格式、輸入/輸出驅動程序和效果。當首次需要時,插件可以被半自動步槍安裝。為此,發行版可以注冊一個后端,將功能描述解析為軟件包名稱。個別發行版可能會進一步對這些插件進行分類:例如,Ubuntu將“壞家伙”和“丑家伙”組合到“宇宙”或“多宇宙”組件中。此外,還有一個GStreamer FFmpeg插件(出于歷史原因稱為gst-libav),它擴展了支持的媒體格式數量。
視頻加速
GStreamer支持多種SIP塊進行視頻編解碼器的硬件加速,如PureVideo、UVD、QuickSync Video、TI Ducati等。這需要設備驅動程序的支持,驅動程序提供一個或多個接口,如VDPAU、VAAPI、分布式編解碼引擎或DXVA,供終端用戶軟件訪問此硬件并將計算卸載到它上面。OpenMAX IL包裝插件gst-omx可以在GStreamer中使用Video Coding Engine,例如在樹莓派上實現。德州儀器SoC上的SIP核心也可以通過GStreamer訪問:gst-dmai、gst-openmax、gst-dsp。GNOME視頻>= 2.28.0和GStreamer>= 0.10.26自2010年起支持VDPAU和VAAPI。GStreamer還支持broadcom Crystal HD。
參考資料 >