このネタが GStreamer アドベントカレンダー最終日の記事としてふさわしいかどうかは別として、
アドベントカレンダー内で 環境変数 の話をしていないことに
気づいてしまったのでこれを書くことにしました!
情報源
英語を積極的に読む方は、Running GStreamer Applications を参照してください。
これから説明する内容はすべてここに書かれています。
- 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_PATH
は gst-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
出来上がった画像は↓こちら↓になります。
playbin
のなかで何が使われたかが一目瞭然ですね!
bin って中で何使ってるんだろう? と思った時にはこれで確認するのが便利です。
おわり
今回は、特に役立ちそうな環境変数についてのみ解説しましたので、
必要に応じで公式ドキュメントを参照していただければと思います。
最後に、、、
完全に日付をまたいでの投稿となってしまいましたが、
これで、2015 GStreamer アドベントカレンダー完走です!
期間中見てくださった皆さま本当にありがとうございました!!