Python GTK でビデオ再生のアプリを作りたく、VLC フレームワークを試したまでは良かったのですが、もうちょっといいのがありそうな気がして GStreamer も勉強します。
よくまとまったチュートリアルを翻訳してサンプルコードを動かす方法が、わりと自分には合っているので今回もそれで行きます。元サイトはこちらです:
このチュートリアルでは、Python バインディングを使った GStreamer 1.0 マルチメディアフレームワークについて簡単に紹介します。
1 メタ(自身への言及)
GStreamer アプリケーションは有向非巡回グラフとして構築されています。図では、これらのグラフは規約に沿って図示されます。
- 実線の長方形は GStreamer の基本的な要素を示しています。
- 角丸で実線の長方形は GStreamer の bin(およびパイプライン)を示します。ある要素のサブクラスです。
- 角丸で破線の長方形はパッドを示します。
2 イントロダクション
このチュートリアルは GStreamer についての知識を得るための手っ取り早い方法を意図していますが、私たち自身が GStreamer をまだ知らないので、書くのに時間がかかるでしょう。私たちは通常、サンプルでは GNU/Linux と GTK を使いますが、邪魔にならないように GUI コードを最小限に抑えます。GStreamer は Glib に大きく依存しているので、バスでイベントをキャッチしたい場合は Glib Mainloop が動いていることを確認する必要があります。読者は少なくともかなりまともに Python コードが書ける人であることを想定しています。Python 言語に関連する問題については、オンラインPythonドキュメントにリダイレクトします。
PyGST ソースで配布されているコーディング例もありますので、gst-python の git リポジトリを参照してみてください。GStreamer と、それに依存するその他のエコシステムのリファレンスドキュメントは、lazka の GitHub サイトで公開されています。GStreamer のメインサイトには、リファレンスマニュアル、FAQ、アプリケーション開発マニュアル、プラグインライターのためのガイドがあります。このチュートリアルは、すべての v1.x リリースが従うべき GStreamer 1.0 API を対象としています。Novacut プロジェクトには、Python アプリケーションを 0.1 API から 1.0 に移植するためのガイドがあります。最後に、GStreamer はCプログラミングチュートリアルを含む GstSDK ドキュメントを提供しています。
ご覧のように、このチュートリアルはまだ終わっていないので、このプロジェクトに参加してくれる新しい人を常に探しています。もしあなたが章を書きたい、例を修正したい、代替案を提供したい、あるいはこのドキュメントを改善したいと思っているのであれば、ぜひそうしてください。GitHub 上のリポジトリをクローンしてプル・リクエストを発行することをお勧めします。注意: このドキュメントの元のソースは"ttp://developer.berlios.de/projects/pygstdocs/“にありましたが、現在、止まっています。
2.1 コマンド・ライン
Python を使い始める前に、GStreamer に付属しているコマンド・ライン・インターフェース(CLI)プログラムをいくつか紹介します。これらのプログラムは一般的に便利なだけでなく、コードを書かなくても必要なものを素早く便利な方法で見つけたり試したりするのに役立ちます。gst-inspect を使うと、様々なプラグイン・パッケージに同梱されている高レベルの要素を追跡することができます。
man gst-inspect-1.0
要素を探しているが名前がわからない場合は、grep を使って検索することができます。mp3 などを扱う要素を取得するには、次のようにします。
gst-inspect-1.0 | grep mp3 | sort | head -3
lame: lamemp3enc: L.A.M.E. mp3 encoder
libav: avdec_mp3: libav MP3 (MPEG audio layer 3) decoder
libav: avdec_mp3adu: libav ADU (Application Data Unit) MP3 (MPEG audio layer 3) decoder
playbin 要素は、適切なプラグインがインストールされていれば、通常は何でも再生してくれるオートプラガーです。
gst-inspect-1.0 playbin > gst-inspect-playbin.txt
ここで出力例を参照してください。
gst-launch を使えば、ターミナルで直接パイプラインを実行することもできます。
man gst-launch-1.0
playbin でファイルを再生するには:
gst-launch-1.0 playbin \
uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm
“!“で要素を連結することも可能です。(※テスト用トーンが鳴りっぱなしになる。システムモニタで “gst-launch-1.0” というプロセスを終了すれば止まる)
gst-launch-1.0 audiotestsrc ! alsasink
パイプラインで異なるストリームを作ることもできます。
gst-launch-1.0 audiotestsrc ! alsasink videotestsrc ! xvimagesink
あるいは、1フレームの JPEG を作成することもできます。
gst-launch-1.0 videotestsrc num-buffers=1 ! jpegenc ! \
filesink location=videotestsrc-frame.jpg
“name” プロパティを使用している場合は、同じ要素が複数回使えます。名前の後に”.“を付けてください。oggmux の例です:
gst-launch-1.0 audiotestsrc ! vorbisenc ! oggmux name=mux ! \
filesink location=file.ogg videotestsrc ! theoraenc ! mux.
次の章では、Playbin を使った例をさらに紹介します。