我的文件扩展名为 .amr ,我希望使用 Microsoft Media Foundation 获取其采样率和频道数。此外,我想解码并获取未压缩的数据。
我可以成功地从.aac .mp4和其他文件类型中获取,但不能从.amr文件(或包含.amr轨道的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文件,在numChannels和sampleRate中写入了一些垃圾。
有没有人有这方面的经验,知道如何识别和/或获得适当的频道和采样率以进一步解码?
BTW,Windows Media Player播放此文件没有问题。
提前致谢。
答案 0 :(得分:0)
所以我发现它支持解码.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);