我正在尝试使用Media Foundation获得音频文件(mp4,m4a,aac)的编码比特率。
我所做的是:
PROPVARIANT prop;
IMFSourceReader* reader;
MFCreateSourceReaderFromURL(filePath, NULL, &reader);
reader->GetPresentationAttribute(MF_SOURCE_READER_MEDIASOURCE, MF_PD_AUDIO_ENCODING_BITRATE,
&prop);
第二行以错误和空PROPVARIAT结尾。
但是,当我这样做时:
reader->GetPresentationAttribute(MF_SOURCE_READER_MEDIASOURCE, MF_PD_DURATION, &prop);
工作正常。
有谁知道这是什么问题,并且/或者还有其他方法可以获取音频轨道的编码比特率吗?
最佳答案
音频比特率是曲目的属性,而不是媒体文件的属性。因此,您通常希望选择一个特定的音轨(是的,即使文件是仅音频的单音轨文件,通常也是第一个音轨)并查询其属性。
演示说明将为您提供这样的属性(我只列出了一些相关的内容):
键MF_MT_MAJOR_TYPE
,vValue MFMediaType_Audio
键MF_MT_SUBTYPE
,vValue MFAudioFormat_AAC
键MF_MT_AVG_BITRATE
,vValue 125601
键MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION
,vValue 0
键MF_MT_AAC_PAYLOAD_TYPE
,vValue 0
如果您只需要一个参考值,例如Windows Shell提供的值:
并且您不需要Media Foundation即可(即,仅用于访问值),则可以使用shell property handler为您完成此工作。您只需要请求PKEY_Audio_EncodingBitrate
属性,处理程序就可以利用Media Foundation为您检索该属性。