GStreamerは、パイプラインベースのマルチメディアフレームワークであり、多様なメディア処理システムを連携させて複雑なワークフローを実現します。例えば、GStreamerを使えば、ある形式のファイルを読み込み、処理し、別の形式で出力するシステムを構築できます。形式や処理方法は、プラグアンドプレイ方式で簡単に変更可能です。
GStreamerは、シンプルな音声再生、音声および動画再生、録画、ストリーミング、編集など、多種多様なメディア処理コンポーネントをサポートしています。パイプライン設計は、ビデオエディター、トランスコーダー、ストリーミングメディア配信サービス、メディアプレーヤーなど、様々なマルチメディアアプリケーションを作成するための基盤となります。
これは、 BSD、OpenSolaris、Linux、Android、macOS、iOS、Windows、OS/400など、さまざまなオペレーティングシステムで動作するように設計されています。
GStreamerは、LGPL-2.1以降の条件[ 4 ]に従う無料のオープンソースソフトウェアであり、 freedesktop.orgでホストされています。
GStreamerを多用するGNOMEデスクトップ環境は、GNOMEバージョン2.2以降GStreamerを組み込み、GNOMEおよびGTKアプリケーションにGStreamerの使用を推奨しています。PhononメディアフレームワークやSongbirdメディアプレーヤーなど、他のプロジェクトもGStreamerを使用またはサポートしています。WebKitブラウザエンジンでも使用されています。[ 5 ]
GStreamerは、 Jolla Phone、Palm Pre、[ 6 ] Tizen、Maemoオペレーティングシステムを実行するNokia 770、N800、N810、N900、N9インターネットタブレットなどの組み込みデバイスでも動作します。
ソースコードのリリースに加えて、GStreamerプロジェクトはAndroid、iOS、OSX、Windows用のバイナリビルドも提供しています。[ 7 ]
LIGO研究所は、重力波データのシミュレーションと解析にGStreamerを使用しています。GStreamerインターフェースはGstLALと呼ばれています。 [ 8 ]



GStreamerは、GObjectとGLib 2.0オブジェクトモデルに基づいた型システムを持つC言語で記述されています。
あるプログラミング言語で書かれたライブラリは、バインディングを作成すれば別の言語でも使用できます。GStreamerには、 Go、Python、Rust、Vala、C++、Perl、GNU Guile、C#、Rubyなど、さまざまな言語用のバインディングが用意されています。
GStreamerは、複数の処理要素をパイプラインに接続することでメディアを処理します。各要素はプラグインによって提供されます。要素はビンにグループ化でき、さらにビンを集約することで階層グラフを形成できます。これはフィルタグラフの一例です。
要素はパッドを介して通信します。ある要素のソースパッドは、別の要素のシンクパッドに接続できます。パイプラインが再生状態になると、データバッファはソースパッドからシンクパッドへと流れます。パッドは、機能を使用して送信されるデータの種類をネゴシエートします。
右の図は、 GStreamer を使用してMP3ファイルを再生する例を示しています。ファイルソースは、コンピュータのハードドライブから MP3 ファイルを読み込み、MP3 デコーダに送信します。デコーダはファイルデータをデコードし、PCMサンプルに変換してサウンドドライバに渡します。サウンドドライバは、PCM サウンドサンプルをコンピュータのスピーカーに送信します。
GStreamer は、共有ライブラリとして実装された GStreamer の機能を最大限に活用するプラグインアーキテクチャを採用しています。[ 9 ] GStreamer の基本機能には、プラグインの登録とロード、およびすべてのクラスの基本を基本クラスの形で提供する機能が含まれています。プラグイン ライブラリは、幅広いコーデック、コンテナ フォーマット、入出力ドライバ、およびエフェクトをサポートするために動的にロードされます。
プラグインは、初めて必要になったときに半自動的にインストールできます。そのためには、ディストリビューションは、機能の説明をパッケージ名に変換するバックエンドを登録できます。
バージョン0.9以降、プラグインは3つのセットにグループ化されています(映画「続・夕陽のガンマン」にちなんで名付けられています)。[ 10 ]
個々のディストリビューションでは、これらのプラグインをさらに細分化している場合があります。たとえば、Ubuntuでは、「悪い」プラグインと「醜い」プラグインを「Universe」または「Multiverse」コンポーネントに分類しています。
さらに、サポートされるメディアフォーマットの数を拡張するGStreamer FFmpegプラグイン(歴史的な理由からgst-libavと呼ばれている[ 14 ] )があります。

