【发布时间】:2016-06-08 01:01:25
【问题描述】:
示例程序提供here 来运行视频文件。我正在使用“avi”格式文件在 Visual Studio 2015 中使用 DShow API。
参考完整代码:
#include<dshow.h>
#include<iostream>
using namespace std;
int CALLBACK WinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
)
{
IGraphBuilder *pGraph = NULL;
IMediaControl *pControl = NULL;
IMediaEvent *pEvent = NULL;
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
cout << "ERROR - Could not initialize COM library"<<endl;
return -1;
}
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);
if (FAILED(hr))
{
cout << "EROR - Could not create the Filter Graph Manager";
return -1 ;
}
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void**)&pEvent);
hr = pGraph->RenderFile(L"C:\\Users\\sunil\\Documents\\Ramp\\output.avi", NULL);
if (SUCCEEDED(hr))
{
hr = pControl->Run();
if (SUCCEEDED(hr))
{
long evCode;
pEvent->WaitForCompletion(INFINITE, &evCode);
}
}
pControl->Release();
pEvent->Release();
pGraph->Release();
CoUninitialize();
return 0;
}
构建成功,但是当我运行它时会弹出一个窗口,标题为“ActiveMovie 窗口”。 但是窗口中没有视频。
我在同一页面上提到了 cmets,许多其他人也面临同样的问题。然而,少数人能够成功运行该程序。
我做错了什么?
我的问题来自另一个类似的问题。我无法对这个问题发表评论,因为我是 Stack Overflow 的新手。
【问题讨论】:
-
windows media player可以在同一台电脑上播放视频吗? .avi 文件可以包含许多不同格式的视频。 Dshow 仅限于与 windows 媒体播放器相同的文件格式和编解码器。如果没有,您可能缺少编解码器或文件可能已损坏。
标签: c++ winapi video com directshow