Мне нужно написать программу, которая может воспроизводить файл .ogg Vorbis с помощью IGraphBuilder или любого другого API окон напрямую (в C++/win32 API)?Как играть в ogg файлы Vorbis с использованием IGraphBuilder
Я пробовал с 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()
возвращали ч = 0x80040265 и условие if (SUCCEEDED(hr))
оленья кожа позволяют играть.
Если я не использую это условие, то pControl->Run()
будет выполнен с возвратом ID_OK. Но с динамиком ничего не играло. Пожалуйста, предложите решение/метод.
Что означает «что не работает для меня»? Ошибки? Единороги танцуют? Что-то другое? –
Спасибо за ответ. RenderFile() возвращена hr = 0x80040265. Я добавил вопрос для большей ясности. – KrishPS
В случае 'IGraphBuilder :: RenderFile()', что HRESULT сопоставляется с 'VFW_E_UNSUPPORTED_STREAM', что в основном означает, что ваша установка не поддерживает воспроизведение файлов Ogg Vorbis. Вам нужно будет установить фильтр, который позволяет DirectShow воспроизводить файлы Ogg Vorbis, такие как [официальный из Xiph] (https://xiph.org/dshow/). – andlabs