特定のビデオコーデック( PureVideo、UVD、QuickSync Video、TI Ducatiなど)をデコードするための計算を実行できるSIPブロックは複数存在します。これらのSIPブロックはデバイスドライバによってサポートされる必要があり、ドライバはVDPAU、VAAPI、分散コーデックエンジン、DXVAなどの1つまたは複数のインターフェースをエンドユーザーソフトウェア(MPlayerなど)に提供し、これらのソフトウェアがハードウェアにアクセスして計算処理をオフロードできるようにします。
前述の Good、Bad、Ugly GStreamer プラグインは、あらゆる種類の処理要素/フィルタに加えて、さまざまなファイル形式、プロトコル、マルチメディア コーデックのサポートを提供します。これらに加えて、100 を超える圧縮形式 ( MPEG-1、MPEG-2、MPEG-4、H.261、H.263、H.264、RealVideo、MP3、WMVなど[ 20 ]を含む) のサポートが、 gst-libavプラグインを通じて透過的に提供されます。
エリック・ウォルシンセンは1999年にGStreamerプロジェクトを設立しました。そのコアとなる設計アイデアの多くは、オレゴン大学院大学の研究プロジェクトから生まれました。[ 21 ]ウィム・タイマンスはその後すぐにプロジェクトに参加し、システムの多くの側面を大幅に拡張しました。それ以来、他の多くのソフトウェア開発者が貢献しています。
最初のメジャーリリースは、2001 年 1 月 11 日に発表された 0.1.0 でした。[ 1 ]その後間もなく、GStreamer は最初の商用スポンサーを獲得しました。2001 年 1 月末頃、彼らは Erik Walthinsen を雇い、小型 (携帯電話クラス) デバイスに GStreamer を組み込む方法を開発させました。RidgeRun の別の従業員である Brock A. Frazier が GStreamer のロゴをデザインしました。その後、RidgeRun は財政難に陥り、Erik Walthinsen を含むスタッフを解雇せざるを得ませんでした。GStreamer の開発はほとんど影響を受けませんでした。
このプロジェクトは、2001年7月に0.2.0、2002年9月に0.4.0、2004年3月に0.8.0という一連のメジャーリリースをリリースしました。この期間中、プロジェクトはバージョン管理戦略も変更し、最初のリリースは単に新しいバージョンでしたが、後には中間の数字がリリースシリーズを示すようになりました。つまり、プロジェクトは、これらのリリースシリーズ内でバイナリ互換性を維持することを目的とした、0.6.xと0.8.xのリリースを連続してリリースしたことになります。この間、Erik WalthinsenはGStreamerの開発からほぼ離れ、他の事業に注力しました。
どのリリースシリーズにおいても、このプロジェクトは困難に直面している。安定性の問題や、Xine、MPlayer、VLCといった競合プロジェクトと比較して機能が著しく不足していることが主な理由で、どのシリーズもLinuxコミュニティではあまり人気がない。また、Erik Walthinsenが去って以来プロジェクトリーダーを務めてきたWim Taymansがほとんど参加しなくなったため、リーダーシップの欠如も問題となっている。
2004年、 Fluendoという新会社が設立されました。同社はGStreamerを使用してストリーミングサーバーFlumotionを開発し、GStreamer向けのマルチメディアソリューションを提供することを目指していました。この間、FluendoはWim Taymansをはじめとする主要開発者のほとんどを採用し、NokiaやIntelなどの企業の支援を得て、GStreamerをプロフェッショナルレベルに引き上げ、コミュニティでの普及を促進しました。
Wim Taymansが再び指揮を執り、GStreamerの中核部分が再設計され、現在の0.10.xシリーズとなり、2005年12月に最初のリリース(0.10.0)が行われました。 [ 22 ]それ以来、 APIとABIの互換性が維持されています。
新たな安定版コアが確立されたことで、GStreamerは2006年に人気を博し、Totem、Rhythmbox 、 Bansheeなどのメディアプレーヤーで採用されるようになり、その後も多くのメディアプレーヤーがGStreamerを採用しました。また、 Nokia、Motorola、Texas Instruments、Freescale、Tandberg、Intelといった企業にも採用されました。
2007年、GStreamerの中核開発者のほとんどがFluendoを去り、GStreamerのメンテナーであるWim Taymansは他のGStreamerベテランと共にCollabora Multimediaを共同設立した。他の開発者はSun Microsystems、Oblong Industries、Songbirdに入社した。
2012 年 6 月~2014 年 8 月の間、GStreamer 0.10 はCollaboraとFluendoによってマルチプラットフォームSDKとして配布されました[ 23 ] 。配布先はサードパーティのgstreamer.comウェブサイト (上流のコミュニティ プロジェクト用のgstreamer.freedesktop.orgではなく) でした。その目的は、アプリケーション開発者に Windows、Mac OS X、iOS、および Android で機能的に同一の SDK を提供することでした。SDK イニシアチブは、GStreamer を使用したマルチメディア アプリケーションの開発に標準化されたエントリー ポイントを提供し、プラットフォーム全体を自分で構築する必要がないようにすることで、GStreamer プロジェクトの商用利用を促進することを目的としていました。SDK のユーザーは、その SDK に固有のドキュメント、チュートリアル、および手順からも恩恵を受けました。
GStreamer 1.0は2012年9月24日にリリースされました。[ 24 ] 1.xシリーズはGStreamer 0.10と並行してインストールできるため、移行が容易になり、0.10シリーズに比べて多くのアーキテクチャ上の利点があります。[ 25 ]一般的に、GStreamer 1.0では以下の点が大幅に改善されました。
技術的な改善に加えて、1.x シリーズは新しいリリース バージョン管理方式によっても定義されています。GStreamer のロードマップで説明されているように、[ 26 ]すべての 1.xy バージョンには -1.0 の API バージョン接尾辞が付き、安定した API/ABI を備えています。API/ABI は新しいメジャー リリース シリーズ (2.x など) によってのみ変更される可能性がありますが、現時点で 2.0 リリース シリーズを予定しているものはありません。それまでは、新しいバージョン番号付け方式を使用して、各リリースの想定される用途を予測できます。ロードマップにはいくつかの例が挙げられています。
2013年3月、GStreamerプロジェクトのメンテナーは、0.10シリーズはもはやメンテナンスされていないことを明確にする声明[ 27 ]を発表しました。この声明では、GStreamerプロジェクトがアプリケーションおよびプラグイン開発者が新しいテクノロジーに移行するのを支援する意思があることを改めて表明し、1.xシリーズへの切り替えがまだ不可能だと考えられる場合は、さまざまなコンサルティング会社から支援を求めることができることを示唆しました。
1.2では、 DASHアダプティブストリーミング、JPEG 2000画像、VP9およびDaalaビデオのサポート、 WebPのデコード専用サポートが追加されました。
バージョン1.14は2018年3月19日にリリースされ[ 28 ] 、 WebRTC、AV1、Nvidia NVDEC、Secure Reliable Transportのサポートなどが追加されました。
バージョン1.22は2023年1月23日にリリースされ[ 29 ] 、適応型ビットレートストリーミングのためのHLS、DASH、Microsoft Smooth Streamingのサポートに加えて、AV1のサポートが改善されました。
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)