Media Foundation获得编码比特率

时间:2017-01-25 15:31:50

标签: c++ ms-media-foundation audio-processing

我正在尝试使用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);

工作正常。

是否有人知道问题是什么和/或是否有其他方法可以获得音轨的编码比特率?

1 个答案:

答案 0 :(得分:1)

音频比特率是轨道的属性,而不是媒体文件的属性。因此,您通常希望选择特定的曲目(是的,通常它是第一个音轨,即使该文件是纯音频单曲目文件)并查询其属性。

演示文稿说明会为您提供这样的属性(我只列出一些相关内容):

  • 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提供的信息:

enter image description here

并且您不需要Media Foundation(也就是说,只是为了访问该值),您可以使用shell property handler为您完成这项工作。您只需要PKEY_Audio_EncodingBitrate属性,处理程序就可以利用Media Foundation为您检索该属性。