Gストリーマー
| Gストリーマー | |
|---|---|
シンプルなパイプライン gst-launch | |
| 開発者 | GStreamer チーム |
| 初回リリース | 2001年1月11日[ 1 ] |
| 安定版リリース | 1.28.0 [ 2 ] |
| リポジトリ | |
| 書かれた | C [ 3 ] |
| オペレーティング·システム | BSD、 OpenSolaris、Linux、Android、macOS、iOS、Windows、OS/400 |
| タイプ | マルチメディアフレームワーク |
| ライセンス | LGPL-2.1以降[ 4 ] |
| Webサイト | gstreamer |
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アプリケーションでの使用を推奨しています。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 ]
| プラグインセット名 | 説明 |
|---|---|
| 良い | このパッケージには、LGPLライセンスに基づく高品質なプラグインのセットである「good」セットのGStreamerプラグインが含まれています。[ 11 ] |
| 悪い | GStreamerの「不良プラグイン」は、他のプラグインと比べて水準に達していないプラグイン群です。良質なプラグインに近いかもしれませんが、何かが欠けているのかもしれません。例えば、適切なコードレビュー、ドキュメント、一連のテスト、実際に活動しているメンテナー、あるいは実際に広く使用されているプラグインなどです。[ 12 ] |
| 醜い | このパッケージには、「醜い」セットのプラグインが含まれています。これは、配布時に問題を引き起こす可能性のある高品質のプラグインのセットです。[ 13 ] |
個々のディストリビューションでは、これらのプラグインをさらに細分化できます。たとえば、Ubuntu では、「悪い」セットと「醜い」セットを「Universe」または「Multiverse」コンポーネントにグループ化します。
さらに、サポートされるメディア形式の数を拡張する GStreamer FFmpegプラグイン(歴史的な理由からgst-libavと呼ばれています[ 14 ] )があります。
ビデオアクセラレーション

