Media Foundation ( MF ) は、 Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10、およびWindows 11のデジタル メディア向けのCOM ベースのマルチメディア フレームワーク パイプラインおよびインフラストラクチャプラットフォームです。これは、Microsoft DirectShow、Windows Media SDK、DirectX Media Objects (DMO) 、およびAudio Compression Manager (ACM)やVideo for Windows (VfW)などのその他のいわゆる「レガシー」マルチメディア API の代替として意図されています。既存のDirectShowテクノロジーは、いくつかの機能から始めて、段階的に Media Foundation に置き換えられる予定です。しばらくの間、Media Foundation と DirectShow は共存します。Media Foundation は、Windows XPを含む以前のバージョンの Windows では利用できません。
Windows Vistaに搭載された最初のリリースでは、オーディオとビデオの再生品質、高解像度コンテンツ ( HDTVなど)、コンテンツ保護、デジタル著作権管理(DRM) とその相互運用性のためのデジタルデータアクセス制御のより統一されたアプローチに重点が置かれています。パフォーマンス向上のため、ビデオ処理パイプラインのより多くの部分をハードウェアにオフロードするDXVA 2.0が統合されています。ビデオはエンコードされたカラースペースで処理され、ハードウェアに渡され、ハードウェアはネイティブカラースペースで画像を構成します。これにより、中間的なカラースペース変換が防止され、パフォーマンスが向上します。MF には、 VMR 7 および 9の次のイテレーションであるEnhanced Video Renderer (EVR) と呼ばれる新しいビデオレンダラーが含まれています。EVR は、再生タイミングと同期のサポートが向上しています。リアルタイムのマルチメディア処理を優先する新しいサービスであるMultimedia Class Scheduler Service (MMCSS)を使用して、ティアリングやグリッチなしで再生に必要なリソースを予約します。
Windows 7に含まれる 2 番目のリリースでは、メディア フォーマットのサポートが拡張され、WDDM 1.1 ドライバーを使用する場合には HD コンテンツの高速化のためのDXVA HDが導入されます。 [ 1 ]

