共用方式為


列舉特定編碼模式的音訊類型(Microsoft媒體基礎)

音訊編碼器所接受的輸入和輸出媒體類型非常結構化。 您必須呼叫 IMediaObject::GetOutputType 方法來取得支援的輸出類型,或 IMFTransform::GetOutputType。 取得輸出類型之後,您不得加以變更。

如果您想要使用一次傳遞 CBR 以外的編碼模式,您必須設定模式,然後列舉該模式的輸出類型;編碼器會根據模式集來變更支持的輸出類型。 控制編碼模式的屬性會 MFPKEY_VBRENABLEDMFPKEY_PASSESUSED。 在編碼器中設定模式時,您必須列舉並選取輸出類型,而不需變更,就像使用 CBR 一樣。

識別以質量為基礎的 VBR 類型

識別以質量為基礎的 VBR 類型的程式取決於編碼器是做為 DirectX 媒體物件 (DMO) 還是做為媒體基礎轉換 (MFT)。 如需編碼器當做 DMO 或 MFT 時的資訊,請參閱 Codec Objects底下的個別編解碼器參考頁面。

當音訊編碼器做為 DMO,而您將編碼器設定為使用單次 VBR 時,它會列舉所有支持的輸出類型。 不過,您通常會想要根據品質參數選擇單次 VBR 類型。 編碼器會將單次傳輸速率可變(VBR)輸出類型的品質值放在 nAvgBytesPerSecWAVEFORMATEX 結構中,DMO_MEDIA_TYPE.pbFormat 所指向

此值會以下列格式儲存:0x7FFFFFXX,其中 XX 是品質值(從 0 到 100)。 例如,0x7FFFFF62的 nAvgBytesPerSec 值會指定質量等級 98 (0x62 = 98)。

下列範例示範如何在編碼器做為 DMO 時檢查格式的質量等級。

void ShowQuality(WAVEFORMATEX* pWave)
{
    // Store the average bytes per second in a local variable
    // with a more manageable name.
    DWORD dwBps = pWave->nAvgBytesPerSec;

    // Verify that the value is a VBR quality level by using 
    // a bitmask to check for the bit pattern 0x7FFFFFXX. 
    if(dwBps & 0x7FFFFF00 == 0x7FFFFF00)
        printf("VBR Quality: %d%%\n",(dwBps & 0x000000FF));
    else // Not a valid VBR quality value.
        printf("Not a valid one-pass VBR audio format.\n");
}

當編碼器做為 MFT,並在呼叫 getAvailableOutputType 時列舉輸出類型,您可以查詢 MFT 以取得 MFPKEY_MOST_RECENTLY_ENUMERATED_VBRQUALITY 屬性。 傳回的值表示最近傳回之輸出媒體類型的 VBR 品質。 然後,您可以使用該值來設定編碼器的 MFPKEY_DESIRED_VBRQUALITY 屬性。

設定高峰限制

針對以質量為基礎的 VBR(一次傳遞)和不受限制的雙階段 VBR,在擷取輸出類型之後不需要任何其他設定。 若要使用尖峰限制的 VBR,請擷取已啟用 VBR 的輸出類型,並設定為雙重傳遞。 此類型不需變更,即描述不受限制的 VBR 設定。 若要設定尖峰條件約束,請設定 MFPKEY_RMAXMFPKEY_BMAX 屬性。

設定音訊編碼

尋找音訊編碼器輸出類型

使用 Two-Pass 編碼

使用 VBR 編碼