随笔-27  评论-6  文章-0  trackbacks-0
编写一个DirectShow应用程序大体需要3个步骤
  1. 创建一个Filter Graph Manager的实例
  2. 使用Filter Graph Manager创建一个filter graph,此时需要必备的filter
  3. 使用Filter Graph Manager控制filter graph和通过这些filter的流,在这个过程中,应用程序会收到Filter Graph Manager发送的事件
  
  完成上述几步后,最后需要释放这个Filter Graph Manager和所有的Filter资源。
示例(头文件和库文件已在安装vs2008时配置好了,在$(FrameworkSDKDir)include,即C:\Program Files\Microsoft SDKs\Windows\v6.0A里):                                  
#include "stdafx.h"

#include 
<DShow.h>                   //引入DirectShow头文件
//引入DirectShow库文件,这里采用从源程序引入,也可以配置开发环境来引入
#pragma comment(lib,"strmiids.lib"
int _tmain(int argc, _TCHAR* argv[])     
{
    IGraphBuilder 
*pGraph = NULL;         //图表管理器接口
    IMediaControl *pControl = NULL;       //媒体控制接口
    IMediaEvent *pEvent = NULL;           //媒体事件接口
    
//初始化COM库
    HRESULT hr = CoInitialize(NULL);
    
if (FAILED(hr))
    {
        printf(
"ERROR - Could not initialize COM library.");
        
return -1;
    }
    
//创建滤波器链表管理器
    hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void**)&pGraph);
    
if (FAILED(hr))
    {
        printf(
"ERROR - Could not create the Filter Graph Manager.");
        
return -1;
    }
    
//查询媒体控制和媒体事件接口
    hr = pGraph->QueryInterface(IID_IMediaControl,(void**)&pControl);
    hr 
= pGraph->QueryInterface(IID_IMediaEvent,(void**)&pEvent);
    
//建立链表
    hr = pGraph ->RenderFile(L"E:\\MicroMouse\\MicroMouse615走迷宫演示.WMV",NULL);
    
if (SUCCEEDED(hr))
    {
        
//运行链表
        hr = pControl->Run();
        
if (SUCCEEDED(hr))
        {
            
//等待回放结束事件
            long evCode;         //事件码
            pEvent->WaitForCompletion(INFINITE,&evCode);//无限时间的等待,直到媒体播放结束
        }
    }
    
//释放所有资源和关闭COM库
    pControl->Release();
    pEvent
->Release();
    pGraph
->Release();
    CoUninitialize();

    
return 0;
}
                           

posted on 2010-08-31 01:00 CrazyNerd 阅读(1565) 评论(0)  编辑 收藏 引用 所属分类: 文件、图形与多媒体

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理