設定標準、專業或無遺失音訊編碼
當 Windows 媒體音訊編碼器列舉輸出類型時,它會將每個列舉類型識別為 Standard、Professional 或 Lossless。 您可以執行下列步驟來判斷輸出類型為 Standard、Professional 或 Lossless。
- 呼叫 IMFTransform::GetOutputAvailableType 以取得代表輸出類型的 IMFMediaType 介面。
- 呼叫 IMFMediaType::GetRepresentation 以取得包含輸出類型相關資訊 的AM_MEDIA_TYPE 結構。
- AM_MEDIA_TYPE結構的pbFormat成員會指向包含輸出類型其他資訊之「其」的「TBATEX」結構。 檢查其為「其」結構之 wFormatTag成員。 值0x161表示 Standard、0x162表示 Professional 的值,而 0x163 值表示「無遺失」。
如果您在列舉輸出類型之前,在 Windows Media Audio 編碼器上設定屬性,您可以限制列舉的輸出類型數目。 例如,如果您適當地設定 VBR 屬性,您可以將列舉的輸出類型限制為 [無遺失] 類別中的類型。
標準音頻編碼
您可以使用下列步驟來設定標準音頻編碼。
- 在編碼器上設定您選擇的屬性。
- 列舉可能的輸出類型。
- 檢查列舉型別,然後選擇具有音訊格式標籤的0x161類型。
- 呼叫 IMFTransform::SetOutputType,將輸出類型設定為您選擇的類型。
專業音訊編碼
您可以使用下列步驟來設定專業音訊編碼。
- 在編碼器上設定您選擇的屬性。
- 列舉可能的輸出類型。
- 檢查列舉型別,並選擇具有音訊格式標籤的0x162類型。
- 呼叫 IMFTransform::SetOutputType,將輸出類型設定為您選擇的類型。
無遺失音訊編碼
您可以使用下列步驟來設定無遺失音訊編碼。
- 將 MFPKEY_VBRENABLED 屬性設定為 VARIANT_TRUE。
- 將 MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITY 屬性設定為 VARIANT_TRUE。
- 將 MFPKEY_DESIRED_VBRQUALITY 屬性設定為 100。
- 列舉輸出類型。
- 呼叫 IMFTransform::SetOutputType,將輸出類型設定為步驟 4 中列舉的其中一個類型。
下列程式碼會列舉 Windows 媒體音訊編碼器的所有無遺失輸出類型。 程式碼會列印每個列舉類型的音訊格式標籤值。 由於所有列舉型別都是不遺失的,所以所有這些格式標籤的值都是 0x163。 假設 pIMT 是 Windows 媒體音訊編碼器物件上 IMFTransform 介面的指標,而且 pStore 是相同物件上 IPropertyStore 介面的指標。 此外,假設 hr 是先前在程式碼中宣告的 HRESULT 類型變數。
PROPVARIANT prop;
prop.vt = VT_BOOL;
prop.boolVal = VARIANT_TRUE;
hr = pStore->SetValue(MFPKEY_VBRENABLED, prop);
if(SUCCEEDED(hr))
{
hr = pStore->SetValue(MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITY, prop);
if(SUCCEEDED(hr))
{
prop.vt = VT_UI4;
prop.ulVal = 100;
hr = pStore->SetValue(MFPKEY_DESIRED_VBRQUALITY, prop);
if(SUCCEEDED(hr))
{
HRESULT hrAvailableType = S_OK;
LONG j = 0;
while(MF_E_NO_MORE_TYPES != hrAvailableType)
{
IMFMediaType* pOutputType = NULL;
hrAvailableType = pIMFT->GetOutputAvailableType(
0, j, &pOutputType);
if(SUCCEEDED(hrAvailableType))
{
AM_MEDIA_TYPE* pTypeRep = NULL;
hr = pOutputType->GetRepresentation(
AM_MEDIA_TYPE_REPRESENTATION, (VOID**)&pTypeRep);
if(SUCCEEDED(hr))
{
WAVEFORMATEX* pwfex = (WAVEFORMATEX*)pTypeRep->pbFormat;
printf_s("%x\n", pwfex->wFormatTag);
pOutputType->FreeRepresentation(
AM_MEDIA_TYPE_REPRESENTATION, (VOID*)pTypeRep);
}
pOutputType->Release();
++j;
}
} // while
}
}
}
相關主題
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應