У меня есть файл mp4, в котором есть 1 видео и 2 аудиопотока. Я хочу декодировать аудиопоток (после выбора одного из них) с помощью Media Foundation. Вот код, который у меня есть (я взял его из примера MFAudio образцов MediaFoundation SDK).
Проверка ошибок опущена для простоты.
// Set up the source reader for the file.
MFCreateSourceResolver(&pSourceResolver);
pSourceResolver->CreateObjectFromURL(
L"C:\\Users\\vahagng\\Desktop\\a.mp4", // URL of the source.
MF_RESOLUTION_MEDIASOURCE, // Create a source object.
NULL, // Optional property store.
&ObjectType, // Receives the created object type.
&uSource // Receives a pointer to the media source.
);
uSource->QueryInterface(IID_PPV_ARGS(&mediaFileSource));
MFCreateSourceReaderFromMediaSource(mediaFileSource, NULL, &pSourceReader);
// Deselect all streams, we only want the first
pSourceReader->SetStreamSelection(MF_SOURCE_READER_ALL_STREAMS, false);
pSourceReader->SetStreamSelection(MF_SOURCE_READER_FIRST_AUDIO_STREAM, true);
MFCreateMediaType(&pAudioOutType);
pAudioOutType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio);
CHECK_HR(pAudioOutType->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_Float);
pSourceReader->SetCurrentMediaType(MF_SOURCE_READER_FIRST_AUDIO_STREAM, NULL, pAudioOutType);
Приведенный выше код дает сбой в последней строке (pSourceReader->SetCurrentMediaType()) с кодом ошибки 0xc00d36b4 : The data specified for the media type is invalid, inconsistent, or not supported by this object.
для медиафайла, который имеет 2 аудиопотока, но отлично работает для файлов с 1 аудиопотоком.
Файл, который я тестирую, имеет 2 аудиопотока AAC, которые определенно поддерживаются MediaFoundation.
Поддерживает ли MediaFoundation декодирование файлов из нескольких аудиопотоков?