DirectShow 最简单的入门 -- 播放一段视频

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

 

posted @ 2013-10-27 19:12  easyfrog  阅读(431)  评论(0编辑  收藏  举报