目的
Gstreamerを使ったアプリケーションの開発が始まってきたので、自分でエレメントを作成できるようになるまでにやったことをメモ書きする
目次
- Gstreamerとは
- Pythonでのプラグイン作成
- C++でのElement作成
Gstreamerとは
概要
GStreamer(ジーストリーマー)は、フリー(ライセンスはLGPL)のマルチメディアフレームワーク。
C言語で記述され、主にUNIXで開発されている。ビデオ編集ソフトやストリーミング、そしてメディアプレーヤーなどのようなマルチメディアアプリケーションのベースとなる機能を提供する。クロスプラットフォームとなるよう設計されており、Linux (x86, PowerPC, ARM)、Solaris (x86, SPARC)、OpenSolaris、FreeBSD、OpenBSD、macOS!、Windows、OS/400上で動く。GStreamerではユーザーがライブラリを組み合わせてグラフ構造の処理パイプラインを1から構築する必要がある[1][2]。
核となる部分以外では、プラグインのライブラリ群で構成されている。 動的にロードされ、種々のコーデック、コンテナフォーマット、出力ドライバをサポートしている。 他のプログラミング言語では、Python、Vala、C++、Perl、GNU Guile、Rubyなどにバインディングされている。
図解で示すとGstreamerは複数のElementをPipelineでつないで一つのアプリケーションとして実行できる物と理解した。
- Element: Gstreamerプラグインをロードして実行できる要素単位
- Pad: 各要素を繋ぐための接続部。
src
が出力、sink
が入力となる - property: Elementを実行する際に設定するパラメータ
- capabirity: Element同士を繋ぐパイプラインのデータ型
使用方法
gst-inspect-1.0
Gstreamerプラグインの情報を表示するコマンド
# 読み込み可能なプラグインのリストを表示
gst-inspect-1.0
# 各プラグインの詳細を表示
gst-inspect-1.0 <plugin name>
プラグイン詳細の表示例が以下です
Pad Templates:
SINK template: 'sink'
Availability: Always
Capabilities:
# <capability type>
SRC template: 'src'
Availability: Always
Capabilities:
# <capability type>
Element has no clocking capabilities.
Element has no URI handling capabilities.
Pads:
SINK: 'sink'
Pad Template: 'sink'
SRC: 'src'
Pad Template: 'src'
Element Properties:
# <property name> : property description
gst-launch-1.0
Gstreamerパイプラインを起動するためのコマンド
gst-launch-1.0
コマンドの使用方法を以下に示す
コマンドのつなげ方として プラグイン名 + プロパティ + ! + キャパビリティを繰り返すことでパイプラインを作成する。
この際、前後のプラグインのキャパビリティは同じに設定できる必要がある。
# USBカメラから映像を取得してXウインドウに表示するコマンド
gst-launch-1.0 v4l2src device="/dev/video0" ! "video/x-raw,width=640,height=480" ! videoconvert ! ximagesink sync=false
次へ
次はPythonを使ったプラグインを作成します
Pythonでのプラグイン作成