#c #encoding #ms-media-foundation
#c #кодирование #ms-media-foundation
Вопрос:
Просто тестирую некоторые простые аудио-файлы в формате mp3.
Я пытаюсь использовать IMFSinkWriter, чтобы фактически закодировать аудио и сохранить его на диск.
Я даже не могу правильно создать IMFSinkWriter. Должно быть, это какой-то вопрос новичка или действительно странная ошибка…
#include <iostream>
#include <mfidl.h>
#include <Mfreadwrite.h>
#pragma comment(lib, "Mfreadwrite.lib")
int main()
{
IMFSinkWriter* pSinkWriter;
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
std::cout << std::system_category().message(hr) << "n";
hr = MFCreateSinkWriterFromURL(L"Recording.mp3", NULL, NULL, amp;pSinkWriter);
std::cout << std::system_category().message(hr) << "n";
system("pause");
}
Вывод:
Операция успешно завершена.
Запрос недействителен, поскольку была вызвана функция Shutdown().
Нажмите любую клавишу, чтобы продолжить . . .
Возможно, мне потребуется вызвать «CoCreateInstance(__uuidof(SOMETHING), NULL, CLSCTX_ALL, __uuidof(IMFSinkWriter), (void **) amp; pSinkWriter);», но я не уверен, каким ЧТО-то должно быть, или какая другая причина это может быть.
Спасибо.
Ответ №1:
Необходимо было вызвать «MFStartup(MF_VERSION)»:
IMFSinkWriter* pSinkWriter;
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
std::cout << std::system_category().message(hr) << "n";
hr = MFStartup(MF_VERSION);
std::cout << std::system_category().message(hr) << "n";
hr = MFCreateSinkWriterFromURL(L"Recording.mp3", NULL, NULL, amp;pSinkWriter);
std::cout << std::system_category().message(hr) << "n";
system("pause");
Вывод:
Операция успешно завершена.
Операция успешно завершена.
Операция успешно завершена.
Нажмите любую клавишу, чтобы продолжить . . .