1 #include <dshow.h> 2 3 #pragma comment(lib,"strmbase.lib") 4 #pragma comment(lib,"quartz.lib") 5 6 int main() { 7 // Filter Graph Builder 8 IGraphBuilder *pGraph = NULL; 9 // Media Control 10 IMediaControl *pControl = NULL; 11 // Media Event 12 IMediaEvent *pEvent = NULL; 13 // 初始化COM库,HRESULT 就是函数运行的结果是成功了还是失败了,使用FAILED(hr),SUCCEEDED(hr) 来判断 14 HRESULT hr = CoInitialize(NULL); 15 16 // 如果初始化COM库失败的话,就返回 17 if (FAILED(hr)) 18 { 19 return 0; 20 } 21 22 // 创建 Filter Graph Manager 23 hr = CoCreateInstance( 24 CLSID_FilterGraph, 25 NULL, 26 CLSCTX_INPROC_SERVER, 27 IID_IGraphBuilder, 28 (void**) &pGraph 29 ); 30 31 // 如果创建失败 返回 32 if (FAILED(hr)) 33 { 34 return 0; 35 } 36 37 // 使用 Filter Graph Manager 得到 MediaControl & MediaEvent 38 hr = pGraph->QueryInterface(IID_IMediaControl,(void**)&pControl); 39 hr = pGraph->QueryInterface(IID_IMediaEvent,(void**)&pEvent); 40 41 // 设置渲染一个视频文件 42 hr = pGraph->RenderFile(L"E:/学习/WPF/VS2008WPFVideo07.wmv",NULL); 43 44 if (SUCCEEDED(hr)) 45 { 46 // 使用 pControl 的 RUN 方法,开始播放视频 47 hr = pControl->Run(); 48 49 if (SUCCEEDED(hr)) 50 { 51 // 等待播放结束 52 long evCode; 53 pEvent->WaitForCompletion(INFINITE,&evCode); 54 } 55 } 56 57 // 释放资源 58 pControl->Release(); 59 pEvent->Release(); 60 pGraph->Release(); 61 // 释放COM库 62 CoUninitialize(); 63 64 return 0; 65 }
DirectShow 是基于COM 组件的, 所以在使用前最好先了解一下COM编辑的一些基础的知识.
最近也是刚开始接触DS ,因为在做新媒体应用 的时候总是很常用到.所以很有了解学习的必要
做了一个最简单的入门程序(来自己网络),用来敲开DirectShow的大门!!!