如何建立Two-Pass Windows 媒體編碼的拓撲
管線層的特定 Windows 媒體編碼器和媒體基礎支援雙階段編碼模式。 應用程式必須設定和設定與單一傳遞編碼模式類似的編碼拓撲,但在 2 階段編碼模式中,應用程式必須執行編碼會話兩次。 在第一次傳遞時,編碼器會收集資料流程內容的相關資訊。 在第二個階段中,使用在第一個階段收集到的資訊,會產生最終輸出檔案。 藉由處理資料流程的樣本兩次,雙階段編碼會將編碼程式優化,並產生高品質的編碼檔案。 即時串流無法使用雙階段編碼模式。
媒體基礎支援下列雙階段編碼模式:
建置雙階段編碼的編碼拓撲類似于單一傳遞模式。 下列清單顯示主要差異。
- 編碼器組態必須包含設定為 2 的 MFPKEY_PASSESUSED 屬性,以及 設定為 VARIANT_TRUE 的 MFPKEY_VBRENABLED 屬性。 這會將編碼器的功能篩選為雙階段模式。 如果您使用啟用物件,請將這些屬性傳遞至 MFCreateWMAEncoderActivate 或 MFCreateWMVEncoderActivate。
- 針對第一個階段,請在輸出節點中使用虛擬媒體接收,因為此階段中產生的範例不會新增至最終檔案。
- 針對第二階段,請查詢編碼器以取得必要的編碼後屬性,並將虛擬媒體接收節點取代為 ASF 媒體接收,並設定這些屬性。
如需設定編碼拓撲的詳細資訊,請參閱 教學課程:單一傳遞 Windows 媒體編碼。
下列程式摘要說明使用雙傳遞編碼模式在 ASF 容器中編碼 Windows Media 內容的步驟。
使用來源解析程式為指定的 建立媒體來源。
列舉媒體來源中的資料流程。
建立 ASF 媒體接收,並根據需要編碼之媒體來源中的資料流程來新增串流接收。
建立媒體接收。
為輸出檔案中的資料流程建立 Windows Media 編碼器。
使用 2 階段編碼屬性設定編碼器。
藉由連接來源、編碼器和媒體接收來建置部分編碼拓撲。
具現化媒體會話,並在媒體會話上設定拓撲。
藉由控制媒體會話,並從媒體會話取得所有相關事件,以執行第一個編碼傳遞。
關閉並關閉編碼會話。
視編碼類型而定,查詢編碼器是否有下列屬性:
編碼類型 屬性名稱 不受限制的變數位元速率編碼 MFPKEY_PASSESUSED
MFPKEY_VBRENABLED
MFPKEY_BAVG
MFPKEY_RAVG尖峰限制變數位元速率編碼 MFPKEY_PASSESUSED
MFPKEY_VBRENABLED
MFPKEY_BAVG
MFPKEY_RAVG
MFPKEY_BMAX
MFPKEY_RMAX根據您想要包含在最終輸出檔中的資料流程,建立 ASF 檔案接收並新增必要的資料流程接收。
設定在檔案接收上步驟 11 中擷取的編碼器屬性。
將輸出節點中的媒體接收取代為新建立的檔案接收。
具現化媒體會話,並在媒體會話上設定更新的拓撲。
藉由控制媒體會話,並從媒體會話取得所有相關事件,以執行第二個編碼傳遞。
等候來自媒體會話的 MEEndOfPresentation 事件,並在事件處理常式中取得編碼器的編碼屬性值,並在檔案接收上設定它們。 如需詳細資訊,請參閱教學 課程:單一傳遞 Windows 媒體編碼中的。
關閉並關閉編碼會話。
相關主題