如何使用IMFSinkWriter写入内存中的PCM数据?

时间:2016-12-18 01:30:10

标签: c++ com ms-media-foundation

嗨,每个伟大的黑客。

我可以使用IMFSinkWriter混合从文件中读取的音频和视频数据,但是我找不到如何使用IMFSinkWriter将内存中的原始PCM数据混合到最终的媒体文件中。

我认为内存中的原始PCM数据将通过任何方法生成。

我使用了下面的设置作为sinkwriter,目标音频格式是MP3。

hr = writer->AddStream(mt_aud_in, &speech_stream_ind);
mytrace(L"speech_stream_ind = %d\n", speech_stream_ind);
HRTrace(hr); 

hr = MFCreateMediaType(&mt_aud_speech);
HRTrace(hr); 
hr = mt_aud_speech->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio);
HRTrace(hr); 
hr = mt_aud_speech->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_PCM);
HRTrace(hr); 
hr = mt_aud_speech->SetUINT32(MF_MT_AUDIO_NUM_CHANNELS, 2);
HRTrace(hr); 
hr = mt_aud_speech->SetUINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 44100);
HRTrace(hr); 
hr = mt_aud_speech->SetUINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 16);
HRTrace(hr); 
hr = writer->SetInputMediaType(speech_stream_ind, mt_aud_speech, NULL);
HRTrace(hr);

此致

1 个答案:

答案 0 :(得分:1)

我通过设置MF_MT_AUDIO_AVG_BYTES_PER_SECOND属性解决了这个问题。

Sink Writer将使用的解析器需要此属性。

但是MSDN并没有说这个重要的事情。

{createUser}