第 17章オートプラッギング

第10章では、Ogg/Vorbis ファイルに対応したシンプルなメディアプレーヤーの作成方法を学びました。このときと別のエレメントを使えば、Ogg/Speex や MP3、さらに各種の動画形式など、ほかのメディアの種類に対応したメディアプレーヤーも作成できます。しかし、そうした方法で新しくメディアプレーヤーを作成するよりも、ストリームのメディアの種類を自動的に認識して、システムに用意されているすべての利用可能なエレメントを調べ、最良のパイプラインを自動的に生成可能なアプリケーションを構築した方がはるかに有益でしょう。このような仕組みのことをオートプラッギングと呼びます。GStreamer には各種の高品質なオートプラッガが含まれています。オートプラッガについて詳しく知りたい場合は、この先は読まずに第19章に進んでください。この章では、オートプラッギングと型情報取得 (typefind) のコンセプトについて説明します。具体的には、GStreamer がメディアストリームの種類を動的に認識するためにどのようなシステムを用意しているか、複数のデコーダエレメントからなるパイプラインをどのように生成して、目的のメディアを再生できるようにしているかについて説明します。再生の場合の原則は、変換の場合にも同様にあてはまります。このコンセプトは完全に動的なものなので、GStreamer を自動的に拡張して新しいメディアの種類をサポートするようにすることができ、その場合でも、調整のためにオートプラッガに手を加える必要は一切ありません。

最初に、メディアストリームを識別する動的で拡張可能な手段としての MIME 型のコンセプトについて説明します。次に、メディアストリームの種類を見つけるための型情報取得のコンセプトについて説明します。最後に、オートプラッギングと GStreamer レジストリを使って、メディアをデコードする場合など、メディアの MIME 型を別の MIME 型に変換する方法について説明します。

17.1. ストリームを識別する手段としての MIME 型

データをエレメントから次のエレメントへとストリーミングするときに、関係するエレメント (より正確にはパッド) が同じメディアの種類に対応しているかどうかを確認する方法としてのケイパビリティのコンセプトについては、すでにふれました (項8.2 を参照)。その際、ケイパビリティは MIME 型と一連のプロパティの組み合わせであることを説明しました。ほとんどのコンテナ形式 (ハードディスク上のファイルの形式など。たとえば、Ogg はコンテナ形式です) では、ストリームを記述するためのプロパティは必要ありません。必要なのは MIME 型だけです。MIME 型および MIME 型に付随するプロパティの完全なリストは、『Plugin Writer's Guide』にあります。

エレメントは、システムにロードされるときに、自分の持つソースパッドとシンクパッドに MIME 型を関連付けなければなりません。GStreamer はさまざまなエレメントについて、また、これらのエレメントが期待するデータの種類、およびこれらのエレメントが GStreamer レジストリを通じて処理可能として公開しているデータの種類について知っています。このため、以下で示すように、非常に動的で拡張可能なエレメントの作成が可能になっています。

第10章では、Ogg/Vorbis ファイルに対応したミュージックプレーヤーの作成方法を学びました。このプレーヤーのパイプラインの各パッドに関連付けられている MIME 型をみてみましょう。図17-1 は、パイプラインの各パッドに属する MIME 型を示したものです。

図 17-1. "hello world" パイプラインの MIME 型

GStreamer が既知のメディアストリームを識別する方法については、これである程度感触をつかむことができたので、今度はメディア処理とメディアの種類の認識を行うために、GStreamer がどのような方法でパイプラインのセットアップを行っているのかをみてみましょう。