c++ - Media Foundation 获取编码比特率

标签 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);

它工作正常。

有谁知道问题所在和/或是否有任何其他方法来获取音轨的编码比特率?

最佳答案

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

演示文稿描述会给你这样的属性(我只列出了一些相关的):

  • 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 为您检索它。

关于c++ - Media Foundation 获取编码比特率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41855473/

相关文章:

c++ - 如何使用媒体基础从 MP4 视频中丢弃任意帧?

c++ - 实现 'IMFTransform' 编码或解码 H264 或 AAC

c++ - 用于读取音频文件的库

c++ - 在 Boost Spirit Qi 中,我如何将每个字符匹配到下一个空格(带预跳过)

c++ - 是否有更简洁的方法来包含基于宏定义部分名称的文件?

c++ - 大量#include 语句和头文件的管理

c++ - 如何更改 Media Foundation Transform 输出帧(视频)大小?

c++ - 设置网络共享文件夹只允许管理员用户

java - 根据频率计算音符

audio - 哪种编程语言更适合构建音频处理应用程序