共用方式為


如何建立Two-Pass Windows 媒體編碼的拓撲

管線層的特定 Windows 媒體編碼器和媒體基礎支援雙階段編碼模式。 應用程式必須設定和設定與單一傳遞編碼模式類似的編碼拓撲,但在 2 階段編碼模式中,應用程式必須執行編碼會話兩次。 在第一次傳遞時,編碼器會收集資料流程內容的相關資訊。 在第二個階段中,使用在第一個階段收集到的資訊,會產生最終輸出檔案。 藉由處理資料流程的樣本兩次,雙階段編碼會將編碼程式優化,並產生高品質的編碼檔案。 即時串流無法使用雙階段編碼模式。

媒體基礎支援下列雙階段編碼模式:

建置雙階段編碼的編碼拓撲類似于單一傳遞模式。 下列清單顯示主要差異。

  • 編碼器組態必須包含設定為 2 的 MFPKEY_PASSESUSED 屬性,以及 設定為 VARIANT_TRUE 的 MFPKEY_VBRENABLED 屬性。 這會將編碼器的功能篩選為雙階段模式。 如果您使用啟用物件,請將這些屬性傳遞至 MFCreateWMAEncoderActivateMFCreateWMVEncoderActivate
  • 針對第一個階段,請在輸出節點中使用虛擬媒體接收,因為此階段中產生的範例不會新增至最終檔案。
  • 針對第二階段,請查詢編碼器以取得必要的編碼後屬性,並將虛擬媒體接收節點取代為 ASF 媒體接收,並設定這些屬性。

如需設定編碼拓撲的詳細資訊,請參閱 教學課程:單一傳遞 Windows 媒體編碼

下列程式摘要說明使用雙傳遞編碼模式在 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. 藉由控制媒體會話,並從媒體會話取得所有相關事件,以執行第二個編碼傳遞。

  17. 等候來自媒體會話的 MEEndOfPresentation 事件,並在事件處理常式中取得編碼器的編碼屬性值,並在檔案接收上設定它們。 如需詳細資訊,請參閱教學 課程:單一傳遞 Windows 媒體編碼中的。

  18. 關閉並關閉編碼會話。

管線層 ASF 元件