(DirectX系列03)DirectShow简单媒体文件播放

本文介绍了DirectShow SDK环境的搭建过程,通过下载并配置dxsdk_feb2005_extras.exe完成DirectShow的安装。同时给出了一个简易媒体文件播放程序的实现代码,包括过滤器管理器的创建、媒体控制器的查询以及媒体文件的播放。

Directshow SDK提供了一种开放的开发环境,开发人员可以根据自己的需要制定各种组件。Directshow使用一种滤波器链表(Filter Graph)的模型来管理整个数据流的处理流程,每个部分都是COM组件,形成模块化,参与数据处理的模块就是滤波器(Filter)。

上几周学习DirectSound做了些总结,今天开始学习DirectShow今天主要介绍一个简单的媒体文件播放的程序。

首先来介绍下DirectShow的环境搭建,其实环境的搭建并不是很难,但是下载SDK确实发费了不少时间。现在来做一个总结,经过测试下载dxsdk_feb2005_extras.exe软件是正确的,将这个文件解压到制定的目录,会出现Directshow和Directsound两个目录,再将这两个目录拷贝到F:/Microsoft DirectX SDK (February 2010)目录(即DX安装目录),这样的话就基本上配置好环境了。但是在工程里面还需要附加文件目录和LIB目录,这里就不详细介绍了,如下来介绍简单的代码,这部分代码来自《VC++音频/视频处理技术及工程实践》书中。

创建过滤器管理器

IGraphBuilder *pGraph = NULL;

hr=CoCreateInstance(CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER,

IID_IGraphBuilder, (void **)&pGraph);

查询媒体控制器和媒体事件接口

hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);

开始播放

hr = pGraph->RenderFile(L"D://DXSDK//Samples//Media//ruby.avi", NULL);
if (SUCCEEDED(hr))
{
// 运行图表.
hr = pControl->Run();
if (SUCCEEDED(hr))
{
//等待回放结束事件.
long evCode;
pEvent->WaitForCompletion(INFINITE, &evCode);
// 切记: 在实际应用当中,不能使用INFINITE标识, 因为它会不确定的阻塞程序
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值