DirectShow directshowopencv

1最简单的DirectShow应用程序 — 播放视频

1.简介
DirectShow是DirectX中的一套处理媒体播放、音视频采集的开发包,在DirectXSDK Summer 2004(DirectX9.0C SDK的第一个版本,下载地址:http://download.microsoft.com/download/7/e/9/7e9f48c6-f28a-469b-9b8e-cc84032efbd4/
dxsdk_sum2004.exe)之前的DirectXSDK中都包含有DirectShowSDK,之后的DirectShowSDK以Extras的形式单独发布。2.下载安装这里使用了DirectX9.0b,下载地址为:http://download.microsoft.com/download/b/6/a/b6ab32f3-39e8-4096-9445-d38e6675de85/dx90bsdk.exe假设DirectXSDK安装在D:DXSDK目录下,开发环境使用VC++6.0。在这个版本的DirectXSDK中,DirectShowSDK的库文件STRMBASE.lib需要自己编译,位置在:D:DXSDKSamplesC++DirectShowBaseClasses目录下。3.设置VC++6.0环境添加D:DXSDKInclude到Includefiles目录列表中。4.最简单的DirectShow应用程序 -播放视频文件#include<windows.h>#include<DShow.h>#pragmacomment(lib,"Strmiids.lib")int__stdcall WinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnShowCmd){//本例来自DirectXSDK:HowTo Play a FileIGraphBuilder*pGraph=NULL;IMediaControl*pControl=NULL;IMediaEvent*pEvent=NULL;//初始化COM库.HRESULThr=CoInitialize(NULL);if(FAILED(hr)){MessageBox(NULL,"ERROR- Could not initialize COMlibrary",
"Warning",MB_OK|MB_ICONWARNING);
return-1;}//Create the filter graph manager and query forinterfaces.hr=CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void**)&pGraph);if(FAILED(hr)){MessageBox(NULL,"ERROR- Could not create the Filter Graph Manager.","Warning",MB_OK|MB_ICONWARNING);return-1;}hr=pGraph->QueryInterface(IID_IMediaControl,(void**)&pControl);hr=pGraph->QueryInterface(IID_IMediaEvent,(void**)&pEvent);// Buildthe graph. IMPORTANT: Change this string to a file on yoursystem.hr=pGraph->RenderFile(
L"E:\Movie\2012\[2012].2012.2009.R5-CD2-人人影视.rmvb",NULL);
if(SUCCEEDED(hr)){// Runthe graph.hr=pControl->Run();if(SUCCEEDED(hr)){// Waitfor completion.longevCode;pEvent->WaitForCompletion(INFINITE,&evCode);}}pControl->Release();pEvent->Release();pGraph->Release();CoUninitialize();return0;}2 DirectShow原理DirectShow使用Filter Graph模型来管理整个数据流的处理过程,它是一系列Filter构成的一条流水线,其中的每个Filter都是COM组件。Filter主要有几个大类:a.源Filter:负责读取数据;b.转换Filter:负责转换数据的格式,常见的视频解码器就是转换Filter;c.渲染Filter:负责输出数据,如播放或存盘操作。每个Filter都有一个或几个引脚,各个Filter通过这些引脚相连形成一个Filter Graph。DirectX9.0 SDK中提供了一个工具GraphEdit,它可以演示Filter之间的连接关系,并执行这个Filter Graph。

DirectShow directshowopencv
下面用GraphEdit来展示一个rmvb文件的播放过程:

真正开发的时候,其实就是把这个图用代码描述出来。

  

爱华网本文地址 » http://www.413yy.cn/a/25101017/360718.html

更多阅读

DirectShow学习笔记转

写这篇笔记,就当是对这个期间学习DirectShow的一个总结,假如它可以给你带来一些收获的话,那我会感到更高兴。还有我遇到的一些问题,希望和大家一起讨论。一、基本概念1.DirectShow概述DirectShow的主要功能是流媒体的采集与回放。它集成

声明:《DirectShow directshowopencv》为网友陈情词不达分享!如侵犯到您的合法权益请联系我们删除