GStreamer は OSS (LGPL)の各種コーデックを搭載したマルチメディアフレームワークです。前回は ALSA の紹介をしましたが GStreamer でも alsa-library や alsa-core といった ALSA の機能を利用しています。
GStreamerのインストール
コマンドラインでコーデック機能, ファイルIO, 加工処理がプラグインによって行えます。
ストリーミングサーバとしての機能はプラグインで提供されています。本格的なストリーミングサーバを作る時は個人的には Live555 を使うことをオススメします。
プラグインは品質が高いものから good, bad, ugly に分類されています。ugly の使用にはライセンスや品質面で注意が必要です。
最新は 1.4.0(2014/07/21) で 1.x系は Stable版 となっています。
Linuxディストリビューションに初めからインストールされているのは 0.1x 系で, No Maintenanceのようです。
# centos 6.5 is already installed.
$ gst-inspect --version
gst-inspect-0.10 version 0.10.29
GStreamer 0.10.29
https://download.fedora.redhat.com/fedora
$ gst-typefind --version
gst-typefind-0.10 version 0.10.29
GStreamer 0.10.29
https://download.fedora.redhat.com/fedora
$ gst-launch --version
gst-launch-0.10 version 0.10.29
GStreamer 0.10.29
https://download.fedora.redhat.com/fedora
ubuntu 14.04では apt-get でインストールします。
# ubuntu 14.04
$ sudo apt-get install gstreamer-tools
$ gst-launch --version
gst-launch-0.10 version 0.10.36
GStreamer 0.10.36
https://launchpad.net/distros/ubuntu/+source/gstreamer0.10
GStreamerの基本機能
GStreamerを使う上で必要な基本的な機能は以下の5つです。
Source
ファイルやストリームからマルチメディアのデータを読み取る機能です。
例えば, v4l2src を使うと v4l2 を叩いてカメラから撮影した動画を取り込むことができます。
Demultiplexer
コンテナから映像データや音声データを取り出す機能です。
例えば, AVIコンテナから MotionJPEG を取り出すことができます。
逆の操作を mux と呼び ffmux_mp4 で AACデータ を MP4コンテナ に格納することもできます。
Parser
デコーダ・エンコーダに対してユニットの区切りを探してデータを分割する機能です。
Decoder
エンコードされたメディア・データの復号を行います。
Sink
メディア・データをファイルやデバイスに対して出力します。alsasink は ALSA に対して出力するプラグインです。
GStreamerを使ってみる
コマンドラインツールで gst-launch で機能を使う事ができます。
GStreamerでは pipe のような機能で処理を連結させることでメディア・データを操作します。
element
elementはマルチメディアのを処理するもので, 複数の element をつなぎ合わせて目的の機能を実現します。element を link させて chain を作成します。
pad
pad は element の入力と出力で element 間のリンクとデータフローのネゴシエーションを行うのに使われます。
マルチメディアのデータは、このpadを経由して element 間を移動します。GStreamer のデータは element 間の link に沿って一方向に流れます。source pad を経由して流れ出し, sink pad を経由して入ってくるデータを受け入れます。
state
PLAYING は処理を行っている状態, PAUSED はデータの入出力が開始できる状態, READY は初期化が終了しメモリが確保された状態 , NULL はメモリが確保されていない状態です。
event
EOS はファイルの最後に到達した時のイベント, SEEK は処理中のデータで別の位置にジャンプするときに発生するイベントです。
gst-launch を使ってみます。 以下でテスト音声 (440Hz) が再生されます。
$ gst-launch audiotestsrc ! autoaudiosink
テスト映像を再生します。
$ gst-launch-1.0 videotestsrc ! autovideosink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
^Chandling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 0:00:47.024123809
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
gstreamer-conference-2014は10月にドイツで開催されるようです。