GStreamer の gst-launch-1.0 を使ってみる
GStreamer-1.0.2 のように Version 1.0 系になった。これまで使ったことがなかったのですが、音楽関係で遊んでみようと思い、触ってみることにした。環境は Fedora 18 alpha と Momonga trunk です。メインの Momonga はオーディオやカメラ機器を取り付けなければならないので、基本的に Ultra Book で試しています。
今回は、コマンドラインで遊びます。参考にしたのは http://www.clear-code.com/blog/2010/1/11.html と http://oss.infoscience.co.jp/gstreamer/ です。
まず、はじめにオーディオ関係からテスト。GStreamer でテスト音源をスピーカー出力してみます。最初にテスト音源を探します。
$ gst-inspect-1.0 | grep test | grep audio audiotestsrc: audiotestsrc: Audio test source
ここで使った gst-inspect-1.0 というのは、 GStreamer で利用できるエレメント(音源とかフィルタとか出力とか)を調べるプログラムです。引数なしの場合は、全部出力してくれます。音源の場合は src というものが付きます。
次に、デフォルトの出力を探します。
$ gst-inspect-1.0 | grep sink | grep audio ossaudio: osssink: Audio Sink (OSS) pulseaudio: pulsesink: PulseAudio Audio Sink inter: interaudiosink: Internal audio sink autodetect: autoaudiosink: Auto audio sink jack: jackaudiosink: Audio Sink (Jack)
基本的に、自動検出したものを使うのが楽でしょう。この sink というのが出力です。
という状態で、テスト音源を自動検出したオーディオに出力してみます。入出力をパイプでつなぐのですが、 Shell のパイプ "|" ではなく "!" というビックリマークを使います。中止は Ctrl+C です。
$ gst-launch-1.0 audiotestsrc ! autoaudiosink パイプラインを一時停止 (PAUSED) にしています... Pipeline is PREROLLING ... Pipeline is PREROLLED ... パイプラインを再生中 (PLAYING) にしています... New clock: GstPulseSinkClock ^CCaught interrupt -- handling interrupt. 割り込み: パイプラインを停止しています... Execution ended after 1502238697 ns. パイプラインを一時停止 (PAUSED) にしています...
440Hzの音が聞こえましたか?
次は ビデオ信号を出力してみます。まずは、入出力の調査から。
$ gst-inspect-1.0 | grep test | grep video videotestsrc: videotestsrc: Video test source $ gst-inspect-1.0 | grep sink | grep video debugutilsbad: fpsdisplaysink: Measure and show framerate on videosink inter: intervideosink: Internal video sink autodetect: autovideosink: Auto video sink video4linux2: v4l2sink: Video (video4linux2) Sink
テスト信号を videotestsrc 出力を autovideosink にしてテストします。終了は、 Ctrl+C または、モニタウィンドウを閉じます。
$ gst-launch-1.0 videotestsrc ! autovideosink パイプラインを一時停止 (PAUSED) にしています... Pipeline is PREROLLING ... Pipeline is PREROLLED ... パイプラインを再生中 (PLAYING) にしています... New clock: GstSystemClock ERROR: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstXvImageSink:autovideosink0-actual-sink-xvimage: Output window was closed 追加のデバッグ情報: xvimagesink.c(820): gst_xvimagesink_handle_xevents (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstXvImageSink:autovideosink0-actual-sink-xvimage Execution ended after 2001496162 ns. パイプラインを一時停止 (PAUSED) にしています... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ...
さて、 ASUS の Ultra Book には、マイクとカメラとスピーカーとモニタがあり、これらは全て自動検出されます。入力から出力に単純につなぐとマイク入力をスピーカーに、カメラ入力をモニタに出力できます。自動検出なので auto で gst-inspect-1.0 の出力を検索してみます。
$ gst-inspect-1.0 | grep auto autoconvert: autovideoconvert: Select color space convertor based on caps autoconvert: autoconvert: Select convertor based on caps autodetect: autoaudiosrc: Auto audio source autodetect: autoaudiosink: Auto audio sink autodetect: autovideosrc: Auto video source autodetect: autovideosink: Auto video sink
入力は src 出力は sink なので、オーディオは autoaudiosrc と autoaudiosink、ビデオは autovideosrc と autovideosink につないでみます。
$ gst-launch-1.0 autoaudiosrc ! autoaudiosink … $ gst-launch-1.0 autovideosrc ! autovideosink …
手元では、ビデオリフレッシュが遅いなんて警告が出ますが、 Cheese みたいなことが簡単にできました。
プログラムを書かなくても簡単に使えて楽しそうなので、どんなことができるのがちょっと調べる予定です。ただし、主にオーディオ関係だけですけどね。