2017-01-25 118 views
0

我想使用媒体基础获取音频文件(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

MF_PD_AUDIO_ENCODING_BITRATE是可选的,如MSDN中所述。我认为你最好为MF_MT_AUDIO_SAMPLES_PER_SECOND和MF_MT_AUDIO_BITS_PER_SAMPLE获取GetUINT32,并从那里计算比特率。 – VuVirt

回答

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外壳程序提出:

enter image description here

,你不需要媒体基金会否则(即,只访问该值),您可以使用shell property handler为您完成这项工作。您只需请求PKEY_Audio_EncodingBitrate属性,处理程序将利用Media Foundation为您检索该属性。

相关问题