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的大门!!!