2016-11-28 78 views
0

我有一個文件.amr擴展名,我想要得到它的採樣率和使用微軟媒體基金會渠道數量。此外,我想解碼並獲取未壓縮的數據。媒體基金會AMR解碼

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

有沒有人有這方面的經驗,並知道如何識別和/或得到適當的渠道和採樣率進一步解碼?

順便說一句,Windows Media Player播放這個文件沒有問題。

在此先感謝。

+0

省略*爲必填項*錯誤檢查的確是結束的好方法與垃圾。 –

+0

我沒有在這裏寫錯誤檢查,但我在我的代碼中。我想讓代碼簡單易懂 – mbaros

+1

MF確實支持AMR和媒體源報告相關參數。我想你應該已經發布了更完整的代碼和/或樣本AMR文件(如果它不能用像[this]這樣衆所周知的東西重現(http://cdn.online-convert.com/example-file/audio/amr /example.amr))。 –

回答

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);