




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
视频播放器设计1 需求分析由于计算机的普及,极大地改变了人们的生活。随之带来了开发各种软件的需求。家用型计算机主要用于家用软件、学习软件、游戏软件和多媒体和多媒体软件,以及播放CD、VCD、DVD、MP3等多媒体信息。然而多媒体播放器的开发仍然不能满足人们的需求,多媒体文件格式多样,但却没有一款播放器能够满足所有格式的解码。人们渴望解码能力更强大,功能更完备的多媒体播放器。“多媒体”是一种新型的信息处理与传播技术。有人认为它是信息及其传输媒介方面的一场根本革命。人们对新技术的渴望和欢迎、新奇感和占有欲、宣传热情和赞美态度,是发自内心的。特别是计算机多媒体技术的功能,令人大开眼界,惊叹不已。它在商业、信息检索、文化娱乐和教育等方面的应用效果明显,前景广阔。由多媒体播放器的开发现状看来,并没有哪一款播放器能适应所有多媒体文件的解读,随着视频、音频的迅猛发展,媒体文件的格式层出不穷,由过往美国在线(AOL)公司的Nullsoft部门开发的Winamp独占鳌头,到Real Networks公司的Real Player和微软公司的Windows Media Player风靡全球,再到如今播放器开发的百花齐放的竞争时代,多媒体播放器的开发经历了许多风浪和变化,但是,仍然没有出现全能的播放器,始终没有跨越编码格式的局限,随着多媒体技术的不断发展,人们对多媒体软件的要求也不断高涨,所以对多媒体软件的开发也成为当今计算机开发的重要课题。目前的音频、视频格式繁多,研制格式覆盖面广的多媒体播放器前景非常广泛。 随着计算机、家电、通信等技术的不断发展,多媒体技术有着广泛的开发前景,尤其是多媒体播放器的开发,开发格式覆盖面更广,兼容性更好,功能更完备的播放器势在必行。本文主要采用C+ Builder2009作为开发工具,设计并实现一个多媒体播放器。可播放MP3,AVI,WMV,WMA,RM,RMVB,SWF等多种格式的多媒体文件,并且能够控制播放,暂停,停止,快进,后退,音量控制的调节,选择上一曲,选择下一曲,图像的显示,文件的计时,列表文件的添减操作等多种播放控制功能,界面简明,操作简单。2 系统总体设计2.1DirectShow概述DirectShow是一种通过自定义或内置的大量的Filter(过滤器)来处理多媒体数据的体系结构。这些Filter大致分三类:Source Filter(源过滤器)、Transform Filter(转换过滤器)、Render Filter(呈现过滤器)。源过滤器主要负责获取数据,数据源可以是文件、网络、计算机采集卡或数字摄像机里的,然后数据向下传输到Transform Filter,它主要负责数据的格式转换,然后继续向下传输到Render Filter,它主要负责数据的最终去向,将数据送给显卡声卡进行播放或输出变成文件存储起来,见图2-1。图2-1 DirectShow开发应用程序原理图过滤器Filter是建立在COM技术基础上的,每个Filter本身就是一个COM组件,各个Filter集合组成过滤器图(FilterGraph),DirectShow提供Filter Graph Manager组件来管理整个过滤器图,比如Filter间的连接和数据流动。Filter之间通过Pin(针脚)连接。更多感性认识DirectShow,可以DirectX SDK中的自带的实用的程序GraphEdit,位于安装目录BinDXUtilsgraphedt.exe。GraphEdit是构造Filter Graph Manager的可视化工具,在GraphEdit中可以很方便地设计出过滤器图,并验证其可行性。比如:播放一个典型的Demo1.mpg文件(将文件拖动到GraphEdit窗口)所自动构建的Filter Graph。见图2-2。图2-2 MPEG文件播放的Filter Graph如图2所示,箭头方向即是数据的流动,可以看到:MPEG-1 Stream Splitter属于Source Filters,负责接收源文件数据;MPEG Audio Decoder、MPEG Video Decoder属于Transform Filters;分别负责视频、音频的解码;Default DirectSound Device、Video Renderer属于Render Filters,分别负责对视频显示和音频播放。执行菜单Graph-Play,可以看到播放的影音文件。在Graph-Insert Filters可以看到DirectShow提供的大量的支持基本应用的Filter。2.2软件的总体架构图2-3 软件架构2.3 详细设计与实现下面在C+ Builder中,利用DirectShow技术设计媒体播放器,介绍了DirectShow程序的一般编写方法。以两种方法实现:一种是直接用DirectX SDK;另一种是用基于DirectShow技术的第三方控件包DsPack。2.3.1 直接用Direct X SDK中的DirectShow技术的媒体播放器。用DirectShow编写播放器,可以说主要包括三步:创建一个Filter Graph Manager组件。根据实际的应用,创建一条完整的链路。比如播放一个本地文件:m_FilterGraph-RenderFile(“Demo1mpg”,NULL);调用Filter Graph Manager(或某个Filter)上的各个接口方法进行控制。并完成Filter Gramph Manager与应用程序的事件交互。比如IMediaControl接口方法Run()、Stop()来控制媒体的播放与停止。在本实例中,第一步创建一个Filter Graph Manager组件,由自定义的封装类CDXGraph来完成,它的实现文件是CDXGraph.cpp和CDXGraph.h。第二三步要实现与CDXGraph之问的事件交互。由主窗口MainForm(MainUnit.cpp和MainUnit.h)完成。该程序部分主要代码如下:/定义基本接口。IGraphBuilder是最重要的接口,用于构造Filter graph;IMediaControl播放控制接口,控制播放、停止、暂停等;IMediaEventEx:应用程序通过此接口获得播放过程中发生的事件,如播放完毕等。IBasicVideo、IBasicAudio分别是图像和声音控制接口;IVideoWindow视频窗口控制接口;IMediaSeeking用于媒体数据流的定位,提供对播放的精确控制,如获得当前播放位置等。IGraphBuilder *mGraph;IMediaControl *mMediaControl;IMediaEVentEx *mEvent;IBasicVideo *mBasicVideo;IBasicAudio *mBasicAudio;IVideoWindow *mVideoWindow;IMediaSeeking *mSeeking;/用API函数初始化COM组件库CoInitialize(NULL);/创建Filter graph对象,得到IGraphBuilder接口的接口指针mGrphHRESULT hr=CoCreateInstance(CLSID_FilteGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void * *)mGraph);/用QueryInterface()函数获取接口指针hr = mGraph - QueryInterface(IID_IMediaControl,(void * *)mMediaControl);hr = mGraph - QueryInterface(IID_IMediaEventEx,(void * *)&mEvent);hr = mGraph - QueryInterface(IID_IBasicVideo,(void * *)mBasicVideo);hr = mGraph - QueryInterface(IID_IBasicAudio,(void * *)&mBasicAudio);hr = mGraph - QueryInterface(IID_ideowindow,(void * *)&mVideowindow);hf = mGraph - QueryInterface(IID_lMediaSeeking,(void * *)&mseeking);/连接输入输出Pin针脚,连接各个Filterhr=mGraph - ConnectDirect(inOutputPin,inInputPin,inMediaTyp);/IGraphBuilder接口的方法RenderFile来连接给定的媒体文件,完成Filter Graph的构建。m_FilterGraph - RenderFile(m_SourceFile.c_str();/设置视频窗口并设置消息通知窗口m_FilteGraph - SetDisplaywindow(Panell -Handle);m_FilteGraph - SetNotifyWindow(this -Handle);/开始播放m_FilteGraph -Run();/关闭COM组件库,释放资源CoUtlinitialize();2.3.2 基于DirectShow技术的第三方控件包DSPack的媒体播放器Dspack2.34是C+ Builder中用于做DirectShow开发的免费VCL控件。下载地址:/。DSPack的安装可以参考相关文档。图2-4组件面板上的DSPack2.34Dspack2.34中有七个组件:FilterGraph、VideoWindow、SampleGrabber、Filter、ASFWriter、DSTrackBar、DSVideoWindowEx2。见图5-1。FilterGraph组件基本对应于DirectShow中的Filter Graph Manager,Filter Graph的创建和控制由它完成。Filter组件可以充当DirectShow中的各种Filter,VideoWindow组件相当于是一个RenderingFilter,用来显示采集到的视频图像。其它各组件的详细说明可以参照DSPack安装目录下的帮助文档help.chm2-3。程序由一个主窗体MainForm组成。MainForm窗体上放置FilterGraph组件,属性Name命名为FilterGraph,Mode属性为gmNormal;放置VideoWindow组件,FilterGraph属性设置为FilterGraph;放置DSTrackBar组件,用于显示播放进度;其它放置0penDialog、MainMenu、四个Button组件,Caption分别设置为打开、播放、暂停、停止。MainForm中主要代码如下:Buttonl的0nclick事件添加如下代码:if(0penDialog - Execute()|FilterGraph - Active = TRUE;/初始化各个Filter,并建立FilterGraph FilterGraph - RenderFile(OpenDialog -FileNalm);/播放文件名给FilterGraphButton2的OnClick事件添加如下代码:FilterGraph - Play(); /控制FilterGraph的播放Button3、Button4的0nclick事件分别添加如下代码:FilterGraph - Paus(); /播放暂停FilterGraph - Stop(); /播放停止VideoWindw的OnDblClick双击事件添加代码:VideoWindow - FullScreen =! VideoWindow -FullScreen;/全屏播放MainForm的OnCloseQuery事件添加如下代码:FiherGraph - Active = FALsE;/释放各个Filter本程序开发环境WindowsXP + DirectX9.O + DSPack2.34。本程序编译后成功运行。3 测试与维护3.1 创建和测试应用程序为了确保本系统能够正常运行,需要在开发完成之后做一次较全面的测试。现将具体操作及过程举例说明如下:创建和测试应用程序应是交替进行的,既要注意开发的效率也要注意它的稳定性。每编写一个模块,就要对这个模块进行测试,看它能否根据特定的要求工作。及早发现问题,及早解决,否则到最后再来测试的话,难度会大大增加。3.2 程序改进本软件没有考虑到删除播放列表中文件在ListBox中的索引号小于当前值的时候,删除之后不能把光标移动到当前播放文件。本软件没有提供解码更新,这是本软件以后要着重改的地方。3.3测试方法一般来说,对程序测试有两种测试方法:如果已经知道了软件系统应具有的功能,可通过测试来对每个功能是否都能正常使用;如果知道程序的内部工作过程,可以通过测试来检测程序内部是否按照规格说明书的规定正常进行。前一种方法称为黑盒测试,后一种方法称为白盒子测试。黑盒测试又称为功能测试,白盒子测试又称为结构测试。4 本系统采用黑盒测试,以下以播放WMV文件为例子。界面如下:4 总结基于两种不同方法实现媒体播放器程序时的代码比较,我们采用了C+ Bui- ldel2009 + Direct X SDK9.O + DSPack2.34编写该播放器。因为用c+ Buildel2009 + Directx SDK9.0编写时,代码行约为400行,并需要深入的DirectShow和COM组件知识;而采用C+ Buildel2009 + Direct X SDK9.O + DSPack2.34编写时,代码行约为20
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司深秋拓展活动方案
- 公司放松娱乐活动方案
- 公司游玩活动策划方案
- 公司节日纪念活动方案
- 公司早会流程策划方案
- 公司直播间灯光策划方案
- 公司组织踢毽子策划方案
- 公司组织慰问活动方案
- 公司花园团建活动方案
- 2025年小学教师资格考试试卷及答案
- 湖北省部分学校2023-2024学年高二下学期期末考试地理试题
- 基于大数据的公路运输碳排放评估与控制
- 叙事护理学智慧树知到期末考试答案章节答案2024年中国人民解放军海军军医大学
- 工业机器人系统操作员国家职业技能考核标准(2023年版)
- 上海学前教育学院附属青浦第二实验幼儿园新生入园登记
- 卡前列素氨丁三醇在产后出血的的应用课件
- 固废危废培训课件
- 水库安保服务方案
- 一例ANCA相关性血管炎患者的护理查房
- 《外科微创技术》课件
- 如何建立与客户良好的关系
评论
0/150
提交评论