Я нашел this статью, в которой объясняется, как кодировать видео с помощью Media Foundation.Кодировка звука с использованием Sink Writer
Я пытаюсь кодировать аудио, используя принцип, используемый в приведенной выше ссылке.
Я застреваю при настройке правильного типа входного носителя для записывающего устройства.
Вот та часть:
if (SUCCEEDED(hr))
hr = MFCreateMediaType(&pMediaTypeIn);
if (SUCCEEDED(hr))
hr = pMediaTypeIn->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio);
if (SUCCEEDED(hr))
hr = pMediaTypeIn->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_Float);
if (SUCCEEDED(hr))
hr = pMediaTypeIn->SetUINT32(MF_MT_AUDIO_NUM_CHANNELS, cChannels);
if (SUCCEEDED(hr))
hr = pMediaTypeIn->SetUINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, sampleRate);
if (SUCCEEDED(hr))
hr = pSinkWriter->SetInputMediaType(streamIndex, pMediaTypeIn, NULL);
Мой код не будет работать на последней строке во время установки типа входного носителя.
Любая помощь, как с этим справиться?
Спасибо.
Как вы создали SinkWriter? Вы пытались с MFAudioFormat_PCM? – VuVirt
MFCreateSinkWriterFromURL (L "output.m4a", NULL, NULL, & pSinkWriter); Да, я попробовал как PCM, так и Float. Они не могут быть установлены – mbaros
Я думаю, вам также необходимо указать MF_MT_AUDIO_BITS_PER_SAMPLE в типе носителя. Он должен быть установлен в 16. Проверьте требования к типам входных данных здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/dd742785(v=vs.85).aspx Частота выборки должна быть либо 44100, либо 48000. Подтип должен быть MFAudioFormat_PCM. – VuVirt