Share via


エンコーダーのアクティブ化オブジェクトの使用

メディア ファイルを ASF 形式に変換する場合は、Windows Media エンコーダーを使用できます。 これらのエンコーダーを使用するには、システムに登録する必要があります。

エンコーダーの登録の詳細については、「 エンコーダー MFT のインスタンス化」を参照してください。

エンコーダーのアクティブ化オブジェクトの使用

エンコーダーの IMFTransform インターフェイス ( 「CoCreateInstance を使用したエンコーダーの作成」で説明) を使用する代わりに、エンコーダーのアクティブ化オブジェクトのインスタンスを作成できます。 アクティブ化オブジェクトはエンコーダーの作成を容易にし、Media Foundation はこのアプローチに対して次の 2 つの機能を提供します。

どちらの関数でも、これらの関数を呼び出す前に、ターゲット メディアの種類を作成し、エンコード プロパティを設定する必要があります。 アプリケーションで パイプライン レイヤー ASF コンポーネント を使用してファイルを ASF 形式にエンコードし、 ASF メディア シンクを既に作成して構成している場合は、ASF メディア シンクからこの一連の情報を取得できます。

MFCreateWMAEncoderActivateMFCreateWMVEncoderActivate は、エンコーダーの出力の種類をアプリケーションで指定されたメディアの種類に設定します。

メモMFCreateWMAEncoderActivateMFCreateWMVEncoderActivate を使用している場合は、IMFActivate::ActivateObject を呼び出してエンコーダーをアクティブ化できますが、エンコーダーの入力と出力メディアの種類を変更したり、エンコード プロパティを変更したりすることはできません。

アクティブ化オブジェクトを使用して Media Foundation オブジェクトを作成する方法の詳細については、「 アクティブ化オブジェクト」を参照してください。

ASF メディア シンクからターゲット メディアの種類を取得するには

  1. ASF メディア シンクで IMFMediaSink::QueryInterface を呼び出し、インターフェイス識別子としてIID_IMFASFContentInfoを渡すことで、ASF メディア シンクの IMFASFContentInfo ポインターへのポインターを取得します。
  2. ContentInfo オブジェクトに関連付けられている ASF プロファイル オブジェクトを取得します。
  3. プロファイル内のストリームを列挙して、ストリームのメディアの種類を取得します。

ASF メディア シンクからエンコード プロパティを取得するには

  1. メディア シンクで エンコード プロパティ を構成した場合 (「 ファイル シンクのプロパティの設定」で説明されています)、ASF メディア シンクで IMFMediaSink::QueryInterface を呼び出し、インターフェイス識別子として IID_IPropertyStoreを 渡すことで、シンクのプロパティ ストアへの参照を行うことができます。

  2. シンクの ContentInfo オブジェクトへのポインターがある場合は、 IMFASFContentInfo::GetEncodingConfigurationPropertyStore を呼び出して、メディア シンクのプロパティ ストアへの参照を取得できます。

    ASF メディア シンクに設定されているすべてのエンコード プロパティが、 MFCreateWMAEncoderActivate および MFCreateWMVEncoderActivate に渡されるプロパティ ストア 反映されていることを確認します。 エンコーダーは、アプリケーションで指定された設定に基づいて自動的に構成されます。

エンコード トポロジで変換ノードを作成するときに、オブジェクトの種類を、これら 2 つの呼び出しで受信した IMFActivate ポインターとして設定できます。 トポロジが解決されると、メディア セッションはアクティブ化オブジェクトを使用してエンコーダー MFT のインスタンスを作成します。

Windows 7 以降でのエンコーダー列挙

Windows 7 で実行されているアプリケーションの場合、 MFTEnum に加えて、 MFTEnumEx を呼び出してエンコーダーの MFT を列挙できます。 この関数は、エンコーダー MFT のアクティブ化オブジェクトへのポインターを返します。 関数の構造は、MFTEnumEx が検索条件に一致するエンコーダー MFT の IMFActivate ポインターの配列を返す点を除き、上記の MFTEnumと非常によく似ています。

エンコーダー MFT のインスタンス化

Windows Media Encoders

アクティブ化オブジェクト