基于VC++的视频播放器的设计课程设计说明书.docx_第1页
基于VC++的视频播放器的设计课程设计说明书.docx_第2页
基于VC++的视频播放器的设计课程设计说明书.docx_第3页
基于VC++的视频播放器的设计课程设计说明书.docx_第4页
基于VC++的视频播放器的设计课程设计说明书.docx_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学专业课程设计3(面向对象程序设计)课程设计说明书基于vc+的视频播放器的设计目录1基本功能描述32设计思路32.1播放器运行流程图32.2程序设计流程图32.2.2打开多媒体文件流程图12.2.3主要播放功能流程图12.2.4设置播放模式流程图32.2.5消息处理流程图33软件设计33.1 设计步骤33.1.1设计重难点33.1.2使用appwizard建立应用程序框架33.1.3使用资源编辑器建立对话框33.2 界面设计33.3 关键功能实现33.3.1打开多媒体文件的实现33.3.2播放控制的实现33.3.3播放模式选择的实现33.3.4界面大小控制的实现33.3.5音量调节的实现33.4 软件的特点与不足33.4.1软件的特点33.4.2软件的不足34结论与心得体会35参考文献36思考题36.1控件自带的类和本程序中的类是如何共同作用的?36.2说明程序中调用的控件函数的作用?37附录37.1调试报告37.1.1错误一37.1.2错误二37.1.3错误三37.1.4错误四37.1.5错误五37.2测试结果37.2.1打开播放列表17.2.2添加多个文件17.2.3播放控制17.2.4音量调节37.2.5播放速度控制37.2.6界面控制17.2.7音频播放17.2.8 播放退出确认17.2.9版本信息对话框37.3关键源代码错误!未定义书签。7.3.1打开媒体文件错误!未定义书签。7.3.2播放控制错误!未定义书签。7.3.3退出确认错误!未定义书签。7.3.4播放模式选择错误!未定义书签。7.3.5音量调节控制错误!未定义书签。7.3.6静音控制错误!未定义书签。7.3.7界面控制错误!未定义书签。多媒体视频播放器1 基本功能描述图 1 主要功能结构迷 你标 准全 屏界面控制播放控制播放模式主要功能进度条具体控制进度显示与控制文件打开列表上一文件下一文件快 进播 放暂 停停 止快 退音量控制大小调节静 音顺序播放随机播放单曲循环使用vc6.0平台,基于active x的windows mediaplayer设计一个多媒体视频播放器,该播放器应该能够打开视频文件和音频文件,并且在打开之后能对文件进行播放、暂停、暂停、停止、快进、快退、上一首、下一首以及调节音量等操作,此外,还可以选择播放模式以及界面控制。主要功能结构图如图1所示。2 设计思路要实现图1所示的功能,首先需要设计流程图,然后利用c+程序设计模块化的思想,基于所设计的流程图编写每一个功能的代码,最后设计各个功能的衔接,使其能够成为整体。下面设计具体流程图。打开视频、音频文件播 放暂 停停 止退 出快 进进度条到结尾快 退2.1播放器运行流程图图 2 运行流程图2.2程序设计流程图2.2.1系统总流程图图 3 系统总流程图图 4 打开多媒体文件示意图是否入口出口初始化参数设置文件过滤类型char szfilefilter调用addstring函数显示文件路径名循环判断选取文件路径是否为空获取下一个路径定义文件对话框cfiledialog dlg获取用户选择文件的路径2.2.2打开多媒体文件流程图图 5 主要播放功能流程图否是否否是是开始结束参数初始化打开多媒体文件显示文件路径名调用播放函数play是否暂停?继续播放调用暂停函数pause,播放中断,暂停在当前位置打开播放列表调用快退函数fastforward,实现快进功能调用快退函数fastreverse,实现快进功能弹出对话框,是否退出?点击退出按钮是否停止?调用暂停函数stop,播放中断,暂停在开始位置2.2.3主要播放功能流程图2.2.4设置播放模式流程图否是入口出口获取播放状态播放是否完成获取播放方式使用该播放方式播放图 6 设置播放模式流程图2.2.5消息处理流程图图 7 消息处理示意图否是消息队列处理?默认的窗口函数消息处理函数返回对程序中按键等消息处理设计程序流程图如图7所示。3 软件设计3.1 设计步骤3.1.1设计重难点由于电脑所用系统版本(windows 7)兼容性问题,我选择用active中的自带的windows media player控件实现多媒体视频播放的功能。使用该控件,需要熟悉其功能、类和成员函数,并要求熟练掌握对其的正确调用。3.1.2使用appwizard建立应用程序框架在进入vc+的第一界面下,选择mfc appwizard【exe】,并设置工程名kejie以及所在位置“f:课设课程设计三多媒体视频播放器kejie”,如图8所示。图 8 新建对话框单击确定按钮后,将弹出mfc应用程序向导-步骤1对话框,在该对话框中选中基本对话框,如图9所示。其余都采用默认选项。这样,mfc appwizard就建立了一个基于对话窗口的程序框架,如图10所示。图 9 mfc应用程序向导-步骤1对话框图 10 mfc appwizard就建立了一个基于对话窗口的程序框架3.1.3使用资源编辑器建立对话框图 11 windows media player控件选取由于本程序的工程名为kejie,故系统会自动生成一个名为idd_kejie_dialog的资源文件。删除对话框上附带的按钮和文本,然后在对话框的空白处单击鼠标右键,选择插入 activex 控件菜单项。选择windows media player控件,即可添加入该控件,如图11所示。虽然已有该控件,但在右侧的控件工具栏中并没有该控件的选项。原因是该控件只是进行了简单的添加,而没有与工程中的对话框发生任何联系,所以需要对其进行变量的关联,关联变量命名为m_player,变量所属的类为ckejiedlg类,如图12所示。图 12 windows media player控件关联变量这时候,source files中增加了17个类,相应的头文件也增加了17个。其中最主要的类为cwmpplayer4,cwmpcontrols,cwmpmedia,cwmpplaylist,cwmpsettings五大类。其中cwmpplayer4类主要是关于对其他类的对象的调用以及基本的控件功能的实现,提供了与windows media player控件进行交互的基本方法,其中部分成员函数还能够进一步获取得到其他相关类对象的实例;cwmpcontrols类主要是对控件的更多的操作;cwmpmedia类主要是对于媒体文件资源的一些操作;cwmpplaylist类主要是关于播放列表的操作;cwmpsettings类主要是对于媒体文件中的一些基本设置的操作。接下来需要完善对话框,进行界面设计和相应代码的编写。3.2 界面设计根据图1,我设计了如图13所示的主界面。主要控件id以及对应关联变量如表1所示。表 1 主要控件id以及对应关联变量控件id关联变量类型关联变量名视频wmplayeridc_ocx1cwmpplayer4m_player列表框list boxidc_list1clistboxm_list滑块slideridc_slidercsliderctrlm_slinder编辑框editidc_volintm_sizewindows media player控件所生成的17个类中的几个重要的类进行对象的定义,对于成员对象的定义和成员函数的声明都放在头文件kejiedlg.h中,共7个类对应8个对象,具体如下表2所示。表 2 几个重要的类及对应对象类名对象名类名对象名cwmpplayer4m_wmplayercwmpmediam_mediacwmpplayer4m_wmpplaycstringm_filenamecwmpcontrolsm_controlcstringm_pathname图 13 主界面windows media player控件中axwindowsmediaplayer有两个重要属性ctlcontrols和currentposition的自带很多方法,直接调用这些方法可以节省不少代码。下面介绍部分方法:(1)ctlcontrols属性 方法play用于播放多媒体文件,其格式为:窗体名.控件名.ctlcontrols.play()如:axwindowsmediaplayer1.ctlcontrols.play()。方法pause用于暂停正在播放的多媒体文件,其格式为:窗体名.控件名.ctlcontrols.pause()如: axwindowsmediaplayer1.ctlcontrols.pause()方法stop用于停止正在播放的多媒体文件,其格式为:窗体名.控件名.ctlcontrols.stop()如: axwindowsmediaplayer1.ctlcontrols.stop() 方法fastforward用于将正在播放的多媒体文件快进,其格式为:窗体名.控件名.ctlcontrols.fastforward()如: axwindowsmediaplayer1.ctlcontrols.forward()方法fastreverse用于将正在播放的多媒体文件快退,其格式为:窗体名.控件名.ctlcontrols.fastreverse()如: axwindowsmediaplayer1.ctlcontrols.fastreverse()(2)属性currentposition用于获取多媒体文件当前的播放进度,其值是数值类型,使用格式为:窗体名.控件名.ctlcontrols.currentposition()如:int d1 =axwindowsmediaplayer1.ctlcontrols.currentposition()根据以上方法,在设置相应变量后,需要对多不同控件设计对应方法,如表3所示。表 3 不同控件设计对应方法标题id方法打开文件idc_add_buttononaddbutton()播放列表idc_list_buttononlistbutton()列表框idc_list1ondblclklist1()播放idc_play_buttononplaybutton()暂停idc_pause_buttononpausebutton()停止idc_stop_buttononstopbutton()退出idc_exit_buttononexitbutton()上一集idc_previous_buttononpreviousbutton()下一集idc_next_buttononnextbutton()快进idc_fastforward_buttononfastforwardbutton()快退idc_fastreverse_buttononfastreversebutton()全屏idc_fullscreen_buttononfullscreenbutton()标准idc_normal_buttononnormalbutton()迷你idc_mini_buttononminibutton()音量滚动控制idc_slideroncustomdrawslider()音量数值控制idc_volonchangevol()静音idc_check1oncheck1()图 14 wm_timer消息响应函数除了对各个控件关联变量以及消息响应函数,还要对对话框类进行消息响应函数的关联,因为要设计播放模式的选择,所以需要用到wm_timer消息响应函数以及settimer()和ontimer()函数,将对话框类进行该消息响应函数的关联并编辑。添加方法如下:对于菜单的制作如图15所示。要想实现菜单对应的功能,最简单的方法是菜单项与相应的对话框控件的id设置为一样,如此就可以通过菜单实现对视频的各种控制。图 15 菜单设计界面除了以上的界面,我还对系统自带的aboutbox的对话框进行重新设计,其中包含了我的制作信息,如图16所示。图 16 版本信息对话框当然,我还根据搜狐视频播放器设计了一个类似的图标,如图17所示。删除原有图标并设置新建图标的id为:idr_mainframe,这样无需重新编写函数,直接调用系统写好的函数就可以实现新图标的显示。图 17 设计的图标3.3 关键功能实现3.3.1打开多媒体文件的实现根据图4的程序流程图可以设计打开媒体文件的功能。首先设置文件过滤类型可以定义一个字符数组char szfilefilter=mediafile(*.avi,*.mp4,*.mp3,*.wma)|*.avi;*.mp4;*.mp3;*.wma|all file(*.*)|*.*| 。定义文件对话框的对象cfiledialog dlg(true,null,null,ofn_hidereadonly|ofn_allowmultiselect|ofn_nochangedir,szfilefilter)。其中ofn_hidereadonly这个属性不是来修改文件属性,它只是告诉对话框不要在对话框里显示已经存在的文件中有“只读”属性的文件;ofn_allowmultiselect代表可以选取多个文件;ofn_nochangedir表示不改变当前目录,这点对相对路径的存储很重要。cfiledialog类封装了windows常用的文件对话框。常用的文件对话框提供了一种简单的与windows标准相一致的文件打开和文件存盘对话框功能。文件对话框cfiledialog的对象dlg可以调用一下函数;domodal():创建文件对话框,在返回后可以利用下面的函数得到用户选择。getpathname( ) 得到完整的文件名,包括目录名和扩展名如:c: test1.txt。getfilename( ) 得到完整的文件名,包括扩展名如:test1.txtgetextname( ) 得到完整的文件扩展名,如:txtgetfiletitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1getstartposition( ) 对于选择了多个文件的情况得到第一个文件位置。getnextpathname( position& pos )对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过position。getstartposition( )来得到最初的position变量。具体代码见附录7.3.1。3.3.2播放控制的实现根据图5的程序流程图可以设计主要播放控制的功能。这里需要用到windows media player控件中axwindowsmediaplayer的两个重要属性ctlcontrols和currentposition,它们含有丰富的函数:(1)ctlcontrols属性 方法play用于播放多媒体文件,其格式为:窗体名.控件名.ctlcontrols.play()如:axwindowsmediaplayer1.ctlcontrols.play()。方法pause用于暂停正在播放的多媒体文件,其格式为:窗体名.控件名.ctlcontrols.pause()如: axwindowsmediaplayer1.ctlcontrols.pause()方法stop用于停止正在播放的多媒体文件,其格式为:窗体名.控件名.ctlcontrols.stop()如: axwindowsmediaplayer1.ctlcontrols.stop() 方法fastforward用于将正在播放的多媒体文件快进,其格式为:窗体名.控件名.ctlcontrols.fastforward()如: axwindowsmediaplayer1.ctlcontrols.forward()方法fastreverse用于将正在播放的多媒体文件快退,其格式为:窗体名.控件名.ctlcontrols.fastreverse()如: axwindowsmediaplayer1.ctlcontrols.fastreverse()(2)属性currentposition用于获取多媒体文件当前的播放进度,其值是数值类型,使用格式为:窗体名.控件名.ctlcontrols.currentposition()如:int d1 =axwindowsmediaplayer1.ctlcontrols.currentposition()此外对于退出功能,可以设计弹出确认对话框来实现,具体方法为:if (messagebox( 你确定要退出吗? , 确认退出,mb_yesno)!=idyes)。退出使用oncancel()函数。由上述思想和函数可以编写具体代码,见附录7.3.2。3.3.3播放模式选择的实现根据图6的程序流程图可以设计播放模式选择的功能。要设计播放模式的选择,需要用到wm_timer消息响应函数以及settimer()和ontimer()函数,通过getplaystate()数获取播放状态,并判断是否播放完。其中播放状态的值与对应的工作状态如下表4。表 4 getplaystate值与播放状态getplaystate值工作状态getplaystate值工作状态1停止6正在缓冲2暂停9正在连接3播放10准备就绪获得播放状态后,如果是停止状态,则判断当前所选的播放模式是顺序播放、随机播放还是单曲循环。随机播放模式需要产生随机数。具体程序代码见附录7.3.3。3.3.4界面大小控制的实现我设计了三种界面大小:全屏模式、标准模式和迷你模式。其中全屏模式通过调用函数setfullscreen(1)实现,但是迷你模式和标准模式都可以通过setwindowpos函数设置显示的窗口大小来实现,具体代码见附录7.3.4。3.3.5音量调节的实现对于音量调节,我认为要实现以下功能:通过滑块控件调节音量大小,并将其值显示在相应编辑框中;同理,在编辑框中更改数值也能动态的调节音量并反映在滑块上,使其相对移动。首先,通过语句m_slinder.setrange(0,100)设置滑块的移动范围为0-100,这与声音的大小的0-100相对应,实现调节功能。然后可以使用m_slinder.setpos(50)设置滑块指针初始位置设置为50,即初始声音大小为50。再通过语句m_player. getsettings().setvolume.(getpos())使得滑块的移动控制声音大小并在编辑框中显示出来。至于在声音控制编辑框中输入数值来改变声音大小,只需调用函数setpos(m_size)即可同样实现。静音选项的控制通过一个if语句进行判断,如果选择静音,则调m_player.getsettings().setvolume(0)对音量调零,否则返回之前的音量值。具体代码见附录7.3.53.4 软件的特点与不足3.4.1软件的特点经过长期的调试和改正,软件基本可以正常运行,基本实现了图1所示的功能。支持avi、mp4、mp3、dat等多种媒体格式。本软件简单小巧,占很少空间。3.4.2软件的不足由于设计时间和个人所学知识有限,相比现已成熟的各种播放器来,更显得过于单调,而且功能方面还有待加强。4 结论与心得体会从程序运行调试的结果来看,设计基本成功。经过这次课程设计,让我对于mfc编程的方法有了更新更全面的认识和深入的了解,对vc的运用更是熟练了很多,而且有了系统地设计软件的概念,这对我以后的软件开发打下了很好的基础。但是毕竟只是一个人开发,且时间有限,技术知识不够,当然不能跟主流的媒体播放器(比如国内的迅雷播放器,暴风影音等)相比,本软件还可以继续开发,比如实现屏幕大小的任意调节等。在所给的c#课程设计中,视频播放器的设计最能吸引我。我想,对于设计这个平时用得最多的软件,应该不难吧。然而事实往往出人意料,着手开始设计程序流程图,我才发现去年学的c+语言知识所剩无几,很多操作都不能熟练完成,只能找到以前的课本和相关资料再学习。花了两天的功夫才把资料基本看完,导致设计流程图的时间大大减少,没有设计出比较好的流程图,这对后续的程序编辑带来了一定的困难。由此,我深刻地体会到,在编程之前,画程序流程图具有不可取代的重要性。预答辩时,谢老师看完我准备的预答辩材料后,指出了我的一些错误,并对我设计的程序流程图提出了中肯的建议。回去后,我认识思考了老师对我提的疑问和建议,在此基础上修改了预答辩材料不足之处。谢老师对我的指导使我少走了一些不必要的弯路。在更改过的流程图基础上,我对自己所设定的功能进行编程,提交程序时,由于我通过调节滑块控制音量并在一个编辑框中同步显示音量大小,谢老师问我如何实现在编辑框中输入数值反过来改变音量,我当时没能正确回答,谢老师提示我用getpos相反的函数实现该功能。听取老师意见后,我采用setpos函数成功实现该功能。其实这两个函数都属于一个类的成员函数,但我只懂其一,说明自己看参考资料时不细心,遗漏了某些重要知识,以后需要多多注意。总而言之,这次课程设计让我学会了很多,发现了自己的不足,加深了对提出问题-分析问题-解决问题这一思维方式的运用,锻炼了自己的逻辑思维和编程能力,为以后工作学习打下了较好的基础。5 参考文献1 揣锦华.面向对象程序设计与vc+实践m.西安:西安电子科技大学出版社,2002.2 求是科技,肖宏伟.visual c+ 6.0实效编程百例m.北京:人民邮电出版社,2002.3 刘长明,杨工明.visual c+ 实践与提高-多媒体篇m.北京:中国铁道出版社,2001.4 黄荣怀,陈莉,李松.多媒体技术基础m.北京:高等教育出版社,2008.5 张桂香,廉佐政.c+程序设计方法m.北京:北京航空航天大学,2012.6 赵问道.多媒体技术原理与应用m.杭州:浙江大学出版社,2007.7 罗旭,池洁,邹丽娜.支持歌词的mp3播放器的设计与实现j.沈阳师范大学学报,2006,24(3):322-324.8 于晓康,柴乔林.基于vc+的可控视频回放系统j.计算机应用,2003,23(2):326-328.9 刘雅琴,夏玉杰.基于mfc的多媒体播放器的实现j.信息技术,2009(3):80-82.6 思考题6.1控件自带的类和本程序中的类是如何共同作用的?答:控件中的类属于或者继承对话框类,本程序中的类也可以定义对话框类或者直接/间接继承对话框类。在完成控件自带类的函数在程序中的使用之后,需要定义关联变量,添加一些与控件类有关的函数。如此便可以实现控件自带类和本程序中的类的共同作用。6.2说明程序中调用的控件函数的作用?答:上文中已经给出主要的控件函数作用,这里集中说明一下,见表5。表 5重要的控件函数作用控件函数作用控件函数作用getstartposition()返回文件名列表位置updatedata()更新数据domodal()使用模态对话框并返回对话框结果setcursel()设置光标getnextpathname ()获取下一个路径名onclose()关闭play ()播放mute()静音pause ()暂停setfullscreen()全屏控制stop ()停止setwindowpos()显示窗口长宽oncancel()退出getvolume()获取音量fastforward()快进setvolume设置音量fastreverse()快退ontimer()响应时钟消息7 附录7.1调试报告程序编写的的过程就是不断发现错误,改正错误,完善程序的过程。当出现编译错误的时候,可以利用vc+6.0中的编译器进行错误的查找,根据提示的错误,对处错误进行改正。还有一些编译无错误却得不到运行效果的错误。一些小错误,比如为定义变量等,在此就不赘述,下面将叙述主要错误已经解决方法。7.1.1错误一编译链接后,错误提示:link : fatal error lnk1168: cannot open debug/kejie.exe for writing错误原因:可能是因为编译的exe文件正在运行,而再次编译是要修改这个exe文件的,因为不让写,所以就提示这个错。解决办法:检查是否有运行编译后文件,如果正运行着,就将其关掉。7.1.2错误二图 18 错误二编译链接运行后都没问题,但是打开文件的对话框中却无法显示多媒体文件。如图18所示。错误原因:文件过滤设置错误,原设置为char szfilefilter=media file(*.avi,*.mp4,*.mp3,*.wma)|*.avi,*.mp4,*.mp3,*.wma|。解决方法:文件过滤后面的分隔符不是逗号,而是分号。更改为:char szfilefilter=media file(*.avi,*.mp4,*.mp3,*.wma)|*.avi;*.mp4;*.mp3;*.wma|all file(*.*)|*.*| ; 7.1.3错误三编译链接后,错误提示: compiling.kejiedlg.cppf:课设课程设计三多媒体视频播放器程序kejiekejiedlg.cpp(239) : error c2018: unknown character 0xa3f:课设课程设计三多媒体视频

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论