gpt4 book ai didi

c++ - 媒体基金会 AMR 解码

转载 作者:行者123 更新时间:2023-12-03 01:49:41 29 4
gpt4 key购买 nike

我有一个带有 的文件.amr 扩展,我想使用 获得它的采样率和 channel 数微软媒体基金会 .此外,我想解码并获取未压缩的数据。

我可以成功地从 .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。

有没有人有这方面的经验并且知道如何识别和/或获得适当的 channel 和采样率以进行进一步解码?

顺便说一句,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);

关于c++ - 媒体基金会 AMR 解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40849420/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com