API

概要

要素 機能
Media Session データの流れを制御し、状態イベントをアプリケーションへ送る
Topology Media SourceからEVRとSARへの、データの流れを定義する
Source Resolver URLからMedia Sourceを作成する
Media Source
  • Media FileやMedia Dataの他のソースの解析
  • ファイル内の映像や音声ストリームごとに、ストリーム オブジェクトを作成
Decoder エンコードされたMedia Dataを、非圧縮の映像と音声に変換する
EVR (Enhanced Video Renderer) スクリーンへ、映像を作成する
Enhanced Video Renderer - Win32 apps | Microsoft Learn
SAR (Streaming Audio Renderer) スピーカーや他の音声出力デバイスへ、音声を作成する
Streaming Audio Renderer - Win32 apps | Microsoft Learn

初期化と終了処理

HRESULT hr = S_OK;

// COMライブラリを初期化する
hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);

// Media Foundationを初期化する
hr = MFStartup(MF_VERSION);

// Media Foundationを使用する処理

// 終了処理
MFShutdown();
CoUninitialize();

MFStartup

Media Foundationを初期化する関数で、これを呼び出していないとMedia FoundationのAPIを呼び出したときにMF_E_SHUTDOWN (0xC00D3E85) が返されます。

HRESULT MFStartup(
  ULONG Version, // バージョン番号。mfapi.hで定義されている、MF_VERSIONを指定する
  DWORD dwFlags  // 初期化の方法
);
MFStartup function (mfapi.h) | Microsoft Learn

dwFlagsの指定はCでは必須ですが、C++では任意です。

意味
MFSTARTUP_NOSOCKET ソケット ライブラリを初期化しない
MFSTARTUP_LITE MFSTARTUP_NOSOCKETと同じ
MFSTARTUP_FULL Media Foundation platform全体を初期化する。これはdwFlagsを省略したときの既定値

MFShutdown

Media Foundation Platformを終了させる関数で、MFStartupの呼び出しごとに、1回呼ぶ必要があります。

HRESULT MFShutdown();
MFShutdown function (mfapi.h) | Microsoft Learn

イベント

イベント イベントの発生時機 発生させるオブジェクト
MESessionTopologyStatus Topologyの状態が変化した Media Session
MEEndOfPresentation Presentationが終了した Media Source
MENewPresentation 新しいPresentationが用意できた Media Source
MESessionClosed IMFMediaSession::Closeメソッドが非同期に完了した  
   
Media Foundation Events - Win32 apps | Microsoft Learn

たとえばMedia Sessionでの再生時には、次のようにイベントが発生します。

  1. MESessionTopologySet
  2. MESessionNotifyPresentationTime
  3. MESessionCapabilitiesChanged
  4. MESessionTopologyStatus
  5. MESessionTopologyStatus
  6. MEExtendedType
  7. MESessionCapabilitiesChanged
  8. MESessionStarted

またファイルの末尾に達したときには、次のようになります。

  1. MEEndOfPresentation
  2. MESessionTopologyStatus
  3. MESessionCapabilitiesChanged
  4. MESessionEnded
Microsoft Learnから検索