Gストリーマー

Gストリーマー
開発者GStreamer チーム
初回リリース2001年1月11日[ 1 ] (2001年1月11日
安定版リリース
1.28.0 [ 2 ] ウィキデータで編集する / 2026年1月28日
リポジトリ
書かれたC [ 3 ]
オペレーティング·システムBSDOpenSolarisLinuxAndroidmacOSiOSWindowsOS/400
タイプマルチメディアフレームワーク
ライセンスLGPL-2.1以降[ 4 ]
Webサイトgstreamer .freedesktop .org

GStreamerは、パイプラインベースのマルチメディアフレームワークであり、様々なメディア処理システムを連携させることで複雑なワークフローを実現します。例えば、GStreamerを使えば、ある形式のファイルを読み込み、処理を行い、別の形式でエクスポートするシステムを構築できます。これらの形式と処理は、プラグアンドプレイ方式で簡単に変更できます。

GStreamerは、シンプルなオーディオ再生、オーディオとビデオの再生、録画ストリーミング、編集など、幅広いメディア処理コンポーネントをサポートしています。パイプライン設計は、ビデオエディタートランスコーダー、ストリーミングメディアブロードキャスター、メディアプレーヤーなど、さまざまな種類のマルチメディアアプリケーションを作成するための基盤として機能します。

BSDOpenSolarisLinuxAndroidmacOSiOSWindowsOS/400など、さまざまなオペレーティング システムで動作するように設計されています。

GStreamerはLGPL 2.1以降[ 4 ]の規約に従う無料のオープンソースソフトウェアであり、 freedesktop.orgでホストされています。

配布と採用

GStreamerのヘビーユーザーであるGNOMEデスクトップ環境は、GNOMEバージョン2.2以降GStreamerを搭載しており、GNOMEおよびGTKアプリケーションでの使用を推奨しています。PhononメディアフレームワークやSongbirdメディアプレーヤーなど他のプロジェクトでもGStreamerを使用またはサポートしています。また、 WebKitブラウザエンジンでも使用されています。[ 5 ]

GStreamerは、 Jolla PhonePalm Pre[ 6 ] TizenMaemoオペレーティングシステムを実行するNokia 770N800N810N900N9インターネットタブレットなどの組み込みデバイスでも動作します。

GStreamerプロジェクトは、ソースコードのリリースに加えて、Android、iOS、OSX、Windows用のバイナリビルドも提供しています。[ 7 ]

LIGO研究所は重力波データのシミュレーションと解析にGStreamerを利用しています。GStreamerインターフェースはGstLALと呼ばれています。 [ 8 ]

ソフトウェアアーキテクチャ

概要
3種類のプラグインを備えたGStreamerコア
GStreamer はパイプラインです。

GStreamer は、GObjectと GLib 2.0 オブジェクト モデル に基づく型システムを使用してC プログラミング言語で記述されています。

言語バインディング

あるプログラミング言語で書かれたライブラリは、バインディングが書かれていれば別の言語でも使用できます。GStreamer には、 GoPythonRustValaC++PerlGNU GuileC#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 ] )があります。

ビデオアクセラレーション

GStreamer は、Texas Instruments が提供する特別なプラグインを通じて、 Texas Instruments DaVinciなどが提供するハードウェア アクセラレーションを利用します。

PureVideoUVDQuickSync VideoTI Ducatiなど、特定のビデオコーデックをデコードするための計算を実行できる様々なSIPブロックがあります。これらのブロックはデバイスドライバによってサポートされている必要があり、デバイスドライバはMPlayerなどのエンドユーザーソフトウェアに VDPAUVAAPIDistributed Codec EngineDXVAなどの1つまたは複数のインターフェースを提供し、これらのインターフェースを介してハードウェアにアクセスし、計算をオフロードします。

メディアフォーマット

前述のGood, Bad and Ugly GStreamerプラグインは、あらゆる種類の処理要素/フィルタに加え、幅広いファイル形式、プロトコル、マルチメディアコーデックをサポートしています。さらに、100種類以上の圧縮形式(MPEG-1MPEG-2MPEG-4H.261H.263H.264RealVideoMP3WMVなど[ 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コミュニティではあまり人気がありません。その主な理由は、安定性の問題と、XineMPlayerVLCなどの競合プロジェクトと比較して機能が著しく不足していることです。また、Erik Walthinsen氏の離脱後、プロジェクトリーダーを務めていたWim Taymans氏がプロジェクトへの参加をほぼ停止したため、リーダーシップの欠如にも悩まされています。

0.10シリーズ

2004年、 Fluendoという新しい会社が設立されました。同社はGStreamerを用いてストリーミングサーバーFlumotionを開発し、GStreamer向けのマルチメディアソリューションも提供することを目指していました。この間、FluendoはWim Taymansを含むコア開発者のほとんどを雇用し、NokiaIntelなどの企業の支援を得て、GStreamerをプロフェッショナルレベルに引き上げ、コミュニティでの普及を促進しました。

Wim Taymansが指揮を執り、GStreamerの中核部分が再設計され、現在の0.10.xシリーズとなり、2005年12月に最初のリリース(0.10.0)が行われました。 [ 22 ]それ以来、 APIABIの互換性が維持されています。

2006年には、新しい安定したコアの導入によりGStreamerの人気が高まり、TotemRhythmboxBansheeなどのメディアプレーヤーに採用され、その後も多くのプレーヤーに採用されました。また、 NokiaMotorolaTexas InstrumentsFreescaleTandbergIntelといった企業にも採用されました。

2007 年に、GStreamer のコア開発者のほとんどが Fluendo を去りました。その中には、他の GStreamer ベテランとともにCollabora Multimedia を共同設立した GStreamer メンテナーの Wim Taymans も含まれていました。一方、他の開発者はSun MicrosystemsOblong IndustriesSongbirdに加わりました。

2012年6月から2014年8月の間、GStreamer 0.10はCollaboraFluendoによってマルチプラットフォーム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では以下の点で大きな改善がもたらされました。

技術的な改良に加え、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 ] WebRTCAV1Nvidia NVDECSecure Reliable Transportのサポートなどの変更が追加されました。

バージョン1.22は2023年1月23日にリリースされ、[ 29 ]アダプティブビットレートストリーミングのための HLSDASHMicrosoft Smooth Streamingのサポートに加えて、AV1のサポートが強化されました。

参照

参考文献

  1. ^ a b「GStreamer "Slipstream" 0.1.0 リリース」。2001年1月11日。2012年11月11日時点のオリジナルよりアーカイブ。 2010年11月3日閲覧
  2. ^ 「GStreamer 1.28.0 新機能リリース」 . 2026年1月28日. 2026年1月28日閲覧
  3. ^ "GStreamer"Ohloh Analysis SummaryOhloh2014年6月26日時点のオリジナルよりアーカイブ、 2016年11月6日閲覧。
  4. ^ a b「GStreamerとそのプラグインの正確なライセンス条項は何ですか?」freedesktop.org2021年6月7日時点のオリジナルよりアーカイブ2021年6月7日閲覧
  5. ^ “Igalia Multimedia” . 2021年9月1日時点のオリジナルよりアーカイブ2021年9月1日閲覧。
  6. ^ "webOS and GStreamer" . webOShelp. 2009年3月22日時点のオリジナルよりアーカイブ2009年7月25日閲覧。
  7. ^ “GStreamer: ダウンロード” . gstreamer.freedesktop.org . 2015年5月10日時点のオリジナルよりアーカイブ2015年5月15日閲覧。
  8. ^ “GstLALプロジェクトページ” . Wiki.ligo.org . 2020年4月23日時点のオリジナルよりアーカイブ2019年5月6日閲覧。
  9. ^モジュールの概要、Gstreamer.freedesktop.org、2012年1月25日時点のオリジナルよりアーカイブ、 2012年2月8日閲覧。
  10. ^ GStreamer 0.9 開発シリーズ - Hung by a Thread、Gstreamer.freedesktop.org、2013年1月27日時点のオリジナルよりアーカイブ、 2013年2月24日閲覧。
  11. ^ 「GStreamerの優れたプラグイン」2019年2月7日時点のオリジナルよりアーカイブ2019年2月5日閲覧。
  12. ^ 「GStreamerの不適切なプラグイン」2019年2月7日時点のオリジナルよりアーカイブ2019年2月5日閲覧。
  13. ^ 「GStreamer Ugly Plug-ins」2019年2月7日時点のオリジナルよりアーカイブ2019年2月5日閲覧。
  14. ^ "subprojects/gst-libav/README.md · 47ac79d7b8cc078f4890d0ce21f47e1c1af2c736 · GStreamer / gstreamer · GitLab" . GitLab . 2021年9月24日. 2022年7月12日閲覧
  15. ^ 「GStreamer OpenMAX IL wrapper plugin」 . gstreamer.freedesktop.org . 2017年7月10日時点のオリジナルよりアーカイブ2017年7月21日閲覧。
  16. ^ 「Gstreamer 1.0 for raspbian」 . GRaspberrypi.org . 2017年7月10日時点のオリジナルよりアーカイブ2017年7月21日閲覧。
  17. ^ 「TIハードウェア用GStreamerプラグイン」 . Processors.wiki.ti.com . 2017年6月28日時点のオリジナルよりアーカイブ2017年7月21日閲覧。
  18. ^ 「Fluendo Codec Pack Release 11 で VDPAU と VAAPI がサポートされる」 2010年3月25日。2014年6月24日時点のオリジナルよりアーカイブ
  19. ^ Debian Webmaster. 「Debian - wheezyのパッケージgstreamer0.10-crystalhdの詳細」 . Packages.debian.org . 2017年6月29日時点のオリジナルよりアーカイブ。 2017年7月21日閲覧
  20. ^ "subprojects/gst-libav/ext/libav/gstavcodecmap.c · 47ac79d7b8cc078f4890d0ce21f47e1c1af2c736 · GStreamer / gstreamer · GitLab" . GitLab . 2022年1月16日. 2022年7月12日閲覧
  21. ^ Edge, Jake (2010年10月26日). 「GStreamer: 過去、現在、そして未来」 . LWN.net . 2022年5月15日閲覧
  22. ^ 「GStreamer 0.10.0 安定版リリース - 0.10 安定版シリーズの最初のリリースのお知らせ」 gstreamer.freedesktop.org . 2017年7月7日時点のオリジナルよりアーカイブ。 2017年7月21日閲覧
  23. ^ 「GStreamerドキュメント」 Docs.gstreamer.com . 2016年10月28日時点のオリジナルよりアーカイブ2017年7月21日閲覧。
  24. ^ 「GStreamer 1.0 リリース」 . gstreamer.freedesktop.org . 2017年7月7日時点のオリジナルよりアーカイブ。 2017年7月21日閲覧
  25. ^ 「GStreamer 1.0と0.10」。Lwn.net 。 2017年6月13時点のオリジナルよりアーカイブ2017年7月21日閲覧。
  26. ^ “ReleasePlanning2013 - gstreamer Wiki” . 2013年8月15日時点のオリジナルよりアーカイブ2013年9月16日閲覧。
  27. ^ “GStreamer 0.10はメンテナンスされなくなりました” . Lists.freedesktop.org . 2013年3月11日. 2017年7月10日時点のオリジナルよりアーカイブ2017年7月21日閲覧。
  28. ^ 「GStreamer 1.14 リリースノート」2018年3月20日時点のオリジナルよりアーカイブ2018年9月8日閲覧。
  29. ^ 「GStreamer 1.22リリースノート」 . gstreamer.freedesktop.org . 2023年5月18日閲覧