次の方法で共有


ソース リーダー

ソース リーダーは、 メディア セッション と Microsoft Media Foundation パイプラインを使用してメディア データを処理する代わりに使用します。

ソース リーダーを使用する理由

Media Foundation には、再生用に最適化されたパイプラインが用意されています。 パイプラインはエンドツーエンドです。つまり、ソース (ビデオ ファイルなど) から変換先 (グラフィックス表示など) へのデータ フローを処理します。 ただし、パイプラインを通過する際にデータを読み取ったり変更したりする場合は、カスタム プラグインを記述する必要があります。 これには、Media Foundation パイプラインに関するかなり深い知識が必要です。 特定のタスクでは、新しいプラグインを作成するとオーバーヘッドが大きすぎます。 ソース リーダーは、パイプライン全体のオーバーヘッドなしでソースから生データを取得する場合に、この種の状況に合わせて設計されています。

内部的には、ソース リーダーはメディア ソースへのポインターを保持します。 メディア ソースは、メディア ファイルやビデオ キャプチャ デバイスなどの外部ソースからメディア データを生成する Media Foundation オブジェクトです。 ソース リーダーは、メディア ソースに対するすべてのメソッド呼び出しを管理します。 (メディア ソースの詳細については、「メディア ソース」を参照してください)。

メディア ソースが圧縮データを配信する場合は、ソース リーダーを使用してデータをデコードできます。 その場合、ソース リーダーは正しいデコーダーを読み込み、メディア ソースとデコーダーの間のデータ フローを管理します。 ソースリーダーは、YUVからRGB-32へのカラー変換、ソフトウェアデインターレースなど、いくつかの制限付きビデオ処理を実行することもできますが、これらの操作はリアルタイムビデオレンダリングには推奨されません。 次の図は、このプロセスを示しています。

ソース リーダーの図

ソース リーダーは、データを宛先に送信しません。データを使用するのはアプリケーション次第です。 たとえば、ソース リーダーはビデオ ファイルを読み取ることができますが、ビデオは画面にレンダリングされません。 また、ソース リーダーは、プレゼンテーション クロックの管理、タイミングの問題の処理、ビデオとオーディオの同期を行いません。

次の場合は、ソース リーダーの使用を検討してください。

  • 基になるファイル構造を気にせずに、メディア ファイルからデータを取得する必要があります。
  • オーディオまたはビデオ キャプチャ デバイスからデータを取得する場合。
  • データ処理タスクは時間の影響を受けず、プレゼンテーション クロックは必要ありません。
  • Media Foundation に基づかないメディア パイプラインが既にあり、Media Foundation メディア ソースを独自のパイプラインに組み込みたいと考えています。

ソース リーダーは、次の状況ではお勧めしません。

  • 保護されたコンテンツの場合。 ソース リーダーは、デジタル著作権管理 (DRM) をサポートしていません。
  • 基になるファイル構造の詳細が気になる場合。 ソース リーダーは、その種類の詳細を非表示にします。

このセクションの内容

トピック 説明
ソース リーダーを使用したメディア データの処理
このトピックでは、ソース リーダーを使用してメディア データを処理する方法について説明します。
非同期モードでのソース リーダーの使用
このトピックでは、非同期モードでソース リーダーを使用する方法について説明します。
チュートリアル: オーディオのデコード
このチュートリアルでは、ソース リーダーを使用してメディア ファイルからオーディオをデコードし、WAVE ファイルにオーディオを書き込む方法について説明します。

 

メディア ファンデーションのアーキテクチャ

Media Foundation プログラミング ガイド

IMFSourceReader