PureVideo、UVD、QuickSync Video、TI Ducatiなど、特定のビデオコーデックをデコードするための計算を実行できる様々なSIPブロックがあります。これらのブロックはデバイスドライバによってサポートされている必要があり、デバイスドライバはMPlayerなどのエンドユーザーソフトウェアに VDPAU、VAAPI、Distributed Codec Engine、DXVAなどの1つまたは複数のインターフェースを提供し、これらのインターフェースを介してハードウェアにアクセスし、計算をオフロードします。
- OpenMAX ILラッパープラグインgst-omxを介してGStreamerでビデオコーディングエンジンを使用することが可能です。[ 15 ]これは例えばRaspberry Piで可能です。[ 16 ]
- 一部のTexas Instruments SoCに搭載されているSIPコアもGStreamer経由でアクセス可能です: gst-dmai、gst-openmax、gst-dsp。[ 17 ]
- VDPAUとVAAPIは、2010年以降、 GNOME Videos >= 2.28.0およびGStreamer >= 0.10.26でサポートされている[ 18 ]。
- Broadcom Crystal HDがサポートされている[ 19 ]
メディアフォーマット
前述のGood, Bad and Ugly GStreamerプラグインは、あらゆる種類の処理要素/フィルタに加え、幅広いファイル形式、プロトコル、マルチメディアコーデックをサポートしています。さらに、100種類以上の圧縮形式(MPEG-1、MPEG-2、MPEG-4、H.261、H.263、H.264、RealVideo、MP3、WMVなど[ 20 ] )のサポートがgst-libavプラグイン を通じて透過的に提供されています。
歴史と発展
初期の頃
GStreamerプロジェクトは、Erik Walthinsen氏が1999年に設立しました。その中核となる設計アイデアの多くは、オレゴン大学院の研究プロジェクトから生まれました。[ 21 ]その後すぐにWim Taymans氏がプロジェクトに加わり、システムの様々な側面を大幅に拡張しました。それ以来、多くのソフトウェア開発者が貢献しています。
最初のメジャーリリースは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の開発から事実上離れ、他の事業に注力しました。
すべてのリリースシリーズにおいて、プロジェクトは困難に直面しています。どのシリーズもLinuxコミュニティではあまり人気がありません。その主な理由は、安定性の問題と、Xine、MPlayer、VLCなどの競合プロジェクトと比較して機能が著しく不足していることです。また、Erik Walthinsen氏の離脱後、プロジェクトリーダーを務めていたWim Taymans氏がプロジェクトへの参加をほぼ停止したため、リーダーシップの欠如にも悩まされています。
0.10シリーズ
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の互換性が維持されています。
2006年には、新しい安定したコアの導入によりGStreamerの人気が高まり、Totem、Rhythmbox、Bansheeなどのメディアプレーヤーに採用され、その後も多くのプレーヤーに採用されました。また、 Nokia、Motorola、Texas Instruments、Freescale、Tandberg、Intelといった企業にも採用されました。
2007 年に、GStreamer のコア開発者のほとんどが Fluendo を去りました。その中には、他の GStreamer ベテランとともにCollabora Multimedia を共同設立した GStreamer メンテナーの Wim Taymans も含まれていました。一方、他の開発者は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に特有のドキュメント (2012-06-16にアーカイブ)やチュートリアル、説明書の恩恵も受けた。
1.xシリーズ
GStreamer 1.0は2012年9月24日にリリースされました。[ 24 ] 1.xシリーズはGStreamer 0.10と並行してインストールできるため、移行が容易で、0.10シリーズに比べて多くのアーキテクチャ上の利点があります。[ 25 ]一般的に、GStreamer 1.0では以下の点で大きな改善がもたらされました。
- 組み込みプロセッサのサポート、消費電力の低減、専用ハードウェアユニット( DSPなど)への作業のオフロード
- GPUを使用したハードウェアアクセラレーションによるビデオデコード/エンコード
- ゼロコピーメモリ管理(CPUとGPU間の不要なラウンドトリップを回避)により、パフォーマンスが向上し、消費電力が削減されます。
- 動的パイプライン
- APIとコードのクリーンアップ
技術的な改良に加え、1.xシリーズは新しいリリースバージョン番号体系によって定義されます。GStreamerロードマップ[ 26 ]で説明されているように、すべての1.xyバージョンはAPIバージョンサフィックス-1.0を持ち、安定したAPI/ABIを備えています。API/ABIは新しいメジャーリリースシリーズ(例:2.x)によってのみ変更可能ですが、現時点では2.0リリースシリーズの計画はありません。それまでは、新しいバージョン番号体系を用いて各リリースの用途を予測することができます。ロードマップではいくつかの例を挙げています。
- 1.0.0、1.0.1、1.0.2、1.0.3... 安定版リリースとその後のバグ修正リリース
- 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... 安定版リリースとその後のバグ修正リリース
- 1.3.0...
- 1.4.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のサポートが強化されました。
参照
- GStreamerを使用するソフトウェアの一覧
- OggConvert – シンプルなGUIフロントエンド
- GNOME SoundConverter – デジタルオーディオファイルのトランスコード用のGStreamerとGTKに基づくGUIフロントエンド
- Pitivi – GStreamerベースのビデオエディタ
参考文献
- ^ a b「GStreamer "Slipstream" 0.1.0 リリース」。2001年1月11日。2012年11月11日時点のオリジナルよりアーカイブ。 2010年11月3日閲覧。
- ^ 「GStreamer 1.28.0 新機能リリース」 . 2026年1月28日. 2026年1月28日閲覧。
- ^ "GStreamer"、Ohloh Analysis Summary、Ohloh、2014年6月26日時点のオリジナルよりアーカイブ、 2016年11月6日閲覧。
- ^ a b「GStreamerとそのプラグインの正確なライセンス条項は何ですか?」freedesktop.org。2021年6月7日時点のオリジナルよりアーカイブ。2021年6月7日閲覧。
- ^ “Igalia Multimedia” . 2021年9月1日時点のオリジナルよりアーカイブ。2021年9月1日閲覧。
- ^ "webOS and GStreamer" . webOShelp. 2009年3月22日時点のオリジナルよりアーカイブ。2009年7月25日閲覧。
- ^ “GStreamer: ダウンロード” . gstreamer.freedesktop.org . 2015年5月10日時点のオリジナルよりアーカイブ。2015年5月15日閲覧。
- ^ “GstLALプロジェクトページ” . Wiki.ligo.org . 2020年4月23日時点のオリジナルよりアーカイブ。2019年5月6日閲覧。
- ^モジュールの概要、Gstreamer.freedesktop.org、2012年1月25日時点のオリジナルよりアーカイブ、 2012年2月8日閲覧。
- ^ GStreamer 0.9 開発シリーズ - Hung by a Thread、Gstreamer.freedesktop.org、2013年1月27日時点のオリジナルよりアーカイブ、 2013年2月24日閲覧。
- ^ 「GStreamerの優れたプラグイン」。2019年2月7日時点のオリジナルよりアーカイブ。2019年2月5日閲覧。
- ^ 「GStreamerの不適切なプラグイン」。2019年2月7日時点のオリジナルよりアーカイブ。2019年2月5日閲覧。
- ^ 「GStreamer Ugly Plug-ins」。2019年2月7日時点のオリジナルよりアーカイブ。2019年2月5日閲覧。
- ^ "subprojects/gst-libav/README.md · 47ac79d7b8cc078f4890d0ce21f47e1c1af2c736 · GStreamer / gstreamer · GitLab" . GitLab . 2021年9月24日. 2022年7月12日閲覧。
- ^ 「GStreamer OpenMAX IL wrapper plugin」 . gstreamer.freedesktop.org . 2017年7月10日時点のオリジナルよりアーカイブ。2017年7月21日閲覧。
- ^ 「Gstreamer 1.0 for raspbian」 . GRaspberrypi.org . 2017年7月10日時点のオリジナルよりアーカイブ。2017年7月21日閲覧。
- ^ 「TIハードウェア用GStreamerプラグイン」 . Processors.wiki.ti.com . 2017年6月28日時点のオリジナルよりアーカイブ。2017年7月21日閲覧。
- ^ 「Fluendo Codec Pack Release 11 で VDPAU と VAAPI がサポートされる」 2010年3月25日。2014年6月24日時点のオリジナルよりアーカイブ。
- ^ Debian Webmaster. 「Debian - wheezyのパッケージgstreamer0.10-crystalhdの詳細」 . Packages.debian.org . 2017年6月29日時点のオリジナルよりアーカイブ。 2017年7月21日閲覧。
- ^ "subprojects/gst-libav/ext/libav/gstavcodecmap.c · 47ac79d7b8cc078f4890d0ce21f47e1c1af2c736 · GStreamer / gstreamer · GitLab" . GitLab . 2022年1月16日. 2022年7月12日閲覧。
- ^ Edge, Jake (2010年10月26日). 「GStreamer: 過去、現在、そして未来」 . LWN.net . 2022年5月15日閲覧。
- ^ 「GStreamer 0.10.0 安定版リリース - 0.10 安定版シリーズの最初のリリースのお知らせ」 gstreamer.freedesktop.org . 2017年7月7日時点のオリジナルよりアーカイブ。 2017年7月21日閲覧。
- ^ 「GStreamerドキュメント」 Docs.gstreamer.com . 2016年10月28日時点のオリジナルよりアーカイブ。2017年7月21日閲覧。
- ^ 「GStreamer 1.0 リリース」 . gstreamer.freedesktop.org . 2017年7月7日時点のオリジナルよりアーカイブ。 2017年7月21日閲覧。
- ^ 「GStreamer 1.0と0.10」。Lwn.net 。 2017年6月13日時点のオリジナルよりアーカイブ。2017年7月21日閲覧。
- ^ “ReleasePlanning2013 - gstreamer Wiki” . 2013年8月15日時点のオリジナルよりアーカイブ。2013年9月16日閲覧。
- ^ “GStreamer 0.10はメンテナンスされなくなりました” . Lists.freedesktop.org . 2013年3月11日. 2017年7月10日時点のオリジナルよりアーカイブ。2017年7月21日閲覧。
- ^ 「GStreamer 1.14 リリースノート」。2018年3月20日時点のオリジナルよりアーカイブ。2018年9月8日閲覧。
- ^ 「GStreamer 1.22リリースノート」 . gstreamer.freedesktop.org . 2023年5月18日閲覧。