次の方法で共有


トポロジについて

トポロジは、パイプライン内でデータがどのように流れるかを表すオブジェクトです。 アプリケーションは、各ストリームがメディア ソースからメディア シンクへのパスを記述するトポロジを作成します。 アプリケーションはトポロジをメディア セッションに渡し、メディア セッションはトポロジを使用してデータ フローを制御します。

パイプライン内のデータ処理コンポーネント (メディア ソース、変換、メディア シンク) は、トポロジで ノードとして表されます。 あるコンポーネントから別のコンポーネントへのデータ フローは、ノード間の接続によって表されます。 次のノードタイプが定義されています。

  • ソース ノード: メディア ソース上のメディア ストリームを表します。
  • 変換ノード: Media Foundation 変換 (MFT) を表します。
  • 出力ノード: メディア シンク上のストリーム シンクを表します。
  • Tee ノード: ストリーム内のフォークを表します。 Tee ノードは、ノードがパイプライン オブジェクトを表すというルールの例外です。 他のノードタイプとは異なり、ティーノードは単にデータのフローを指示します。

機能しているトポロジには、1 つ以上の変換ノードを介して出力ノードに接続された少なくとも 1 つのソース ノードが含まれている必要があります。 たとえば、次の図は、1 つのストリームを含む単純なトポロジを示しています。

1 つのストリームを含むトポロジを示す図。

ファイル再生の場合、変換ノードはデコーダーを表し、出力ノードはオーディオまたはビデオ レンダラーを表します。 ファイル エンコードの場合、変換ノードはエンコーダーを表し、出力ノードは ASF ファイル シンクなどのアーカイブ シンクを表します。

2 つのノードが接続されている場合、データを生成するノードは アップストリーム ノードと呼ばれ、データを受信するノードは ダウンストリーム ノードと呼ばれます。 たとえば、前の図では、ソース ノードは変換ノードのアップストリームです。

接続されたノードのペアでは、アップストリーム ノード上の接続ポイントは 出力と呼ばれます。 ダウンストリーム ノードの接続ポイントは 、入力と呼ばれます。 次の図は、接続ポイントを持つノードのペアと、それらの間のデータフローを示しています。 接続ポイントは、トポロジ内で個別のオブジェクトとして表されません。 これらは、ノード オブジェクトのインデックス値によって指定されます。

2 つの接続されたノードを示す図。

ソース ノードには入力を含めることはできません。 そのため、ソース ノードから上流にノードを作成することはできません。 同様に、出力ノードに出力を含めることはできません。また、出力ノードから下流にノードを作成することもできません。 ソース ノードから出力ノードへのノードのチェーンは、トポロジの 分岐 と呼ばれます。 このトピックの最初の図は、1 つのブランチを持つトポロジを示しています。 一般に、ストリームごとに 1 つのブランチがあります。 たとえば、1 つのオーディオ ストリームと 1 つのビデオ ストリームでファイルを再生するには、2 つのブランチを持つトポロジが必要です。

部分トポロジ

完全なトポロジまたは 完全な トポロジには、必要なすべてのパイプライン オブジェクトのノードが含まれています。 ただし、アプリケーションは常に完全なトポロジを作成する必要はありません。 代わりに、1 つ以上の変換ノードを省略する 部分 トポロジが作成されます。

メディア セッションは、トポロジ ローダーと呼ばれるオブジェクトを使用してトポロジを完了 します。 トポロジ ローダーは、必要な変換を挿入することで、部分トポロジを完全なトポロジに変換します。 変換のプロセスは、トポロジ の解決 と呼ばれます。

たとえば、エンコードされたオーディオ ストリームを再生するには、トポロジにソース ノードと出力ノードの間にデコーダーが必要です。 アプリケーションは、デコーダーを使用せずに、ソース ノードを出力ノードに直接接続する部分トポロジを作成します。 トポロジ ローダーは、ストリーム形式を調べ、適切なデコーダーを見つけ、変換ノードをトポロジに挿入します。

次の図は、アプリケーションによって作成された部分トポロジを示しています。

ソース ノードと出力ノードを含む部分を示す図。

次の図は、トポロジ ローダーによって解決された後の完全なトポロジを示しています。 この例では、トポロジ ローダーによってデコーダーの変換ノードが挿入されています。

完全なトポロジを示す図。

Media Foundation の現在のバージョンでは、トポロジ ローダーは再生用のトポロジをサポートしています。 ファイル エンコードやその他のシナリオでは、アプリケーションで完全なトポロジを構築する必要があります。

アプリケーションでは、トポロジ ローダーを作成し、それを直接使用することもできます。 たとえば、トポロジ ローダーを使用して部分的なトポロジを解決し、メディア セッションに提供する前に完全なトポロジを変更できます。 トポロジ ローダーを作成するには、 MFCreateTopoLoader を呼び出します。

トポロジ