共用方式為


編碼器上的媒體類型交涉

在 Microsoft Media Foundation 中,編碼器會實作為媒體基礎轉換 具有一個輸入和輸出 (MFT) 的轉換。 在編碼會話之前,編碼器必須知道將接收為輸入的數據流特性,以及將產生為輸出的數據流格式。 您必須先設定輸入和輸出媒體類型和相關特性,才能透過編碼器傳遞數據。 您必須指定適當的 媒體類型 GUID 來提供輸入和輸出格式, 並設定輸出數據流的特性,方法是在輸出媒體類型上設定相關的 媒體類型屬性。 新具現化的編碼器沒有任何設定的媒體類型。

輸入媒體類型是未壓縮的格式,例如 PCM 音訊或 RGB 視訊。 編碼器所使用的格式類型僅限於 VIDEOINFOHEADERENCODERATEX 結構所描述的格式類型。 如需這些結構的詳細資訊,請參閱 Windows SDK 檔。媒體基礎提供協助程式函式,從格式結構建立媒體類型。 例如,MFInitMediaTypeFromVideoInfoHeader 函式會從 VIDEOINFOHEADER 結構初始化視訊類型,而 MFInitMediaTypeFromWaveFormatEx 函式會從 WAVEATEXWAVEATEXTENSIBLE 結構初始化視訊類型。 如需詳細資訊,請參閱 媒體類型轉換。 您必須呼叫IMFTransform::SetInputType ,在編碼器上設定輸入媒體類型。

輸出媒體類型是最終來源數據流或檔案中使用的壓縮格式。 只有在設定輸入媒體類型之後,才可以設定可用的輸出媒體類型。 您可以在迴圈中呼叫 IMFTransform::GetOutputAvailableType,以擷取支持的輸出類型,直到編碼器傳回 MF_E_NO_MORE_TYPES為止。 使用每個反覆專案遞增類型索引。 當您找到適當的媒體類型時,請呼叫 IMFTransform::SetOutputType來設定輸出媒體類型。

選擇輸出媒體類型的決定因素取決於編碼類型和編碼需求。 例如,針對以 CBR 編碼的音訊數據流,您想要尋找符合您輸入的媒體類型,且比特率盡可能接近目標值。

如果您想要使用 CBR 以外的編碼模式,您必須設定模式,然後列舉該模式的輸出類型,因為編碼器會根據模式集來變更支援的輸出類型。 控制編碼模式的屬性會 MFPKEY_VBRENABLEDMFPKEY_PASSESUSED。 例如,如果您要列舉 VBR質量編碼的輸出類型,媒體類型取決於您決定使用的品質值。 如需設定這些屬性的詳細資訊,請參閱 編碼屬性

具現化編碼器 MFT

Windows Media Encoders