您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 基于directshow视频播放器的开发与设计
VC程序设计报告XXXX学院软件设计题目:基于DirectShow的视频播放器所在系:计算机科学系专业:计算机科学与技术学号:作者姓名:指导教师:2013年10月5日VC程序设计报告基于DirectShow的视频播放器摘要:DirectShow是微软WindowsSDK中的流媒体开发平台,它基于COM技术。采用DirectShow开发视频播放软件,具有快捷、代码量少和程序稳健的特点。本文介绍用DirectShow开发视频播放器的基本过程。关键词:DirectShow,COM,视频播放器Abstract:DirectShow,basedonCOMtechnology,isanimportantcomponentofMicrosoftWindowsplatformSDK.DevelopingvideoplayerusingDirectShowhasthebenefitsofquickness,reducedcodeandrobustness.ThispaperintroducesthebasicprocedureofdevelopingvideoplayerbasingDirectShow.Keyword:DirectShow,COM,VideoPlayerVC程序设计报告目录1.引言..............................................................42.DirectShow介绍..................................................42.1DirectShow系统......................................................42.2.DirectShow技术.....................................................52.2.1过滤器Filter...................................................52.2.2针脚Pin........................................................52.2.3FilterGraph...................................................62.2.4FilterGraphManager...........................................62.3.基于DirectShow的应用程序开发.......................................62.4播放媒体文件.........................................................73.视频播放器的开发.................................................73.1开发环境的配置.......................................................73.2.基于对话框的MFC应用程序............................................83.3编辑对话框界面.......................................................93.4.视频窗口控制.........................................................93.5.封装类CDXGraph.....................................................103.6.创建FilterGraph...................................................103.7.处理FilterGraph的事件............................................113.7.1消息映射..........................................................113.7.2图表消息响应函数..................................................113.7.3打开按钮响应函数..............................................133.7.4播放按钮响应函数..............................................133.7.5暂停按钮响应函数..............................................143.7.6停止按钮响应函数..............................................143.7.7进度条的实现..................................................154.程序测试........................................................155.参考文献........................................................16VC程序设计报告1.引言DirectShow是微软公司在ActiveMovie和VideoforWindows的基础上推出的新一代基于COM(ComponentObjectModel)的流媒体处理的开发包,与DirectX开发包一起发布。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。这样使在多媒体数据库管理系统(MDBMS)中多媒体数据的存取变得更加方便。DirectShow广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。本文基于DirectShow实现能播放多种格式文件(AVI、MPEG、WAV)的视频播放器。2.DirectShow介绍2.1DirectShow系统DirectShow的架构如图1所示。图中央最大的一块即是DirectShow系统,虚线以下是Ring0特权级别的硬件设备,虚线以上是Ring3特权级别的应用层。DirectShow系统位于应用层中。它使用一种叫FilterGraph的模型来管理整个数据流的处理过程;参与数据处理的各个功能模块叫做Filter;各个Filter在FilterGraph中按一定的顺序连接成一条“流水线”协调工作。[1]VC程序设计报告图1DirectShow架构2.2.DirectShow技术2.2.1过滤器Filter过滤器是DirectShow的基本“建筑”单元。DirectShow把数字媒体的处理(播放、捕获和格式转换)划分为一些独立的步骤,过滤器就是完成一个或多个步骤的COM对象。按照功能来分,Filter大致分为3类:SourceFilter、TransformFilter和RenderingFilter。SourceFilter主要负责获取数据,数据源可以是文件、因特网计算机里的采集卡(WDM驱动的或VFW驱动的)数字摄像机等,然后将数据往下传输;TransformFilter主要负责数据的格式转换,例如数据流分离、合成,解码、编码等,然后将数据继续往下传输;RenderingFilter主要负责数据的最终去向——将数据送给显卡、声卡进行多媒体的演示,或者输出到文件进行存储。2.2.2针脚PinFilter一般由一个或多个Pin组成,Filter之间通过Pin相互连接,构成一条顺序的链路。Filter的分类亦可根据Filter包含的输入Pin或者输出Pin的数量进行。如图2所示,仅含有输出Pin,没有输入Pin的Filter为SourceFilter;既有输入Pin又有输出Pin的Filter为TransformFilter;仅有输入Pin,没有输出Pin的Filter为RenderingFilter。VC程序设计报告图2Filter通过Pin连接2.2.3FilterGraph在DirectShow中,一个播放程序必需实例化一个或多个过滤器,并把它们连接起来。这样数据才能从一个过滤器到达另一个,经过它们的处理,直到表现过滤器。所有这些过滤器和它们之间的连接被称为过滤器图(FilterGraph)。2.2.4FilterGraphManagerFilterGraphManager过滤器图表管理器是DirectShow架构的核心,它是在过滤器图表中控制各个过滤器的一个COM对象。主要有以下的功能:1协调Filter之间的状态改变:Graph中的Filter的状态改变应该一致,因此,应用程序并将状态改变的命令直接发给Filter,而是将相应的状态改变的命令发送给FiltergraphManager,由manager将命令分发给Graph中每一个Filter。2建立一个参考时钟:Graph中的Filter都采用的同一个时钟——参考时钟(referenceclock),以确保所有的数据流同步,视频帧或音频帧应该被提交的时间(presentationtime)是相对于参考时钟来确定的。FiltergraphManager应该选择一个参考时钟,可以选择声卡上的时钟,也可以选择系统时钟。3将Graph的消息返回给应用程序:Graph管理器采用事件机制将Graph中发生的事件通知给应用程序,这个机制类似于Windows的消息循环机制。4提供方法构建FilterGraph:Graph管理器给应用程序提供了将Filter添加进Graph的方法,连接Filter的方法,断开Filter连接的方法。但是,Graph管理器没有提供如何将数据从一个Filter发送到另一个Filter的方法,这个工作是由Filter在内部通过Pin来独立完成的。2.3.基于DirectShow的应用程序开发基于DirectShow的应用程序开发一般过程如图所示:[1]VC程序设计报告图3基于DirectShow的应用程序开发过程第一阶段,创建一个FilterGraphManager组件。第二阶段,根据实际的应用,创建一条完整的Filter链路。第三阶段,调用FilterGraphManager上(或直接在某个Filter上)的各个接口方法进行控制,并且完成FilterGraphManager与应用程序的事件交互。2.4播放媒体文件DirectShow提供了大量的Filter用以支持最基本的应用。根据实际需要,也可以定制自己的Filter。它的最基本的应用莫过于回放一个媒体文件。如下图是一个典型的AVI文件回放的链路。图4本地AVI文件的回放链路其中,箭头方向即使数据的方向。FilterSource属于SourceFilters,它用于管理硬盘上指定的播放文件,并根据AVISplitter的要求提供数据。AVISplitter和AVIDecompressor属于TransformFilters,其中,AVISplitter负责向FilterSource索取数据,并将取得的音频和视频进行分离,然后分别从各自的输出pin输出:AVIDecompressor负责视频的解码。VideoRenderer和DefaultDirectSoundDevice负责同步播放声音。3.视频播放器的开发
本文标题:基于directshow视频播放器的开发与设计
链接地址:https://www.777doc.com/doc-4535502 .html