GStreamer というマルチメディアフレームワーク

# そもそも Gstreamer って何?

![gstreamer](http://gstreamer.freedesktop.org/data/images/artwork/gstreamer-logo.svg)

公式: http://gstreamer.freedesktop.org/

GStreamer はオープンソースのマルチメディアアプリケーション開発用フレームワークです。
例えば、動画のストリーミング配信、複数の動画の合成、音楽のカラオケ化など、さまざまなことができます。

# どうせ Linux でしか動かないんでしょ?

そんなことありません。現在、GStreaemer が動作するのは Linux, Android, Windows, Mac OS X, iOS... などです。

ご存じかもしれませんが、[Raspberry Pi](https://www.raspberrypi.org/), [Armadillo-800](http://armadillo.atmark-techno.com/products#a800) などの、Linux が乗った組み込みボードでも動きます。

また、プラットフォームに依存する部分がキレイに切り分けられているため、最初は PC で開発してARMボードやAndroidアプリへポーティングするといった手法も取ることができます。

# GStreamer が提供してくれるもの

GStreamer が提供くれる範囲は青い部分です。

![Overview](https://gstreamer.freedesktop.org/documentation/application-development/introduction/images/gstreamer-overview.png)

- an API for multimedia applications
- a plugin architecture
- a pipeline architecture
- a mechanism for media type handling/negotiation
- a mechanism for synchronization
- over 250 plug-ins providing more than 1000 elements
- a set of tools

ここで注目ほしいのは、GStreamer が **Pipeline architecture** を提供するということ、1000 以上のエレメントが用意されているということです。

なので、アプリ開発者はこの Pipeline architecture に従い、Element を組み合わせ、Pipeline を作ればコアな部分を完成させることができます。

用意されているエレメントは[Overview of available plug-ins](http://gstreamer.freedesktop.org/documentation/plugins.html)から見れるので欲しい機能があるかを眺めてみてください。

もちろん、Element 自体を開発するためのマニュアル [Plugin Writer's Guide](http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/index.html) というのも用意されています。

# 強力なツール

GStreamer はライブラリですが、`gst-launch`や`gst-inspect`というツールが用意されているため、簡単なマルチメディアアプリであればゼロコーディング(?)で作成することができます。

例えば、音楽ファイルを再生するだけならばこれでOKです。

```shell-session
$ gst-launch-1.0 filesrc location=music.mp3 ! decodebin ! audioconvert ! autoaudiosink
```

`gst-launch-1.0` がツール。`filesrc`, `decodebin`, `audioconvert`, `autoaudiosink` が Plugin に含まれる Element と Bin で、`location=` は `filesrc` のプロパティです。

シェルで `|` を使ってコマンドの処理結果を渡していくように、 GStreamer では Element の処理結果を `!` で次の Element に渡していきます。

> ちなみに、Bin は複数の Element がまとまったもののことを指します。
> 詳しくはこちら: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-intro-basics-bins.html

gst-launch に与える Element や Bin を探すには、[Overview of available plug-ins](http://gstreamer.freedesktop.org/documentation/plugins.html)を参照する以外に、`gst-inspect` というものがあります。

filesrc に `location` 以外にどんなプロパティがあるのかなどを調べることができます。

```shell-session
$ gst-inspect-1.0 filesrc
```

# はじめるには?

GStreamer のインストールは簡単です。Windows であればインストーラーが用意されていますし、OS Xであれば `brew` でインストールできますし、Linux であれば各パッケージマネージャ(aptやyum,pacmanなど)からインストールすることができます。詳しくは `Installing GStreamer` を参照してください。

> Installing GStreamer | GStreamer documentation
> 
> https://gstreamer.freedesktop.org/documentation/installing/index.html

GStreamer のインストールが終わったらまずは、[GStreamer Application Development Manual](http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/index.html) を読んでみるといいでしょう。

中でも、[Part 1. About GStreamer](http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/part-introduction.html) は大切です。あなたが`gst-launch`しか使わなくとも読んでおくべきです。

Applicaiton Development Manual が少々退屈になってきたら、[チュートリアル](https://gstreamer.freedesktop.org/documentation/tutorials/index.html)を使って GStreamer を体で覚えましょう。

[Basic tutorials](https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html) を通して行うことで C言語 で GStreamer アプリケーションが書けるようになります。

# まとめ

この記事で紹介したかったことは3つ

- GStreamer は複数のプラットフォームで動くマルチメディアフレームワーク
- ツールが充実しているのでプロトタイプ作りは超簡単
- ドキュメントも整備されているので勉強もしやすい (英語だけど)

以上、最後まで読んでくださりありがとうございました！