1首先要搭建direct show平台,参考陆大侠的《dshow实务精选》 17页 ,里面有比较详尽的解答
2 主要的代码
IGraphBuilder *pGraph;
IMediaControl *pMediaControl;
IMediaEvent *pEvent;
IVideoWindow *piWindow;
CoInitialize(NULL);
// 在使用之前一定要先创建filter ,同时通过QueryInterface函数调用,提供filter需要的接口。
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
pGraph->QueryInterface(IID_IVideoWindow, (void **)&piWindow);
3 播放的实体,通过render函数,可以播放dshow自己支持的所有媒体文件,但是要播放如H.264等dshow不支持的媒体格式的话,需要自己再写一个decoder filter,然后将自己的filter添加到graph之中,添加之前一定要确保添加的filter已经注册
pGraph->RenderFile(L"C://Example.mpeg", NULL);
4 视频的窗口设置
piWindow->put_Owner((OAHWND)GetSafeHwnd());
piWindow->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
pMediaControl->Run();
// Wait for completion.
long evCode;
pEvent->WaitForCompletion(INFINITE, &evCode);
// Clean up.
pMediaControl->Release();
pEvent->Release();scorpion
pGraph->Release();
CoUninitialize();