1
0

Gstreamerエレメントを自作するまで - Gstreamerとは -

Last updated at Posted at 2023-10-17

目的

Gstreamerを使ったアプリケーションの開発が始まってきたので、自分でエレメントを作成できるようになるまでにやったことをメモ書きする

目次

  1. Gstreamerとは
  2. Pythonでのプラグイン作成
  3. C++でのElement作成

Gstreamerとは

概要

引用: GStreamer:Wikipedia

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.drawio.png

使用方法

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コマンドの使用方法を以下に示す
コマンドのつなげ方として プラグイン名 + プロパティ + ! + キャパビリティを繰り返すことでパイプラインを作成する。

この際、前後のプラグインのキャパビリティは同じに設定できる必要がある。

command.drawio.png

# USBカメラから映像を取得してXウインドウに表示するコマンド
gst-launch-1.0 v4l2src device="/dev/video0" ! "video/x-raw,width=640,height=480" ! videoconvert ! ximagesink sync=false

次へ

次はPythonを使ったプラグインを作成します
Pythonでのプラグイン作成

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0