配置标准、Professional或无损失音频编码
当Windows媒体音频编码器枚举输出类型时,它将每个枚举类型标识为“标准”、“Professional”或“丢失”。 可以通过执行以下步骤来确定输出类型是“标准”、“Professional”还是“无损失”。
- 调用 IMFTransform::GetOutputAvailableType 以获取表示输出类型的 IMFMediaType 接口。
- 调用 IMFMediaType::GetRepresentation 以获取包含有关输出类型的信息的 AM_MEDIA_TYPE 结构。
- AM_MEDIA_TYPE结构的 pbFormat 成员指向一个波形图X 结构,该结构包含有关输出类型的其他信息。 检查波形图X 结构的 wFormatTag 成员。 值0x161指示“标准”,0x162值表示Professional,0x163值表示“无损失”。
如果在枚举输出类型之前在 Windows Media Audio 编码器上设置属性,则可以限制枚举的输出类型数。 例如,如果适当地设置 VBR 属性,则可以将枚举输出类型限制为“无损失”类别中的输出类型。
标准音频编码
可以使用以下步骤配置标准音频编码。
- 在编码器上设置所选的属性。
- 枚举可能的输出类型。
- 检查枚举类型,并选择具有音频格式标记的0x161类型。
- 通过调用 IMFTransform::SetOutputType 将输出类型设置为所选类型。
Professional音频编码
可以使用以下步骤配置Professional音频编码。
- 在编码器上设置所选的属性。
- 枚举可能的输出类型。
- 检查枚举类型,并选择具有音频格式标记的0x162类型。
- 通过调用 IMFTransform::SetOutputType 将输出类型设置为所选类型。
无损失音频编码
可以使用以下步骤配置无损失音频编码。
- 将 MFPKEY_VBRENABLED 属性设置为 VARIANT_TRUE。
- 将 MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITY 属性设置为 VARIANT_TRUE。
- 将 MFPKEY_DESIRED_VBRQUALITY 属性设置为 100。
- 枚举输出类型。
- 通过调用 IMFTransform::SetOutputType 将输出类型设置为步骤 4 中枚举的类型之一。
以下代码枚举Windows媒体音频编码器的所有无损失输出类型。 该代码输出每个枚举类型的音频格式标记的值。 由于所有枚举类型都是无损失的,因此所有这些格式标记的值0x163。 假设 pIMT 是指向 Windows Media Audio 编码器对象上的 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 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