次の方法で共有


エンコーダーでのメディアの種類のネゴシエーション

Microsoft Media Foundation では、エンコーダーは、1 つの入力と 1 つの出力で (MFT) を変換 として実装されます。 エンコード セッションの前に、エンコーダーは入力として受信するストリームの特性と、出力として生成されるストリームの形式を認識する必要があります。 エンコーダーを介してデータを渡す前に、入力メディアと出力メディアの種類と関連する特性を設定する必要があります。 適切な メディア タイプ GUID を指定して入力および出力形式を指定し、出力メディアタイプに関連する メディアタイプ属性 を設定して出力ストリームの特性を設定する必要があります。 新しくインスタンス化されたエンコーダーには、メディアの種類が設定されていません。

入力メディアの種類は、PCM オーディオや RGB ビデオなどの圧縮されていない形式です。 エンコーダーで使用される形式の種類は、VIDEOINFOHEADER および WAVEFORMATEX 構造体によって記述される形式に限定されます。 これらの構造の詳細については、Windows SDK のドキュメントを参照してください。Media Foundation には、書式構造からメディア型を作成するためのヘルパー関数が用意されています。 たとえば、MFInitMediaTypeFromVideoInfoHeader 関数は、VIDEOINFOHEADER 構造体からビデオの種類を初期化し、MFInitMediaTypeFromWaveFormatEx 関数は、WAVEFORMATEX または WAVEFORMATEXTENSIBLE 構造体からビデオ型を初期化します。 詳細については、「メディアタイプ変換」を参照してください。 エンコーダーで入力メディアの種類を設定するには、IMFTransform::SetInputTypeを呼び出します。

出力メディアの種類は、最終的なソース ストリームまたはファイルで使用される圧縮形式です。 使用可能な出力メディアの種類は、入力メディアの種類を設定した後にのみ設定できます。 エンコーダーが MF_E_NO_MORE_TYPESを返すまで、IMFTransform::GetOutputAvailableType をループで呼び出すことで、サポートされている出力の種類を取得できます。 反復処理のたびに型インデックスをインクリメントします。 適切なメディアの種類が見つかると、IMFTransform::SetOutputTypeを呼び出して出力メディアの種類を設定します。

出力メディアの種類を選択する際の決定要因は、エンコードの種類とエンコード要件によって異なります。 たとえば、CBR でエンコードされたオーディオ ストリームの場合、入力に一致し、ターゲット値にできるだけ近いビット レートを持つメディアの種類を見つける必要があります。

CBR 以外のエンコード モードを使用する場合は、モードを設定してから、そのモードの出力の種類を列挙する必要があります。エンコーダーは、設定されたモードに応じてサポートされている出力の種類を変更するためです。 エンコード モードを制御するプロパティは、MFPKEY_VBRENABLED され、MFPKEY_PASSESUSEDされます。 たとえば、VBR 品質エンコードの出力の種類を列挙する場合、メディアの種類は、使用する品質値によって異なります。 これらのプロパティの設定については、「エンコード プロパティの を参照してください。

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

Windows Media Encoders