第 19章コンポーネント

GStreamer には、アプリケーション開発を容易にするためのハイレベルなコンポーネントが多数付属しています。この章で取り上げるコンポーネントはすべて (現時点では)、メディアの再生を目的としたものです。各コンポーネントは、可能な限り密接な形での GStreamer パイプラインとの統合を可能にしつつ、パートIIIGStreamer アプリケーション開発マニュアル 日本語訳 (0.10.25.1) で取り上げたメディアの種類の認識やその他の面倒な側面を隠蔽することを目的に作られています。

現在、プログラマに対して推奨されるのは、それぞれのニーズに応じて、playbin (項19.1 を参照) か decodebin (項19.2 を参照) のいずれかを使用することです。playbin は、動作するだけでよいという形でのメディアの簡単な再生に類するあらゆる処理に向いています。decodebin は、プレイリストのサポート、音声トラックのクロスフェードなど、もう少し高度な機能を利用することができ、より柔軟性の高いオートプラッガです。ただし、decodebin のプログラミングインタフェースは playbin のそれよりいくらか低レベルなものになります。

19.1. 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 は、すでに説明した多くの機能を備えています。

gst-launch-0.10 playbin uri=file:///path/to/file というコマンドを実行すると、"playbin" をコマンドラインでテストできるので便利です。

新しいアプリケーションでは、古い playbin の代わりに playbin2 を使う必要があります。