媒体基础 AMR 解码
Media Foundation AMR decode
我有一个扩展名为 .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 中写入了一些垃圾。
有没有人有这方面的经验并且知道如何识别and/or获得正确的通道和采样率以进一步解码?
顺便说一句,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);
我们必须为我们的源设置一个新的媒体类型Reader
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);
我有一个扩展名为 .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 中写入了一些垃圾。
有没有人有这方面的经验并且知道如何识别and/or获得正确的通道和采样率以进一步解码?
顺便说一句,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);
我们必须为我们的源设置一个新的媒体类型Reader
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);