【问题标题】:Media Foundation get encoded bitrate媒体基金会获取编码比特率
【发布时间】:2017-06-10 20:42:00
【问题描述】:

我正在尝试使用 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_PD_AUDIO_ENCODING_BITRATE 是可选的,如 MSDN 中所述。我认为您最好为 MF_MT_AUDIO_SAMPLES_PER_SECOND 和 MF_MT_AUDIO_BITS_PER_SAMPLE 获取 UINT32,并从那里计算比特率。

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


【解决方案1】:

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

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

  • MF_MT_MAJOR_TYPE,vValueMFMediaType_Audio
  • MF_MT_SUBTYPE,vValueMFAudioFormat_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 为您检索该属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多