編碼器上的媒體類型交涉
在 Microsoft Media Foundation 中,編碼器會實作為 媒體基礎轉換 , (MFT) 搭配一個輸入和輸出。 在編碼會話之前,編碼器必須知道其將接收做為輸入的資料流程特性,以及它產生為輸出的資料流程格式。 您必須先設定輸入和輸出媒體類型和相關特性,才能透過編碼器傳遞資料。 您必須藉由指定適當的 媒體類型 GUID 來提供輸入和輸出格式,並在輸出媒體類型上設定相關的 媒體類型屬性 來設定輸出資料流程的特性。 新具現化的編碼器沒有任何設定的媒體類型。
輸入媒體類型是未壓縮的格式,例如 PCM 音訊或 RGB 視訊。 編碼器所使用的格式類型受限於 VIDEOINFOHEADER 和 WAVEFORMATEX 結構所描述的格式類型。 如需這些結構的詳細資訊,請參閱 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 品質編碼的輸出類型,媒體類型取決於您決定要使用的品質值。 如需設定這些屬性的詳細資訊,請參閱 編碼屬性。
相關主題