次の方法で共有


Two-Pass Windows メディア エンコード用のトポロジを作成する方法

2 パス エンコード モードは、パイプライン レイヤーの特定の Windows Media エンコーダーと Media Foundation でサポートされています。 アプリケーションは、シングルパス エンコードと同様のエンコード トポロジを構成して設定する必要がありますが、2 パス エンコード モードでは、アプリケーションでエンコード セッションを 2 回実行する必要があります。 最初のパスでは、エンコーダーはストリームのコンテンツに関する情報を収集します。 2 番目のパスでは、最初のパスで収集された情報を使用して、最終的な出力ファイルが生成されます。 ストリームのサンプルを 2 回処理することで、2 パス エンコードによってエンコード プロセスが最適化され、より高品質のエンコード されたファイルが生成されます。 2 パス エンコード モードは、ライブ ストリームでは使用できません。

Media Foundation では、次の 2 パス エンコード モードがサポートされています。

2 パス エンコードのエンコード トポロジの構築は、シングル パス モードに似ています。 主な違いを次の一覧に示します。

  • エンコーダーの構成には、 2 に設定された MFPKEY_PASSESUSED プロパティと 、VARIANT_TRUEする MFPKEY_VBRENABLED プロパティを含める必要があります。 これにより、エンコーダーの機能が 2 パス モードにフィルター処理されます。 アクティブ化オブジェクトを使用している場合は、これらのプロパティを MFCreateWMAEncoderActivate または MFCreateWMVEncoderActivate に渡します。
  • 最初のパスでは、このパスで生成されたサンプルが最終的なファイルに追加されないため、出力ノードでダミー メディア シンクを使用します。
  • 2 番目のパスでは、エンコーダーに必要なエンコード後のプロパティを照会し、ダミー メディア シンク ノードを ASF メディア シンクに置き換えて、これらのプロパティを設定します。

エンコード トポロジの設定の詳細については、「 チュートリアル: 単一パス Windows メディア エンコード」を参照してください。

次の手順は、2 パス エンコード モードを使用して ASF コンテナー内の Windows Media コンテンツをエンコードする手順をまとめたものです。

  1. ソース リゾルバーを使用して、指定された のメディア ソースを作成します。

  2. メディア ソース内のストリームを列挙します。

  3. ASF メディア シンクを作成し、エンコードする必要があるメディア ソース内のストリームに応じてストリーム シンクを追加します。

  4. メディア シンクを作成します。

  5. 出力ファイル内のストリーム用の Windows Media エンコーダーを作成します。

  6. 2 パス エンコード プロパティを使用してエンコーダーを構成します。

  7. ソース、エンコーダー、メディア シンクを接続して、部分エンコード トポロジを構築します。

  8. メディア セッションをインスタンス化し、メディア セッションでトポロジを設定します。

  9. メディア セッションを制御し、関連するすべてのイベントをメディア セッションから取得して、最初のエンコード パスを実行します。

  10. エンコード セッションを閉じてシャットダウンします。

  11. エンコードの種類に応じて、エンコーダーに次のプロパティを照会します。

    エンコードの種類 プロパティ名
    制約のない可変ビット レート エンコード MFPKEY_PASSESUSED
    MFPKEY_VBRENABLED
    MFPKEY_BAVG
    MFPKEY_RAVG
    ピーク制約付き可変ビット レート エンコード MFPKEY_PASSESUSED
    MFPKEY_VBRENABLED
    MFPKEY_BAVG
    MFPKEY_RAVG
    MFPKEY_BMAX
    MFPKEY_RMAX

     

  12. ASF ファイル シンクを作成し、最終的な出力ファイルに含めるストリームに応じて、必要なストリーム シンクを追加します。

  13. 手順 11 で取得したエンコーダー プロパティをファイル シンクに設定します。

  14. 出力ノード内のメディア シンクを、新しく作成されたファイル シンクに置き換えます。

  15. メディア セッションをインスタンス化し、メディア セッションで更新されたトポロジを設定します。

  16. メディア セッションを制御し、関連するすべてのイベントをメディア セッションから取得することで、2 番目のエンコード パスを実行します。

  17. メディア セッションから MEEndOfPresentation イベントを待機し、イベント ハンドラーでエンコーダーからエンコード プロパティの値を取得し、ファイル シンクに設定します。 詳細については、「 チュートリアル: 単一パス Windows メディア エンコード」の「ファイル シンクのエンコード プロパティを更新する」を参照してください。

  18. エンコード セッションを閉じてシャットダウンします。

パイプライン レイヤーの ASF コンポーネント