編碼器上的媒體類型交涉
在 Microsoft Media Foundation 中,編碼器會實作為媒體基礎轉換 具有一個輸入和輸出 (MFT) 的轉換。 在編碼會話之前,編碼器必須知道將接收為輸入的數據流特性,以及將產生為輸出的數據流格式。 您必須先設定輸入和輸出媒體類型和相關特性,才能透過編碼器傳遞數據。 您必須指定適當的 媒體類型 GUID 來提供輸入和輸出格式, 並設定輸出數據流的特性,方法是在輸出媒體類型上設定相關的 媒體類型屬性。 新具現化的編碼器沒有任何設定的媒體類型。
輸入媒體類型是未壓縮的格式,例如 PCM 音訊或 RGB 視訊。 編碼器所使用的格式類型僅限於 VIDEOINFOHEADER 和 ENCODERATEX 結構所描述的格式類型。 如需這些結構的詳細資訊,請參閱 Windows SDK 檔。媒體基礎提供協助程式函式,從格式結構建立媒體類型。 例如,MFInitMediaTypeFromVideoInfoHeader 函式會從 VIDEOINFOHEADER 結構初始化視訊類型,而 MFInitMediaTypeFromWaveFormatEx 函式會從 WAVEATEX 或 WAVEATEXTENSIBLE 結構初始化視訊類型。 如需詳細資訊,請參閱 媒體類型轉換。 您必須呼叫IMFTransform::SetInputType ,在編碼器上設定輸入媒體類型。
輸出媒體類型是最終來源數據流或檔案中使用的壓縮格式。 只有在設定輸入媒體類型之後,才可以設定可用的輸出媒體類型。 您可以在迴圈中呼叫 IMFTransform::GetOutputAvailableType,以擷取支持的輸出類型,直到編碼器傳回 MF_E_NO_MORE_TYPES為止。 使用每個反覆專案遞增類型索引。 當您找到適當的媒體類型時,請呼叫 IMFTransform::SetOutputType來設定輸出媒體類型。
選擇輸出媒體類型的決定因素取決於編碼類型和編碼需求。 例如,針對以 CBR 編碼的音訊數據流,您想要尋找符合您輸入的媒體類型,且比特率盡可能接近目標值。
如果您想要使用 CBR 以外的編碼模式,您必須設定模式,然後列舉該模式的輸出類型,因為編碼器會根據模式集來變更支援的輸出類型。 控制編碼模式的屬性會 MFPKEY_VBRENABLED 與 MFPKEY_PASSESUSED。 例如,如果您要列舉 VBR質量編碼的輸出類型,媒體類型取決於您決定使用的品質值。 如需設定這些屬性的詳細資訊,請參閱 編碼屬性。
相關主題