我需要编写一个程序,可以借助IGraphBuilder或任何其他Windows API直接(在C ++ / win32 API中)播放.ogg Vorbis文件吗?
我尝试使用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执行。但是,扬声器没有任何作用。请提出解决方案/方法。
注意HRESULT
错误代码;他们的意思。MSDN通常对特定于功能的错误代码(如您所获得的错误代码)很有帮助。(有了足够的COM编程,您就可以E_INVALIDARG
通过视觉识别常见的错误。)如果没有,则可以使用头文件来查明潜在的错误代码。HRESULT
具有特定格式;学习吧!
如果是IGraphBuilder::RenderFile()
,则HRESULT
映射为VFW_E_UNSUPPORTED_STREAM
,这基本上意味着您的设置不支持播放Ogg Vorbis文件。您将需要安装一个允许DirectShow播放Ogg Vorbis文件的过滤器,例如Xiph.Org的官方文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句