MFアーキテクチャは、制御層、コア層、プラットフォーム層に分かれています。コア層は、Media Foundationの機能の大部分をカプセル化します。コア層は、Media Foundationパイプラインで構成され、Media Source、Media Sink、Media Foundation Transforms (MFT) の3つのコンポーネントがあります。メディアソースは、圧縮または非圧縮のマルチメディアデータのソースとして機能するオブジェクトです。ファイル、ネットワークサーバー、カムコーダーなど、さまざまなデータソースをカプセル化でき、ソース固有の機能は共通のインターフェースによって抽象化されます。ソースオブジェクトは、URI 、ファイル、またはバイトストリームからメディアソースを作成するソースリゾルバオブジェクトを使用できます。非標準プロトコルのサポートは、それらのソースリゾルバを作成することで追加できます。ソースオブジェクトは、シーケンサーオブジェクトを使用して、ソースのシーケンス(プレイリスト)を使用したり、複数のソースを単一の論理ソースに統合したりすることもできます。メディアシンクは、処理されたマルチメディアデータの受信側です。メディアシンクは、出力デバイスにコンテンツをレンダリングするレンダラーシンクと、ファイルなどの永続ストレージシステムにコンテンツを保存するアーカイブシンクのいずれかです。レンダラーシンクは非圧縮データを入力として受け取りますが、アーカイブシンクは出力タイプに応じて圧縮データまたは非圧縮データのどちらでも受け取ることができます。メディアソースからシンクへのデータは、MFTによって処理されます。MFTは、データを別の形式に変換する特定の関数です。MFTには、マルチプレクサとデマルチプレクサ、コーデック、リバーブなどのDSPエフェクトが含まれます。コアレイヤーは、ファイルアクセスやネットワーク、クロック同期などのサービスを使用して、マルチメディアレンダリングのタイミングを調整します。これらはプラットフォームレイヤーの一部であり、ソースとシンクのバイトストリーム、プレゼンテーションクロック、コアレイヤーコンポーネントが非同期で機能できるようにするオブジェクトモデルにアクセスするために必要なサービスを提供し、一般的にOSサービスとして実装されます。一時停止、停止、早送り、巻き戻し、または時間圧縮は、プレゼンテーションクロックを制御することによって実現できます。
しかし、メディアパイプラインのコンポーネントは相互に接続されているわけではなく、個別のコンポーネントとして提示されます。制御層で実行されるアプリケーションは、特定のビデオ処理タスクに必要なソースタイプ、変換、シンクを選択し、コンポーネント間の「接続」(トポロジー)を設定してデータフローパイプラインを完成させる必要があります。たとえば、圧縮されたオーディオ/ビデオファイルを再生する場合、パイプラインは、ファイルソースオブジェクト、オーディオストリームとビデオストリームを分割するための特定のファイルコンテナ形式用のデマルチプレクサ、オーディオストリームとビデオストリームを解凍するためのコーデック、オーディオおよびビデオエフェクト用のDSPプロセッサ、そして最後にEVRレンダラーが順番に構成されます。または、ビデオキャプチャアプリケーションの場合、カムコーダがビデオおよびオーディオソースとして機能し、コーデックMFTがデータを圧縮してマルチプレクサに供給し、ストリームをコンテナに統合します。最後に、ファイルシンクまたはネットワークシンクが、ネットワーク経由でファイルまたはストリームに書き込みます。アプリケーションは、パイプラインコンポーネント間のデータフローも調整する必要があります。制御レイヤーは、パイプライン内でのデータフローを実現するために、あるパイプラインコンポーネントからサンプルを「プル」(要求)し、それを次のコンポーネントに渡す必要があります。これは、パイプラインコンポーネントがデータを次のコンポーネントにプッシュするDirectShow の「プッシュ」モデルとは対照的です。Media Foundation は、保護された実行環境 ( Protected Media Pathと呼ばれる) 内でパイプラインをホストすることで、コンテンツの保護を可能にします。制御レイヤーのコンポーネントは、レンダリングがプレゼンテーションクロックと同期する速度でパイプラインを通してデータを伝播する必要があります。レンダリングの速度 (または時間) は、メタデータとしてマルチメディア ストリームの一部として埋め込まれます。ソース オブジェクトはメタデータを抽出し、それを渡します。メタデータには、ビット レートとプレゼンテーション タイミングに関する情報であるコード化メタデータと、タイトルや作成者名などの記述メタデータの 2 種類があります。コード化メタデータはパイプライン セッションを制御するオブジェクトに渡され、記述メタデータは、アプリケーションが必要に応じて使用できるように公開されます。
Media Foundation は、アプリケーションが明示的に設定しなくてもトポロジーを設定してデータフローを円滑化できるMedia Sessionオブジェクトを提供します。これは制御層に存在し、トポロジーローダーオブジェクトを公開します。アプリケーションは必要なパイプライントポロジーをローダーに指定し、ローダーはコンポーネント間の必要な接続を作成します。Media Session オブジェクトは、プレゼンテーションクロックとの同期処理を管理します。プレゼンテーションクロックオブジェクトを作成し、その参照をシンクに渡します。そして、クロックからのタイマーイベントを使用してパイプラインに沿ってデータを伝播します。また、アプリケーションからの一時停止、停止、再開要求を処理するためにクロックの状態を変更します。
理論的には、Media Foundation アーキテクチャは Media Session、Pipeline、Media Source、Transform、Media Sink モデルという 1 つしかありません。しかし、このアーキテクチャはセットアップが複雑になる可能性があり、シンプルなポイント ソリューションのメディア データの処理を処理するように設計された軽量で比較的簡単に構成できる MF コンポーネントの余地が大きくあります。そのため、実際的な考慮事項により、基本的な Pipeline 設計のバリエーションを実装する必要があり、Pipeline モデルの外で動作する Source Reader や Sink Writer などのコンポーネントが開発されました。いくつかの情報源[ 2 ]では 、Media Foundation アーキテクチャを 3 つの一般的なクラスに分割しています。
パイプラインアーキテクチャは、独立したメディアセッションオブジェクトとパイプラインを使用することを特徴としています。メディアデータは、1つ以上のメディアソースから1つ以上のメディアシンクへ、そして必要に応じて0個以上のメディア変換を経由して流れます。メディアセッションは、パイプラインを介したメディアデータの流れを管理し、パイプラインは複数の分岐を持つことができます。MFアプリケーションは、カスタムメディア変換コンポーネントを実装し、パイプライン内の適切な場所に挿入することで、メディアソースからメディアシンクへと流れるメディアデータにアクセスできます。
リーダー/ライターアーキテクチャでは、メディアデータを提供するソースリーダーと呼ばれるコンポーネントと、それを消費するシンクライターコンポーネントを使用します。ソースリーダーには内部パイプラインがありますが、アプリケーションからはアクセスできません。ソースリーダーはメディアソースではなく、シンクライターはメディアシンクでもありません。どちらもパイプラインに直接含めることも、メディアセッションで管理することもできません。一般的に、メディアデータはアプリケーションの操作によってソースリーダーからシンクライターへと流れます。アプリケーションは、ソースリーダーからメディアデータのパケット(メディアサンプルと呼ばれる)を受け取り、それを直接シンクライターに渡すか、ソースリーダー上に同じ操作を実行するコールバック関数を設定します。実際には、アプリケーションはデータ転送を管理するため、パイプラインアーキテクチャアプリケーションのメディアセッションと同様の役割を果たします。MFアプリケーションはソースリーダーとシンクライター間のメディアサンプルの送信を管理するため、常に生のメディアデータにアクセスできます。ソースリーダーとシンクライターのコンポーネントには、メディアデータのフォーマット変換を支援するためにメディア変換を自動的にロードする限定的な機能がありますが、これは内部的に行われるため、アプリケーション側ではほとんど制御できません。
ソースリーダーとシンクライターは使いやすさを提供し、パイプラインアーキテクチャはメディアデータの流れを非常に高度に制御できます。しかし、パイプラインで使用できるコンポーネントの多く(拡張ビデオレンダラーなど)は、リーダー/ライターアーキテクチャのアプリケーションでは簡単に使用できません。ソースリーダーによって生成されるメディアサンプルの構造はメディアソースによって出力されるものと同一であるため、パイプラインを通過する際にメディアサンプルをインターセプトし、コピーをメディアシンクに渡すパイプラインアーキテクチャをセットアップできます。これはハイブリッドアーキテクチャとして知られており、シンクライターの使いやすさを利用しながら、メディアセッションとパイプラインの高度な処理能力を活用するアプリケーションを実現できます。シンクライターはパイプラインの一部ではなく、メディアセッションとは相互作用しません。実際には、メディアデータはサンプルグラバーシンクと呼ばれる特別なメディアシンクによって処理され、このシンクがメディアデータを消費し、そのコピーをシンクライターに渡します。また、カスタムメディア変換を使用してハイブリッドアーキテクチャを実装することも可能です。この変換では、メディアサンプルをコピーし、パイプラインを通過する際にシンクライターに渡します。どちらの場合も、パイプライン内の特別なコンポーネントが、実質的に単純なリーダー/ライターアプリケーションのように動作し、シンクライターにデータを提供します。一般的に、ハイブリッドアーキテクチャはパイプラインとシンクライターを使用します。理論的には、ソースリーダーが何らかの方法でメディアサンプルをパイプラインに注入するメカニズムを実装することは可能ですが、サンプルグラバーシンクとは異なり、そのような標準コンポーネントは存在しません。
Media Foundation Transforms (MFT) は、メディア データを処理する汎用モデルです。Media Foundation では、主にメディア ソースとメディア シンクの間でデコーダ、エンコーダ、ミキサー、デジタル信号プロセッサ (DSP) を実装するために使用されます。Media Foundation Transforms は、 DirectX Media Objects (DMO)で初めて導入された変換モデルの進化形です。その動作はより明確に規定されています。ハイブリッド DMO/MFT オブジェクトを作成することもできます。アプリケーションは、Media Foundation パイプライン内で MFT を使用することも、スタンドアロン オブジェクトとして直接使用することもできます。MFT は、次のいずれかのタイプになります。
Microsoft は、 Windows Vista、Windows 7、Windows 8向けに、DirectShow フィルターではなくMedia Foundation Transform を作成することを開発者に推奨しています。[ 3 ]ビデオ編集とビデオキャプチャについては、Windows Vista の Media Foundation の主な焦点ではないため、Microsoft は DirectShow の使用を推奨しています。Windows 7 以降、MFT は AVStream ベースのメディア デバイスのハードウェア アクセラレーションによるビデオ処理、エンコード、デコードもサポートしています。[ 4 ]
Media Foundationは、ビデオコンテンツのレンダリングにEnhanced Video Renderer(EVR)を使用しており、EVRはミキサーとしても機能します。EVRは最大16個のストリームを同時にミックスでき、最初のストリームは参照ストリームとなります。参照ストリームを除くすべてのストリームは、ピクセルごとの透明度情報と任意のZオーダーを持つことができます。参照ストリームは透明ピクセルを持つことができず、すべてのストリームの背面にある固定のZオーダー位置を持ちます。最終画像は、すべてのストリームの対応するピクセルの色と透明度に基づいて各ピクセルに色を付けることで、単一のサーフェスに合成されます。
EVRは内部的にミキサーオブジェクトを使用してストリームを混合します。必要に応じて、出力のインターレース解除や色補正も行います。合成されたフレームはプレゼンターオブジェクトに渡され、プレゼンターオブジェクトはそれをDirect3Dデバイスへのレンダリング用にスケジュールします。このデバイスはDWMや、そのデバイスを使用する他のアプリケーションと共有されます。出力ビデオのフレームレートは、参照ストリームのフレームレートと同期されます。他のストリーム(サブストリームと呼ばれる)のいずれかのフレームレートが異なる場合、EVRは余分なフレームを破棄するか(サブストリームのフレームレートが高い場合)、同じフレームを複数回使用します(フレームレートが低い場合)。
古いDirect3D 9ExベースのEVRはEVR-9Exと呼ばれ、GPUがDirect3D 9Exをサポートしている必要があります。新しいDirect3D 11ベースのEVRはEVR-11と呼ばれ、GPUがDirect3D 11をサポートしている必要があります。EVR-11は、高色深度などの新しい機能をサポートしています。[ 5 ]
Windows Media AudioとWindows Media Video は、 Windows Vistaの Media Foundation を介してエンコードするための既定のサポートされている形式です。デコードに関しては、 Windows Vista ではMP3ファイル ソースを使用して MP3 ストリームを読み込むことができますが、MP3 ファイル シンクを使用して MP3 を出力することは Windows 7 でのみ可能です。[ 6 ]ただし、形式のサポートは拡張可能です。開発者は、エンコーダー/デコーダー MFT やカスタム メディア ソース/メディア シンクを作成することで、他の形式のサポートを追加できます。
Windows 7 は、Windows Vista で利用可能なコーデック サポートを拡張しています。これには、それぞれの形式を読み取るためのAVI、WAV、AAC/ADTSファイル ソース、 [ 6 ] MP4、M4A、M4V、MP4V、MOV、3GPコンテナ フォーマットを読み取るための MPEG-4 ファイル ソース[ 7 ]、および MP4 フォーマットに出力する MPEG-4 ファイル シンクが含まれます。[ 8 ]
Windows Vista と同様に、トランスコーディング (エンコード) サポートは組み込みの Windows アプリケーションでは公開されていませんが、いくつかのコーデックが Media Foundation Transforms (MFT) として含まれています。[ 6 ] Windows Vista で導入されたWindows Media AudioおよびWindows Media Videoエンコーダーとデコーダー、ASF ファイル シンクとファイル ソースに加えて、 [ 6 ] Windows 7 には、ベースライン プロファイル レベル 3 とメイン プロファイルをサポートするH.264エンコーダー[ 9 ]とAAC Low Complexity ( AAC-LC ) プロファイル エンコーダー[ 10 ]が含まれています。
Windows 7 では、さまざまなメディア フォーマットの再生のために、ベースライン、メイン、ハイ プロファイルをサポートする H.264 デコーダー(レベル 5.1 まで) [ 11 ] 、 AAC-LCおよびHE-AAC v1 ( SBR ) マルチ チャンネル、HE-AAC v2 ( PS ) ステレオ デコーダー[ 12 ] 、 MPEG-4 Part 2シンプル プロファイルおよびアドバンスト シンプル プロファイルデコーダー[ 13 ] ( DivX、Xvid、Nero Digitalなどの一般的なコーデック実装のデコード、MJPEG [ 6 ]、 AVI 用のDV [ 14 ] MFT デコーダーを含む)も導入されています。Windows Media Player 12 は、デフォルトでこれらのフォーマットを再生するために組み込みの Media Foundation コーデックを使用します。
Media Foundationを使用したMIDI再生は、現時点ではまだサポートされていません。
メディア財団を支援するアプリケーションには、以下のようなものがあります。
Windowsで保護されたメディアパスを使用するアプリケーションはすべて、Media Foundationも使用します。