Спасибо, что нашли время, чтобы прочитать мой вопрос.
Я разрабатываю приложение 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 не удается 🙁
Итак, у меня есть к вам два вопроса:
Я хочу отметить, что я не могу просто использовать ffmpeg или libav, потому что я не могу позволить себе лицензию на свое программное обеспечение и не хочу, чтобы она была под лицензией GPL. Но если есть альтернативы фондам Windows Media для кодирования необработанных аудиофайлов в aac, я был бы рад их услышать.
И, наконец, извините за мой плохой английский, это явно не мой родной язык, и мне жаль, если я заставил ваши глаза кровоточить. (и рад, если я рассмешил тебя)
Хорошего дня
Код возврата 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).
Других решений пока нет …