GStreamer には、アプリケーション開発を容易にするためのハイレベルなコンポーネントが多数付属しています。この章で取り上げるコンポーネントはすべて (現時点では)、メディアの再生を目的としたものです。各コンポーネントは、可能な限り密接な形での GStreamer パイプラインとの統合を可能にしつつ、パートIIIGStreamer アプリケーション開発マニュアル 日本語訳 (0.10.25.1) で取り上げたメディアの種類の認識やその他の面倒な側面を隠蔽することを目的に作られています。
現在、プログラマに対して推奨されるのは、それぞれのニーズに応じて、playbin (項19.1 を参照) か decodebin (項19.2 を参照) のいずれかを使用することです。playbin は、動作するだけでよいという形でのメディアの簡単な再生に類するあらゆる処理に向いています。decodebin は、プレイリストのサポート、音声トラックのクロスフェードなど、もう少し高度な機能を利用することができ、より柔軟性の高いオートプラッガです。ただし、decodebin のプログラミングインタフェースは playbin のそれよりいくらか低レベルなものになります。
playbin は、GStreamer の標準 API (gst_element_factory_make () など) を使って作成できるエレメントです。そのファクトリは便宜的に "playbin" と名付けられています。playbin は、GstPipeline (および、これを受けて GstElement ) なので、このクラスの機能のすべてが自動的にサポートされます。サポートされる機能には、エラーの処理、タグのサポート、状態の処理、ストリームの位置の取得、シークなどがあります。
playbin パイプラインのセットアップは簡単で、playbin エレメントのインスタンスを作成し、playbin の "uri" プロパティを使ってファイルの場所を設定し、次に、playbin エレメントを GST_STATE_PLAYING 状態にするだけです (場所は、有効な URI、すなわち "<protocol>://<location>" である必要があります。たとえば、file:///tmp/my.ogg、http://www.example.org/stream.ogg などです)。内部では、playbin は指定されたメディアの場所を再生するためのパイプラインをセットアップします。
#include <gst/gst.h>
[.. my_bus_callback をここに記述 ..]
gint
main (gint argc,
gchar *argv[])
{
GMainLoop *loop;
GstElement *play;
GstBus *bus;
/* init GStreamer */
gst_init (&argc, &argv);
loop = g_main_loop_new (NULL, FALSE);
/* make sure we have a URI */
if (argc != 2) {
g_print ("Usage: %s <URI>\n", argv[0]);
return -1;
}
/* set up */
play = gst_element_factory_make ("playbin", "play");
g_object_set (G_OBJECT (play), "uri", argv[1], NULL);
bus = gst_pipeline_get_bus (GST_PIPELINE (play));
gst_bus_add_watch (bus, my_bus_callback, loop);
gst_object_unref (bus);
gst_element_set_state (play, GST_STATE_PLAYING);
/* now run */
g_main_loop_run (loop);
/* also clean up */
gst_element_set_state (play, GST_STATE_NULL);
gst_object_unref (GST_OBJECT (play));
return 0;
}
playbin は、すでに説明した多くの機能を備えています。
設定の可能な動画および音声出力 ("video-sink" プロパティ、"audio-sink" プロパティを使用)。
エラーの処理、ストリームの最後の処理、タグの処理、(GstBus を通じての) 状態の処理、メディアの位置の処理、シークなど、GstElement としてほとんどがコントロール可能かつ追跡可能。
ネットワークソースのバッファリング。バッファがいっぱいになった場合は、GstBus を通じて通知される。
音声のみのメディアの視覚化をサポート。
メディア内および独立したファイルの両方による字幕をサポート。独立した字幕ファイルの場合には、"suburi" を使用します。
ストリームの選択と無効化のサポート。メディアに複数の音声トラックまたは字幕トラックがある場合、どのトラックを再生するかを動的に選択したり、特定のトラックを無効にしたり (特に字幕をオフにする場合に便利です) できます。各トラックに対し、"current-text" プロパティおよびその他の関連プロパティを使用します。
gst-launch-0.10 playbin uri=file:///path/to/file というコマンドを実行すると、"playbin" をコマンドラインでテストできるので便利です。
新しいアプリケーションでは、古い playbin の代わりに playbin2 を使う必要があります。