エンコーダーのアクティブ化オブジェクトの使用
メディア ファイルを ASF 形式に変換する場合は、Windows Media エンコーダーを使用できます。 これらのエンコーダーを使用するには、システムに登録する必要があります。
エンコーダーの登録の詳細については、「 エンコーダー MFT のインスタンス化」を参照してください。
エンコーダーのアクティブ化オブジェクトの使用
エンコーダーの IMFTransform インターフェイス ( 「CoCreateInstance を使用したエンコーダーの作成」で説明) を使用する代わりに、エンコーダーのアクティブ化オブジェクトのインスタンスを作成できます。 アクティブ化オブジェクトはエンコーダーの作成を容易にし、Media Foundation はこのアプローチに対して次の 2 つの機能を提供します。
- MFCreateWMAEncoderWindows Media オーディオ エンコーダーをインスタンス化するためのActivate。
- MFCreateWMVEncoderWindows Media ビデオ エンコーダーをインスタンス化するためのActivate。
どちらの関数でも、これらの関数を呼び出す前に、ターゲット メディアの種類を作成し、エンコード プロパティを設定する必要があります。 アプリケーションで パイプライン レイヤー ASF コンポーネント を使用してファイルを ASF 形式にエンコードし、 ASF メディア シンクを既に作成して構成している場合は、ASF メディア シンクからこの一連の情報を取得できます。
MFCreateWMAEncoderActivate と MFCreateWMVEncoderActivate は、エンコーダーの出力の種類をアプリケーションで指定されたメディアの種類に設定します。
メモMFCreateWMAEncoderActivate と MFCreateWMVEncoderActivate を使用している場合は、IMFActivate::ActivateObject を呼び出してエンコーダーをアクティブ化できますが、エンコーダーの入力と出力メディアの種類を変更したり、エンコード プロパティを変更したりすることはできません。
アクティブ化オブジェクトを使用して Media Foundation オブジェクトを作成する方法の詳細については、「 アクティブ化オブジェクト」を参照してください。
ASF メディア シンクからターゲット メディアの種類を取得するには
- ASF メディア シンクで IMFMediaSink::QueryInterface を呼び出し、インターフェイス識別子としてIID_IMFASFContentInfoを渡すことで、ASF メディア シンクの IMFASFContentInfo ポインターへのポインターを取得します。
- ContentInfo オブジェクトに関連付けられている ASF プロファイル オブジェクトを取得します。
- プロファイル内のストリームを列挙して、ストリームのメディアの種類を取得します。
ASF メディア シンクからエンコード プロパティを取得するには
メディア シンクで エンコード プロパティ を構成した場合 (「 ファイル シンクのプロパティの設定」で説明されています)、ASF メディア シンクで IMFMediaSink::QueryInterface を呼び出し、インターフェイス識別子として IID_IPropertyStoreを 渡すことで、シンクのプロパティ ストアへの参照を行うことができます。
シンクの ContentInfo オブジェクトへのポインターがある場合は、 IMFASFContentInfo::GetEncodingConfigurationPropertyStore を呼び出して、メディア シンクのプロパティ ストアへの参照を取得できます。
ASF メディア シンクに設定されているすべてのエンコード プロパティが、 MFCreateWMAEncoderActivate および MFCreateWMVEncoderActivate に渡されるプロパティ ストア に反映されていることを確認します。 エンコーダーは、アプリケーションで指定された設定に基づいて自動的に構成されます。
エンコード トポロジで変換ノードを作成するときに、オブジェクトの種類を、これら 2 つの呼び出しで受信した IMFActivate ポインターとして設定できます。 トポロジが解決されると、メディア セッションはアクティブ化オブジェクトを使用してエンコーダー MFT のインスタンスを作成します。
Windows 7 以降でのエンコーダー列挙
Windows 7 で実行されているアプリケーションの場合、 MFTEnum に加えて、 MFTEnumEx を呼び出してエンコーダーの MFT を列挙できます。 この関数は、エンコーダー MFT のアクティブ化オブジェクトへのポインターを返します。 関数の構造は、MFTEnumEx が検索条件に一致するエンコーダー MFT の IMFActivate ポインターの配列を返す点を除き、上記の MFTEnumと非常によく似ています。
関連トピック