Необработанный аудиофайл в AAC с использованием Windows Media Foundation в Windows 7

Спасибо, что нашли время, чтобы прочитать мой вопрос.

Я разрабатываю приложение C ++, используя Qt и Windows API.

Я записываю вывод микрофона в маленьких аудиофайлах 10 с в необработанном формате и хочу преобразовать их в формат aac.

Я пытался прочитать как можно больше вещей, и подумал, что было бы неплохо начать с API-интерфейса транскодирования Windows Media Foundation.

Проблема в том, что я не могу использовать файл .raw или .pcm в функции «CreateObjectFromUrl», и поэтому я довольно сильно застрял здесь. Это продолжает терпеть неудачу. Код возврата hr равен 3222091460. Я попытался передать файл .mp3 в функцию, и, конечно, он работает, поэтому не возникла ошибка url-human-fail.

MF_OBJECT_TYPE ObjectType = MF_OBJECT_INVALID;

IMFSourceResolver* pSourceResolver = NULL;
IUnknown* pUnkSource = NULL;

// Create the source resolver.
hr = MFCreateSourceResolver(&pSourceResolver);
if (FAILED(hr))
{
qDebug() << "Failed !";
}// Use the source resolver to create the media source.hr = pSourceResolver->CreateObjectFromURL(
sURL,                       // URL of the source.
MF_RESOLUTION_MEDIASOURCE,  // Create a source object.
NULL,                       // Optional property store.
&ObjectType,                // Receives the created object type.
&pUnkSource                 // Receives a pointer to the media source.
);

MFCreateSourceResolver работает нормально, но CreateObjectFromURL не удается 🙁

Итак, у меня есть к вам два вопроса:

  1. Можно ли кодировать необработанные аудиофайлы в aac-файлы с помощью Windows Media Foundation?
  2. Если да, что я должен прочитать, чтобы достичь того, чего я хочу?

Я хочу отметить, что я не могу просто использовать ffmpeg или libav, потому что я не могу позволить себе лицензию на свое программное обеспечение и не хочу, чтобы она была под лицензией GPL. Но если есть альтернативы фондам Windows Media для кодирования необработанных аудиофайлов в aac, я был бы рад их услышать.

И, наконец, извините за мой плохой английский, это явно не мой родной язык, и мне жаль, если я заставил ваши глаза кровоточить. (и рад, если я рассмешил тебя)

Хорошего дня

5

Решение

Код возврата hr равен 3222091460

Те HRESULT коды. использование этот инструмент «ShowHresult» чтобы они были удобно расшифрованы для вас. Код означает 0xC00D36C4 MF_E_UNSUPPORTED_BYTESTREAM_TYPE Msgstr «Тип потока байтов данного URL не поддерживается.»

Проблема в основном в том, что нет поддержки этих необработанных файлов, .WAV является хорошим источником для необработанного аудио — файл содержит как дескриптор формата, так и полезную нагрузку.

Очевидно, что вы можете самостоятельно прочитать данные из необработанного аудиофайла и сжать их в AAC с помощью Media Foundation. AAC Encoder через его IMFTransform интерфейс. Это достаточно просто, и у вас есть данные AAC на выходе, например, писать в сыром .AAC,

Альтернативным вариантом для Media Foundation является DirectShow (есть подходящие кодеки, хотя я думал, что это может быть не так легко запустить), libfaac, FFmpeg, libavcodec (доступно под LGPL, а не под GPL).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]