Как воспроизводить файлы ogg Vorbis с помощью IGraphBuilder

Мне нужно написать программу, которая может воспроизводить файл .ogg Vorbis с помощью IGraphBuilder или любого другого Windows API напрямую (в C ++ / win32 API)?

Я пытался с IGraphBuilder, но это не работает для меня.
Образец кода:

IMediaControl *pControl = NULL;
IGraphBuilder *pGraph= NULL;
IMediaEventEx *pEvent= NULL;
IMediaPosition *pMediaPosition= NULL;

hr = ::CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
if (FAILED(hr)) {
return false;
}

hr = pGraph->AddFilter(pFilter, L"Out");
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
hr = pGraph->QueryInterface(IID_IMediaPosition, (void**)&pMediaPosition);

// Build the graph.
hr = pGraph->RenderFile(mFilePath.c_str()/*"C:\\sample.ogg file"*/, NULL);

/* here hr = 0x80040265 so SUCCEEDED(hr) didnt allow it to enter in if condition*/
if (SUCCEEDED(hr)) {
// Run the graph.
hr = pControl->Run();
if (SUCCEEDED(hr)) {
// Wait for completion.
long evCode;
pEvent->WaitForCompletion(INFINITE, &evCode);
}
}

// Clean up in reverse order.
SAFE_RELEASE(pEvent);
SAFE_RELEASE(pControl);
SAFE_RELEASE(pGraph);
pGraph = NULL;

::CoUninitialize();

НОТА:
Выше заявление hr = pGraph->RenderFile() вернул hr = 0x80040265 и условие if (SUCCEEDED(hr)) не позволяет играть в нее.

Если я не использую это условие, то pControl->Run() выполняется с возвратом ID_OK. Но ничего не играл с динамиком.
Пожалуйста, предложите решение / метод.

0

Решение

Обрати внимание на HRESULT коды ошибок; они что-то значат. MSDN часто помогает с кодами ошибок, специфичными для функций, такими как тот, который вы получили. (При достаточном количестве COM-программирования вы сможете распознать такие, как E_INVALIDARG на вид.) Если нет, вы можете использовать файлы заголовков, чтобы точно определить потенциальные коды ошибок. HRESULTs имеют определенный формат; узнать его!

В случае IGraphBuilder::RenderFile(), тот HRESULT карты для VFW_E_UNSUPPORTED_STREAMЭто означает, что ваша установка не поддерживает воспроизведение файлов Ogg Vorbis. Вам нужно будет установить фильтр, который позволит DirectShow воспроизводить файлы Ogg Vorbis, такие как официальный от Xiph.Org.

2

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

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

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