LoginSignup
32
30

More than 5 years have passed since last update.

今日からから使える GStreamer の環境変数

Posted at

このネタが GStreamer アドベントカレンダー最終日の記事としてふさわしいかどうかは別として、

アドベントカレンダー内で 環境変数 の話をしていないことに
気づいてしまったのでこれを書くことにしました!

情報源

英語を積極的に読む方は、Running GStreamer Applications を参照してください。
これから説明する内容はすべてここに書かれています。

この記事で知れること

  • GStreamer アプリケーションをデバッグする上で有効な環境変数
  • GStreamer plugins の Search path を変更する方法
  • GStreamer のパイプラインを可視化する (図にする)
  • など

GStreamer 環境変数まとめ

  • GST_PLUGIN_SYSTEM_PATH
  • GST_PLUGIN_SYSTEM_PATH_1_0
  • GST_PLUGIN_PATH
  • GST_PLUGIN_PATH_1_0
  • GST_DEBUG
  • GST_DEBUG_COLOR_MODE
  • GST_DEBUG_NO_COLOR
  • GST_DEBUG_OPTIONS
  • GST_DEBUG_DUMP_DOT_DIR
  • GST_REGISTRY
  • GST_REGISTRY_1_0
  • GST_REGISTRY_FORK
  • GST_REGISTRY_UPDATE
  • GST_TRACE
  • GST_DEBUG_FILE
  • ORC_CODE
  • G_DEBUG
  • G_SLICE
  • GST_TAG_ENCODING
  • GST_TAG_ID3_ENCODING
  • GST_TAG_ID3V1_ENCODING
  • GST_GL_WINDOW
  • GST_GL_PLATFORM
  • GST_GL_API

無印 と _1_0 の違いは?

GST_PLUGIN_PATH, GST_PLUGIN_PATH_1_0 など、_1_0 が付く変数と、
付かない変数がありますが、なにが違うのでしょう?

先ほど紹介した 公式ドキュメント によれば

The GST_PLUGIN_PATH_1_0 variant is useful if both the old GStreamer 0.10 version and the new GStreamer 1.0 version need to be pointed to new plugin paths.

_1_0 を付けるのは、GStreamer 0.10 (古いバージョン) と GStreamer 1.0 (現行バージョン) の
どちらもが新しい PLUGIN_PATH を指す必要がある場合に使う。とのことです。

つまり、GStreamer 1.0 だけ使う場合や、どちらも同じ PATH を示す場合などには
GST_PLUGIN_PATH のみで足りるということになります。

指定すべきは GST_PLUGIN_SYSTEM_PATH? GST_PLUGIN_PATH?

これは、あなたの目的によります。

ビルドしたプラグインを動かしたい場合などは GST_PLUGIN_PATH です。
GStreamer をビルドし、開発バージョンの GStreamer を試したい場合は GST_PLUGIN_SYSTEAM_PATH です。

なので、アプリケーション、プラグイン開発者の多くは GST_PLUGIN_PATH を指定することになります。

GST_PLUGIN_SYSTEM_PATHgst-launch などの GStreamer アプリケーションが
プラグインを探すための Search path です。
なので、試しに GST_PLUGIN_SYSTEM_PATH をカレントディレクトリに指定すると、ほとんど見つからなくなります。

$ GST_PLUGIN_SYSTEM_PATH=`pwd` gst-inspect-1.0
staticelements:  bin: Generic bin
staticelements:  pipeline: Pipeline object

Total count: 1 plugin, 2 features

また、プラグインが探される順は GST_PLUGIN_PATH => GST_PLUGIN_SYSTEM_PATH となることを覚えておいてください。

GST_DEBUG でデバッグ情報を出す

GST_DEBUG によりデバッグレベルを上げることで、ユーザーはより多くの情報を得ることができます。
例えばqueueからは「現在のどのくらい溜まっているか」などの情報が得られます。

GST_DEBUG はランタイムで発生する問題の解析に非常に有効です。

デバッグレベルは8段階あり深刻度から順に ERROR, WARNING, FIXME, INFO, DEBUG, LOG, TRACE, MEMDUMP となっています。

gst-launch で使う場合は以下のように使用します。

$ GST_DEBUG=FIXME gst-launch-1.0 faskesrc ! fakesink

また、特定のエレメントだけデバッグレベルを上げたいこともできます。
このようにすることで、fakesink は LOG, それ以外は FIXME というような指定ができます。

$ GST_DEBUG=FIXME,fakesink:LOG gst-launch-1.0 faskesrc ! fakesink

さらに、より便利な使い方として * があります。
以下のように指定すると fakesrc, fakesink のデバッグレベルが LOG になり、queue には設定されません。

$ GST_DEBUG=fake*:LOG gst-launch-1.0 faskesrc ! queue ! fakesink

基本的にはカラーリングされて表示される GStreamer のログですが、
時には色を付けないでほしいシチュエーションが生まれます。

そのときは以下のようにすることで色を付けをやめることができます。

$ GST_DEBUG_NO_COLOR=1 GST_DEBUG=fake*:LOG gst-launch-1.0 faskesrc ! queue ! fakesink

GStreamer パイプラインの画像を生成する

画像を生成するには graphviz などの、dot ファイルから画像を出力できるアプリケーションをインストール必要があります。

パイプラインの dot ファイルは GST_DEBUG_DUMP_DOT_DIR を指定して取得します。

$ GST_DEBUG_DUMP_DOT_DIR=. gst-launch-1.0 playbin uri=file:///home/shotam/WIN_20151210_01_54_09_Pro.mp4

パイプラインを実行すると、パイプラインのSTATEごとに dot ファイルが生成されます。

$ ls
0.00.00.024948963-gst-launch.NULL_READY.dot
0.00.00.297588838-gst-launch.READY_PAUSED.dot
0.00.00.307373873-gst-launch.PAUSED_PLAYING.dot
0.00.04.267717672-gst-launch.PLAYING_PAUSED.dot
0.00.04.279790822-gst-launch.PAUSED_READY.dot

PAUSED -> PLAYING が再生しているときの dot ファイルなので、これを画像化します。

$  dot 0.00.00.307373873-gst-launch.PAUSED_PLAYING.dot -Tpng -o foo.png

出来上がった画像は↓こちら↓になります。

foo.png

playbin のなかで何が使われたかが一目瞭然ですね!
bin って中で何使ってるんだろう? と思った時にはこれで確認するのが便利です。

おわり

今回は、特に役立ちそうな環境変数についてのみ解説しましたので、
必要に応じで公式ドキュメントを参照していただければと思います。

最後に、、、

完全に日付をまたいでの投稿となってしまいましたが、
これで、2015 GStreamer アドベントカレンダー完走です!

期間中見てくださった皆さま本当にありがとうございました!!

32
30
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
32
30