免責事項
この記事は、GStreamerに精通しておらず、GStreamerについて知りたいプログラマーを対象としています。 経験豊富な開発者がこの記事で自分自身にとって新しいものを見つけることはまずありません。
前文
多くの人はおそらくGStreamerのようなものがあることを聞いた、またはUbuntuや類似のディストリビューションが様々なパッケージをインストールすることを提供しているのを聞いたでしょう。その名前にはmp3または他の「無料でない」メディア形式のファイルを再生するときに「gstreamer」が含まれます。 そのため、この特定のライブラリに焦点を当てます。
はじめに
GStreamerはマルチメディアアプリケーションを構築するための強力なフレームワークであり、オレゴン州大学院の「ビデオパイプライン」のアイデアを採用し、DirectShowから何かを取り入れました。 このフレームワークを使用すると、シンプルなコンソールプレーヤー(コードを記述せずに端末から直接ファイルを再生できます)から、本格的なオーディオ/ビデオプレーヤー、マルチメディアエディター、その他のアプリケーションに至るまで、さまざまな難易度のアプリケーションを作成できます。
GStreamerにはプラグインアーキテクチャがあり、すべてのマルチメディア開発者のニーズの99%を解決できるプラグインの非常に大きなセットが付属しています。
建築
GStreamerにはいくつかの主要コンポーネントがあります。
- アイテム
- パッド
- ビンおよびパイプラインコンテナー
そして今、より詳細に:
アイテム
GStreamerのほとんどすべてが要素です。 通常のストリームソース(filesrc、alsasrcなど)からストリームハンドラー(デマルチプレクサー、デコーダー、フィルターなど)に至るすべての出力デバイス(alsasink、fakesink、filesinkなど) 。)。
パッド
パッドは、要素を別の要素に接続する特定のポイントです。より単純な場合、これらは要素の入力と出力です。 通常、これらは「シンク」-入力および「src」-出力と呼ばれます。
要素には常に少なくとも1つのパッドがあります。 たとえば、filesrc-ファイルシステムからデータを読み取るための要素-には「src」というパッドが1つしかありません。これは、入力がないため、ファイルシステムからのストリームを他の要素が既に機能する内部表現にしか変換できないためです。 alsasink要素に加えて、「sink」と呼ばれるパッドが1つあります。これは、内部ストリームを受信し、alsaを介してサウンドカードに出力するだけだからです。 「フィルター」カテゴリ(ストリームを何らかの形で変換するもの)の要素には、2つ以上の接続ポイントがあります。 たとえば、ボリュームエレメントには「sink」という名前のパッドがあり、その上にストリームが流れ、このエレメント内で変換され(ボリュームが変化し)、「src」という名前のパッドを介してパスが続きます。 また、いくつかの入力と出力がある要素もあります。
コンテナ
コンテナ内では、要素はライフサイクルを消費します。 コンテナは、要素から要素へのメッセージの配信を制御し、要素のステータスを制御します。 コンテナは2つのタイプに分けられます。
- ビン
- パイプライン
パイプラインは最上位のコンテナであり、要素の同期を制御し、ステータスを送信します。 たとえば、パイプラインがステータスをPAUSEDに設定した場合、このステータスは内部にあるすべての要素に自動的に送信されます。 パイプラインはBin実装です。
Binは、その中にある要素から要素へのメッセージの配布を制御する単純なコンテナです。 ビンは通常、アクションを実行する必要がある要素のグループを作成するために使用されます。 たとえば、decodebinはストリームをデコードするための要素であり、データの種類(vorbisdec、theoradecなど)に応じてストリームの処理に必要な要素を自動的に選択し、開発者から追加の作業を削除します。
playbinなどの完全な自己完結型コンテナもあります。 実際、Playbinはオーディオとビデオを再生するために必要なすべての要素を含む本格的なプレーヤーですが、ご存じのように柔軟性はありません...
仕組み
原始的なプレーヤーの図の例を考えてみましょう。 最も単純なプレーヤースキームは次のようになります。
ここで何が起こっているかを考えてください。 filesrc要素は、ファイルシステムからファイルを読み取り、ストリームをdecodebinコンテナーに送信します。decodebinコンテナーは、ストリームを内部表現にデコードし、その後、ストリームをalsasink要素に送信します。alsasink要素は、オーディオストリームをサウンドカードに送信します。 このスキームを確認するには、コマンドを実行するだけです
gst-launch-1.0 filesrc location=/path/to/file.ogg ! decodebin ! alsasink
そして、あなたがあなたのメロディーを聞いたなら、すべては大丈夫です。
注釈
- gst-launch-1.0ユーティリティは、gstreamer1.0-toolsパッケージに含まれています
- OSS / Jack /などを使用する場合、このスキームは機能しない可能性があります。 したがって、alsasinkはautoaudiosink要素に置き換えることができ、それ自体がオーディオ出力に必要な要素を選択します。
次は?
将来的には、さまざまな要素とその機能を考慮した一連の記事を書く予定です。また、GStreamer機能コードの実際の使用例も示します。
参照資料
GStreamer 1.0コアリファレンスマニュアル
GStreamerアプリケーション開発マニュアル
Gstreamerの機能
次の記事