2016-11-28 20 views
0

.amrという拡張子を持つファイルがあります。Microsoft Media Foundationを使用して、サンプルレートとチャンネル数を取得します。さらに、解凍して非圧縮データを取得したい。Media Foundation 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ファイルを投稿しておくべきだと思います(もしこれが[この1つ]のようによく知られているものであれば(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); 
関連する問題