媒体基金会AMR解码



我有一个带有 .AMR 扩展名的文件,我想使用 Microsoft Media Foundation 获得其样本率和频道数量。此外,我想解码并获取未压缩的数据。

我可以从.AAC .MP4和其他文件类型中成功获取这些内容,但可以从.AMR文件(或包含.AMR track的3.GP文件)中获取。

所以,对于其他类型的我:

IMFSourceReader *m_pReader;
IMFMediaType *m_pAudioType;
MFCreateSourceReaderFromURL(filePath, NULL, &m_pReader);
m_pReader->SetStreamSelection(MF_SOURCE_READER_ALL_STREAMS, false);
m_pReader->SetStreamSelection(MF_SOURCE_READER_FIRST_AUDIO_STREAM, true);
m_pReader->GetCurrentMediaType(MF_SOURCE_READER_FIRST_AUDIO_STREAM, &m_pAudioType);
UINT32 numChannels,sampleRate;
m_pAudioType->GetUINT32(MF_MT_AUDIO_NUM_CHANNELS, &numChannels);
m_pAudioType->GetUINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, &sampleRate);

考虑此代码期间没有任何错误。

对于.amr文件,一些垃圾是在数字通道中写的,并进行了采样。

是否有人对此有经验,并且知道如何识别和/或获得适当的渠道和样本率以进一步解码?

顺便说一句,Windows Media Player播放此文件没有问题。

预先感谢。

,所以我发现它支持对.amr文件不编码的解码。

就在我们获得此属性之前:

UINT32 numChannels,sampleRate;
m_pAudioType->GetUINT32(MF_MT_AUDIO_NUM_CHANNELS, &numChannels);
m_pAudioType->GetUINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, &sampleRate);

我们必须为源阅读器设置新的媒体类型

m_pAudioType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio)
m_pAudioType->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_Float)
m_pReader->SetCurrentMediaType(MF_SOURCE_READER_FIRST_AUDIO_STREAM, NULL, m_pAudioType);

最新更新