您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 基于DirectShow的媒体播放器设计0
基于DirectShow的媒体播放器设计学号:200706705作者:国艳松基于DirectShow的媒体播放器设计•研究背景与意义•开发相关技术•DirectShow体系结构•播放器的功能设计•智能连接•DirectShow播放器的实现•播放器系统演示1.研究的背景与意义•随着信息技术的发展,流媒体播放器迎来新的挑战。•DirectShow简化多媒体应用程序的开发,不必考虑复杂的数据流格式和不同的终端设备,以及数据同步的问题。•DirectShow给多媒体程序开发员提供了标准的、统一的、高效的API接口2.开发相关技术•DirectXSDK9.0•微软将DirectX定义为“硬件无关性”,从而提高设备性能•MicrosoftVisualC++6.0平台•Windows提供的可视化集成开发环境3.DirectShow体系结构•COM组件•Filter•FilterGraph•FilterGraphManager3.1COM组件•是一种软件架构,它规定了不同的对象使用统一的协议来进行通讯的一套机制。•COM组件的特点•COM组件类型•GUID3.2过滤器(Filter)•DirectShow是基于模块化,每个功能模块都采取COM组件方式,称为过滤器(Filter)。•Filter存在形式•Filter分类•Filter状态3.3过滤器图(FilterGraph)•过滤器图(FilterGraph)是过滤器(Filter)的容器。•过滤器图作用•过滤器图数据传输模式•过滤器图状态3.4过滤器图管理器(FilterGraphManager)•应用程序用于控制过滤器图和过滤器的COM组件。•过滤器图管理器功能:•1:状态改变•2:参考时钟•3:Graph事件4.播放器的功能设计•本论文中要求基于DirectShow设计播放器,根据对媒体的分析得到系统的主要功能如下:媒体播放器播放器的基本功能截图功能全屏功能声音控制功能换肤功能播放模式控制播放列表操作6.智能连接•是构建FilterGraph的一种方法•智能连接的优点•1:与传统方法相比,具有智能化•2:避免了代码冗余•智能连接原理7.DirectShow应用程序开发•创建过滤器管理器实例•使用过滤器管理器构建过滤器图•过滤器管理器控制过滤器图和流数据通过过滤器。•应用程序释放过滤器管理器和所有的过滤器。7.1创建过滤器管理器实例•首先初始化DirectXSDK动态库:•CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void**)&mGraph)7.2应用程序构建过滤器图•利用IGraphBuilder::RenderFile函数,进行智能连接•该参数提供源文件名,自动加入必要的Filter完成这个文件的回放FilterGraph构建。•RenderFile函数机理:•分析文件路径中是否有协议名(如http、ftp),如果有,则在注册表的位置下寻找这个协议名,找到了则使用SourceFilter键值指定的CLSID。•找不到的情况下,FilterGraphManager就创建一个成为FileSource的Filter。7.2应用程序构建过滤器图•文件路径中不包括协议名,FilterGraph就分析这个文件的扩展名,然后到注册表中区匹配扩展名。如果找到了,就根据SourceFilter键值指定的CLSID创建Filter。•若找不到,FilterGraphManager就进行文件的校验字节判断。如果没有符合的,SourceFilter就要创建一个FileSource的Filter.7.2应用程序构建过滤器图•IGraphBuilder::RenderFile使用上述方法检测文件的类型,确定并找到正确的源过滤器(SourceFilter)。确定源过滤器(SourceFilter)后,就从源过滤器(SourceFilter)的各个输出Pin开始,进行剩下的智能连接过程。这是一个“递归过程”,直到所有的分支都连接到一个RenderingFilter上为止。8.3智能连接构建FilterGraph•在操作系统中,通过安装各种媒体软件和DirectShow开发包,就会存在了大量的实现特定功能的Filter,利用这些己有Filter,可以开发各个功能的应用程序,提高了开发效率。•利用FilterGraphManager组建FilterGraph时,寻找Filter是程序开发的关键。•那DirectShow是如何寻找Filter?8.3智能连接构建FilterGraph•DirectShow提供了两种枚举Filter的方法。一种是利用系统设备枚举器(SystemDeviceEnumerator),通过Filter的分类枚举各种过滤器。另一种方法是通过过滤器图,根据程序提供的搜索条件寻找合适的过滤器。搜寻到合适的Filter后,利用FilterGraphManager的IFilterGraph接口实现该Filter的添加。Filter之间的连接,也是通过FilterGraphManager所提供的COM接口实现的。8.3智能连接构建FilterGraphIGraphBuilder::RenderFile是根据文件媒体类型利用智能连接机制构造了一个能够播放特定文件的FilterGraph。播放的准备工作完成后,就可以利用IMediaControl::Run方法让FilterGraph进入运行模式,使媒体数据开始在FilterGraph中流动。主要代码如下:mGraph-QueryInterface(IID_IMediaControl,(void**)&mMediaControl);//获取媒体控制接口•mMediaControl-Run();//对FilterGraph中的媒体流进行控制截图实现•从FilterGraphManage中可以获取IBasicVideo接口,这个接口支持通用的视频窗口的视频属性,当视频提交过滤器处于连接状态时,可以使用接口方法GetCurrentImage返回,在提交过滤器中等待的当前图片的副本,达到抓取图片的目的。•另外,Filters之间是以Sample的形式传送数据的,Sample是一个封装了一定大小数据内存的COM组件。当Graph构建成功之后,Sample从上一级的输出Pin传送给下一级的输入Pin。因此,同样可以通过抓取Sample的方式,在视频流中抓取图片。9播放器系统演示换肤演示打开文件演示截图界面声道/声音控制总结•流媒体的应用方兴未艾,各种基于流媒体的应用研究正成为热点,取得的成果是有目共睹,而定制组件开发技术必将在流媒体应用中发挥更为广泛的作用。•DirectShowSDK是基于COM组件,该技术是开发多媒体的一个行之有效的方法。目前,网络上多媒体数据的急剧增大,以及对实时性需求的增加,使得DirectShow越来越广泛地应用在媒体播放程序中。在未来几年中,DirectShow技术的发展前景相当广阔。致谢•感谢指导老师•感谢评委•感谢我的朋友和同学
本文标题:基于DirectShow的媒体播放器设计0
链接地址:https://www.777doc.com/doc-4027690 .html