版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本科生毕业论文(设计)题 目: 基于VC下的多媒体播放器设计 姓 名: 黄建飞 学 院: 理学院 专 业: 网络工程 班 级: 091班 学 号: 1887090111 指导教师: 黄勇 职称: 副教授 2013年5月26日安徽科技学院教务处制目录摘要关键字1 引言1.1 课题研究的目的和技术发展的现状1.1.1 研究本课题的目的1.1.2 技术应用的基本现状1.2 论文完成的主要工作1.3 本论文中的重点2 基本功能描述3 设计思路4 软件设计4.1设计步骤4.2界面设计4.3关键功能的实现5 总结与心得体会6致谢7参考文献8 附录8.1调试报告8.2测试结果基于VC下的多媒体播放器设计网络
2、工程专业学生 黄建飞指导老师 黄勇摘要 目前常见的多媒体软件应该说各有特色,但是几乎每一款多媒体软件都存在着不如人意的地方。我的毕业设计题目是“基于VC下的多媒体播放器设计”,首先是初步介绍一些当前的媒体及媒体播放器,然后是详细介绍一个由本人设计的多媒体播放器软件。该播放器是基于MFC 集成开发环境下,利用系统的MCI(media controller interface)命令接口来编程。开发出多媒体播放器具有体积小,支持的播放格式多、系统资源占用少、支持播放列表编辑、支持各种视频格式等功能优势。关键字:媒体播放器;MCI;播放列表;音频;视频1 引言多媒体技术的概念和应用出现于20 世纪80
3、 年代初期,经过数十年的发展,并且随着计算机科学网络的普及和多媒体技术的发展,多媒体技术已成为计算机领域发展的热点技术,针对目前各种媒体格式,如何简单方便的播放各类媒体已成为人们普遍关注的问题,从而媒体播放器的开发也变得相当重要。1.1 课题研究的目的和技术发展的现状1.1.1 研究本课题的目的随着技术的发展,多媒体素材类型也在增多,包括音频、视频、图像、动画等,由于音视频、图像等的信息容量大,受硬件条件限制,以往多媒体应用并不广泛,随着硬件技术的不断提高,多媒体技术已为各类人员广泛使用,开发多媒体软件、网络课程、网站、应用软件、管理项目等均需利用多媒体素材,因此开发制作这一播放器具有很现实的
4、意义,与其它多媒体播放器相比较,这一多媒体播放器具有功能较为强大、占用空间小、占用系统资源少的特点,它与现有多媒体资源应用状况紧密结合,既具有很强的直观感,又不失一般性。1.1.2 技术应用的基本现状Microsoft公司1998年推出了Visual C+6.0,它是支持Win32平台应用程序(application)、服务(service)和控件(control)开发的可视化编程的集成环境。与VC+5.0的最大不同之处是它的帮助功能更强大,MSDN(Microsoft Developer Net- working)为包括VC+6.0在内的所有微软的程序产品提供在线帮助;另外,类的对象的可用成
5、员函数、成员变量及函数的参数类型与个数都能动态显示在屏幕上,用户无须记住那些复杂而又枯燥乏味的函数名及复杂的参数,这无疑使得用VC+编程更加容易。所以VC+6.0可谓是Microsoft 公司的王牌产品,编程功能强大而赢得广大程序员的偏爱。多媒体技术已经在如下若干方面开展了有效的应用:多媒体管理信息系统、展示系统;多媒体电子出版物(Title);计算机辅助教学、教育培训;计算机艺术制作、设计;计算机娱乐游戏、双向电影;协同工作。有以下三大发展趋势:进一步完善计算机支持的协同工作环境;智能多媒体技术;把多媒体信息实时处理和压缩编码算法集成到CPU 中。1.2 论文完成的主要工作根据学习和研究,此
6、多媒体播放器的开发是基于VC+MFC的对话框,再利用Windows MCI(Media Control Interface)控件和VC+6.0自带的ActiveX 控件Windows Media Player来实现各类媒体格式的播放及程序界面处理。首先确定要解决的问题是要弄清楚MCI 函数与命令消息的名称类型和功能;其次是通过分析媒体播放的具体过程,在打开媒体设备的过程中应用程序需要做哪些事情,以便在应用程序中加入对这些过程支持的代码;在对应用程序的流程有了大致的轮廓以后,再开始考虑程序框架的设计,应用程序外观的设计;最后也是最关键的就是编写实现播放媒体的代码将播放器的基本功能实现,紧接着就是
7、程序的调试和完善。1.3 本论文中的重点本论文中的重点是对Windows Media Player控件的应用,Windows Media Player 控件是微软公司推出的用于多媒休程序设计的控件,它提供了非常完善的音频和视频媒体文件的回放功能,能支持多种文件格式,从最常见的WAV 文件和AVI 文件到使用MPEG 压缩格式的VCD 视频文件,都可以正常地进行播放。控件能根据文件后缀进行自动判别设备类型,并完成相应的控制。因此,若正在编写的应用程序需要提供多媒体支持,那么使用Windows Media Player控件是一个很好的主意。事实上,很多优秀的多媒体应用程序,其内部的多媒体回放就是利
8、用Windows Media Player控件来实现的,只要精心地去设计应用程序的用户界面,我们一样可以开发出功能齐全、外观漂亮、具有相当水准的多媒体播放器。使用Windows Media Player控件开发多媒体应用程序可以大大提高多媒体开发效率,只要设置控件的File.Name属性,确定该控件要打开的媒体文件名称,然后执行RUN方法就可以对该媒体文件进行播放;通过设置Selectio.End和Selection- Slart的值,可以实现播放某一段媒体流;还能用鼠标Click相应的按钮完成播放、停止、暂停、保存列表、清空列表、删除当前等功能。2 基本功能描述 多媒体播放软件现在几乎成为每
9、一台家用计算机的装机必备软件,比较流行的有快播、暴风影音以及百度影音等等,通过这些软件能够播放RM、RMVB、MP3、MPEG、DAT等多种格式的多媒体文件。这些商业软件在功能上已经做的相当完备,也符合大多数普通消费者的的胃口,但很多人电脑里总是安装了多种播放器,因为不同的播放器有不同的特点,并不是每个人都执著于用某一款播放器,因此设计一款符合自己使用习惯的播放器是很可行的。 使用VC+6.0强大的MFC、AppWizard、Class Wizard和其中的多种控件可以很方便地建立各种应用软件。同时想要实现更高级更复杂的功能,也可以借助ActiveX控件资源,用这些现有的控件资源,可以省去自己
10、编程的复杂过程,从而实现更高级的功能。本次课程设计要使用VC+6.0自带的一个ActiveX控件Windows Media Player控件,建立自己的多媒体播放器。 此多媒体播放器具有打开文件、播放、暂停、保存列表、清空列表、删除当前、退出、静音等基本播放功能,并且可以播放:*.mp3,*.wma,*.rmvb,*avi等格式的音频视频文件。同时还具有自制的可隐藏的播放列表,并且可以在播放模式中选择顺序播放、随机播放、单曲循环三种方式。同时,我也添加了保存列表的功能,当下一次打开时能保留上一次保存的播放列表,当然也添加了清空列表和删除当前的功能,更具人性化。3 设计思路根据各个按钮控件功能以
11、及Windows Media Player控件的特点,首先要在头文件中将CWMPControl,CWMPSettings等类的对象的绑定以及定义,在后面的程序中需要调用这些类的成员函数。对于打开文件按钮,需要调用通用文件对话框类,并利用listbox中的AddString函数把选中的文件添加到播放列表中,在MFC学习中有涉及。对于一些基本的功能的实现,如播放、暂停、全屏、音量增大、音量减小、静音、快进、快退等功能,主要调用CWMPControl和CWMPPlayer类中的成员函数来进行实现。对于播放列表,这次设计使用了SetWindowPos函数来改变一个子窗口弹出的尺寸和方向,并一些相关的函
12、数实现了保存列表、删除列表、删除当前的功能。对应播放列表,我还添加了播放模式选择的功能,提供了顺序播放、随即播放、单曲循环三种选择。这当中运用的ontimer()函数和settimer()函数来控制播放模式。参照以上的设计思想,流程图如图1所示: 图1 流程图4 软件设计4.1设计步骤首先,打开Microsoft Visual Studio6.0软件,新建一个工程如图2所示,以HuangJianfei为工程名,然后将此工程定义为基于对话框的MFC应用程序如图3所示,点击完成就成功建立了一个基于对话框的工程。图2 工程建立图3基于对话框的MFC程序在建立好工程之后,首先是Windows Medi
13、a Player控件的添加:建立空白对话框之后,在对话框的空白处单击鼠标右键,选择Insert ActiveX Control菜单项。选择Windows Media Player控件,如图4所示。加入控件后,此时该控件与该对话框并没有联系,需要对其进行变量的关联。图4 Windows Media Player控件的添加添加完该控件之后可以发现,该控件与右边控件工具栏添加的控件的形式与功能完全不同,是一种更为高级的控件,将该控件名改为IDC_player,如图5所示:图5 Windows Media Player控件虽然已经添加了该控件,但是可以发现,该控件并没有与工程中的对话框发生任何联系,所
14、以需要对其进行变量的关联,所属类为HuangJianfei类,变量类型为CWPPlayer4如图6所示:图6 关联变量 关联变量之后,才算是真正的添加完了该控件,可以发现在关联变量之后,控件工具栏多了Windows Media Player控件的选项,并且在Source Files中增加了17个类,相应的头文件也增加了17个,如图7所示:图7 添加控件后的变化其中最主要的类为Cwmpplayer4,Cwmpcontrols,Cwmpmedia,Cwmpplaylist,Cwmpsettings五大类。Cwmpplayer4类主要是关于对其他类的对象的调用以及基本的控件功能的实现,提供了与Win
15、dows Media Player控件进行交互的基本方法,其中部分成员函数还能够进一步获取得到其他相关类对象的实例;Cwmpcontrols类主要是对控件的更多的操作;Cwmpmedia类主要是对于媒体文件资源的一些操作;Cwmpplaylist类主要是关于播放列表的操作;Cwmpsettings类主要是对于媒体文件中的一些基本设置的操作。对于该控件的添加以及内部函数的理解需要较多时间熟悉,添加完此关键控件之后,进行界面的设计。4.2界面设计首先是打开按钮,用于媒体文件的打开。然后依次是,播放、暂停、保存列表、清空列表、删除当前、隐藏/展开、静音、播放、停止、退出等按钮。对其进行变量的关联,以
16、及ID的修改,修改结果如表1、表2所示:表1 控件ID以及关联变量控件Caption按钮ID关联变量类型关联变量名称WMPlayerIDC_playerCWMPlayer4m_HuangJianfei表2 控件ID以及对应响应函数控件Caption按钮ID消息响应函数打开IDC_OPENOnOpen()播放IDC_PLAYOnPlay()暂停IDC_PAUSEOnPause()保存列表IDC_SAVELISTOnSavelist()清空列表IDC_DELLISTOnDellist()删除当前IDC_DELLISTCUROnDellistcur()双击播放列表IDC_LIST1OnDblclkL
17、ist1()隐藏/展开IDC_ONLISTOnOnlist()列表框IDC_LIST1OnDblclkList1()静音IDC_MUTEOnMute()表3 控件ID以及对应响应函数控件Caption按钮ID消息响应函数停止IDC_STOPOnStop()退出IDC_EXITOnExit()关于IDC_ABOUTOnAbout()以上为有对应控件的对象的关联,除了有对应控件的,还需要有Windows Media Player控件所生成的17个类中的几个重要的类进行对象的定义,可知,对于成员对象的定义和成员函数的声明都放在头文件中,此次设计共主要用到其中3个类 ,因为设计了一个退出提醒弹出框,所
18、以也要对其定义,具体如表3所示:表4 其他类及对应对象类名对象名类名对象名CWMPControlsm_ControlCWMPPlaylistm_PlaylistCWMPMediam_MediaCStringm_PathNameCWMPSettingsm_SettingCString m_FileName除了对各个控件关联变量以及消息响应函数,还要对对话框类进行消息响应函数的关联,因为此次设计中添加了播放模式选择的功能,所以需要用到WM_TIMER消息响应函数以及SetTimer()和OnTimer()函数来实现这项功能,将对话框类进行该消息响应函数的关联并书写程序。添加方法如图8所示。图8 添
19、加WM_TIMER消息响应函数 最终得到各个空间分布后的界面如图9所示:图9 多媒体播放器界面除了以上主对话框外,我还对ABOUTBOX进行了重新设计,也自制了一个Check对话框,其中ABOUTBOX如图10所示。Check对话框是在用户点击退出按钮自动弹出的提醒窗口,主要用于防止用户误按关闭按钮导致程序关闭,有利于用户的使用,增强软件的友好性,如图11所示。图10 修改后的ABOUTBOX对话框图11 提醒对话框关于菜单的制作,首先,需要在ResourceView中加入资源Menu,后增加对应的菜单项以及菜单自己布局,下拉菜单则需要和按钮关联,其方法是将其ID和按钮的ID一样,菜单布局图1
20、2所示。图12 菜单栏4.3关键功能的实现对于各个函数的介绍,本论文以关键代码以及注释的方式进行介绍,首先介绍主对话框中函数的实现以及说明:(1)Onopen(); /打开函数void CHuangJianfeiDlg:OnOpen() 其中难点在于对于陌生函数的理解,由于类数目较多,各类又有各自不同的成员函数,运用起来比较困难。除了调用通用文件对话框和较为熟悉之外,其他的函数都是平时没有见过的。播放列表中获取路径名是靠的添加主要依靠于GetNextPathName()函数,而 m_ListCtrl.AddString()函数是将项目名添加到播放列表中。(2)Onlist();隐藏/展开播放列
21、表按钮函数和OnDblclkList1();播放列表函数:int flag=0;void CHuangJianfeiDlg:OnOnlist() 对于隐藏/展开播放列表按钮,设计在那的功能是运行软件时播放器的播放列表是展开的,当点击按钮时,播放列表隐藏。为了实现这个功能,我将播放列表LIST1和播放列表按钮关联起来,关系设为控制。为此,在程序定义了一个全局变量flag,将其设为一个标志,在初始化时定义窗口无相对位移,当点击按钮是,窗口位移,因此就实现了播放列表的隐藏和出现的功能。而对于播放列表,则要求它实现双击播放功能,所以对列表控件增加一个消息映射,并选择双击消息函数响应,如图13所示。在其
22、中编程时也加入了执行响应函数SetTimer(),当点击函数时就开始创建计数器,以便实现播放模式的功能。图13 播放列表消息映射函数设置具体函数如下所示:void CHuangJianfeiDlg:OnDblclkList1() (3)播放函数及其他多媒体播放控制按钮void CHuangJianfeiDlg:OnPlay() /播放void CHuangJianfeiDlg:OnPause() /暂停void CHuangJianfeiDlg:OnStop() /停止(4)播放模式 播放模式的选择需要用到WM_TIMER消息如图14所示,以及适时调用SetTimer()和OnTimer()函
23、数。初始化时默认设置为顺序播放,当双击播放时就开始创建计数器,每1秒就执行以下OnTimer函数。而OnTimer函数就会获得播放状态,如果当前的播放完了,就检测单选按钮在哪,从而选择执行哪个程序。如果是顺序播放,就自动执行下一项目;如果是随机播放,就在“列表的文件数”中产生一个随机数,然后执行;而如果是单曲循环,那么就一直执行当前文件。图14 M_TIMER消息添加 初始化(在OnInitDialog()函数下)程序如下:m_ListCtrl.SetCurSel(0); /选择第一行(CButton*)GetDlgItem(IDC_RADIO1)->SetCheck(true); /默
24、认播放模式为顺序播放计数器函数OnTimer程序如下:void CHuangJianfeiDlg:OnTimer(UINT nIDEvent) (5)Onabout()和Onexit()函数因为调用自身编辑的对话框并且修改了工程中的ABOUTBOX资源,所以也要对其进行一定的修改。首先,是对Onabout()函数的修改:void CHuangJianfeiDlg:OnAbout() 其次,是对Onexit()函数的重载。对于添加自制的对话框,制作方面较为简单,其函数如下:void CHuangJianfeiDlg:OnCancel() (6)菜单栏的添加制作以及功能 菜单栏的制作和添加不难,只
25、要将其对应到对话框中即可,文中不再赘述。各个菜单中的菜单项的功能,只要将对应的菜单项改成与对应功能的按钮控件的ID相同即可方便快速地实现。5 总结与心得体会 经过这次毕业设计,让我对于MFC编程的方法有了进一步的认识。开始看到VC+选择了一个感兴趣的的题目基于VC下的多媒体播放器设计,让我无从下手,不知道如何用VC+做出一个视频播放器的静态界面,更不知道要如何做出一个播放器并且还要具有播放视频音频的真实效果,其他的功能也都要实现,刚开始觉得这个课题很难,因为当时大三下学期学的VC+已经过去半年多了,而且当时是在准备考研,所以学的不扎实。 接触课题开始做后,选用相对简单的Windows Medi
26、a Player控件,于是在网上查了一些关于Windows Media Player控件的,结果按照网上说的方法来根本无法实现,所以在头两天是在摸索中,耗费了很多时间才拾起当时学的一些基本知识。 添加了Windows Media Player这个控件之后会添加17个类,数目众多的类具有非常强大的功能,不过都不了解。对它建立了类向导之后,很多变量如m_ListCtrl、m_WMPlayer、m_FileName、m_PathName都要手动加入到头文件“CHuangJianfeiDlg类”里面去,开始不知道,结果怎么检查都提示这些变量未定义,而且定义以后还是提示错误,最后才知道正确的定义方法。
27、静音处理这点上我有所创新,因为一般在做静音的时候都是只能静音,再次点击的时候不能回复原来没有静音的状态,我在里面加入一个选择循环,不断在静音和恢复之间切换,在静音前先对当前的音量值进行保存,而后再静音,这样就真正的实现了播放器静音的功能。 在做“上一首”、“下一首”时候,当光标指向第一个列表文件的时候,再次点击上一首的时候,结果提示错误终止运行。结果调试了好久都没弄好,最后才知道调用一个“GetCount()”函数的时候,其数值是(N-1),不是N,这个跟C语言语法一样,在定义数值的时候,都是从0开始。结果改为“GetCount()-1”便顺利实现了。 VC+有个缺点,就是每次建立类向导后,一
28、旦删除类向导后总是还要手动删除该类向导代码,还要删除头文件里的变量,不然总是提示错误,这也是VC的一个不尽人意的地方。 我结合了自己在网上搜索的资料,做好了整个多媒体播放器的整体设计,确定了软件的框架、主要构件以及构件之间的关联,而后由总体设计逐渐深入完成软件的详细设计和开发过程。完成多媒体播放器之后,我深刻的体会到系统构架和设计模式的重要性。代码的组织都是非常的重要,这直接关系到后期的软件维护。编写代码更加有条理,才会更加符合软件工程的标准。 整个程序设计我做了十几天,花了很多工夫,想起当时没有好好学习VC+的课程知识,现在做起来才知道多么的浪费时间,很多小知识点却耗费了大量的时间去纠结。最
29、后,终于做完了这个多媒体播放器,实现了设置的功能,感觉整个过程不像老师所说的“视频播放器最简单”,虽然很多代码现成的,但是关键是项目繁琐,加起来很麻烦,琐碎。这次是一个很好的机会,让我再次拾起了忘记了的知识,也体会了程序员的艰辛,但是这里面却很快乐,眼看着自己设定的一个个按钮都实现了功能,确实是一种很大的快乐,汗水也是值得的。6致谢 首先我要感谢的是我的同学石军红,感谢他借给电脑,让我把他的电脑做成windows XP系统,才能装上我需要的软件Visual C+6.0,才使得我的毕业设计得以完成。还有我要感谢的是我的指导老师黄勇老师,感谢他给我的指导,感谢他不厌其烦的提醒并催促我们要花时间来做
30、毕业设计。我还想感谢的是沈峰老师,感谢他给我在毕业设计中出现的有关VC方面的问题作出建议和意见。7参考文献1 高志伟.Visual C+程序设计教程与上机指导.北京大学出版社.20062 罗斌.Visual C+编程技巧精选500例.中国水利水电出版社.20053 宋坤.Visual C+开发技术大全.人民邮电出版社.20074 赵辉.Visual C+系统开发实例精粹.人民邮电出版社.20055 王洪涛.深入剖析Visual C+编程技术及应用实例.人民邮电出版社.20036 张玉玲.Visual C/C+系统开发典型实例解析.20077 揣锦华.面向对象程序设计与VC+实践M .西安电子科
31、技大学出版社.20058 郑阿奇.Visual C+教程M .机械工业出版社.20049 周长发.Visual C+.NET多媒体编程M .电子工业出版社.200210 王育坚.Visual C+面向对象编程教程.第2版.清华大学出版社.200811 严华峰等.Visual C+课程设计案例精编.中国水利水电出版社.200412 王维玉等.Visual C+高级编程技术精粹.科学出版社.20088 附录8.1调试报告在设计过程中出现了许多错误,利用VC+6.0中的编译器进行错误的查找,根据提示的错误,对处错误进行改正。小错误较多在此不赘述,都是一些与未加对应头文件,未定义正确变量名有关的小错误
32、,也较容易纠正,下文将叙述调试过程中的错误或不足以及改正办法。(1)问题一 当运行播放器程序时,出现的界面十分单调,所以我想要给播放器加个皮肤。加皮肤前界面很难看而且很单调,加完皮肤后就比较好看了,如下图15所示:图15 加皮肤后(2)问题二 运行我制作的多媒体播放器时,播放模式是播放完一首歌或播放完一部AVI格式的电影后就停止了,也就是没有设置初始的播放模式。此状况如图16所示:图16 没有设置初始播放模式在OnInitDialog()函数下加入代码: m_ListCtrl.SetCurSel(0); /选择第一行(CButton*)GetDlgItem(IDC_RADIO1)->Se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论