IMFSinkWriter: запрос недействителен, поскольку была вызвана функция Shutdown()

#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");
  

Вывод:

Операция успешно завершена.

Операция успешно завершена.

Операция успешно завершена.

Нажмите любую клавишу, чтобы продолжить . . .