用vc编写的视频播放器毕业设计_第1页
用vc编写的视频播放器毕业设计_第2页
用vc编写的视频播放器毕业设计_第3页
用vc编写的视频播放器毕业设计_第4页
用vc编写的视频播放器毕业设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、 目录一、设计任务1.1课程设计的目的1.2课程设计题目及要求1.3设计任务及工作量要求二、总体设计2.1需求分析2.2对象分析2.3界面设计2.4主框架设计三、测试结果与分析四、心得体会五、参考文献六、附录(源程序)一、设计任务1.1课程设计的目的通过课程设计,达到理论与实际应用相结合,提高学生对数字视频技术的理解和从事视频通信相关职业的能力,使学生能够根据视频处理的基本原理,掌握视频获取、压缩、传输和显示的基本方法,并培养良好的视频通信系统设计和维护能力。1.2课程设计题目及要求利用VC+设计视频播放器 要求: 基于VC+编程环境制作一个视频播放器,能够播放多种格式的多媒体文件:CD音乐曲

2、目(.cda)、数字化波形声音(.WAV)、MIDI文件(. mid, .rmi, .midi)、Windows Media 文件(. asf, .wm, .wma )、电影文件(. mpeg , . mpg , .mp3)、视频文件(.avi , . wmv)、音频文件(. wav , . snd , .au , .aif )等。能够有用户自己选择文件,提供媒体播放控制:打开、播放、暂停、停止、全屏能控制播放音量的大小。应用程序界面美观,使用方便,有完善的操控按钮或进度指示条等。本课题对软硬件平台要求不高,操作系统可选择Windows2000/Window XP。在Visual C+ 6.0

3、下用ActiveMovie控件来实现。 1.3设计任务及工作量要求包括课程设计计算说明书、图纸、实物样品等要求 1了解视频播放器的相关理论知识 2课程设计说明书 3对象的定义,算法描述 4类的继承关系图,模块流程图,软件源代码(按软件工程的规范) 5测试结果及分析 二、总体设计2.1需求分析制作一个视频播放器,能够播放多种格式的多媒体文件:CD音乐曲目(.cda)、数字化波形声音(.WAV)、MIDI文件(. mid, .rmi, .midi)、Windows Media 文件(. asf, .wm, .wma )、电影文件(. mpeg , . mpg , .mp3)、视频文件(.avi ,

4、 . wmv)、音频文件(. wav , . snd , .au , .aif )等。能够有用户自己选择文件,提供媒体播放控制:打开、播放、暂停、停止、全屏能控制播放音量的大小。应用程序界面美观,使用方便,有完善的操控按钮或进度指示条等。本课题对软硬件平台要求不高,操作系统可选择Windows2000/Window XP。在Visual C+ 6.0下用ActiveMovie控件来实现。 本课程设计用例如图1所示,用户使用播放器,播放器完成媒体播放和音量调节两大功能。2.2对象分析由于播放器主要围绕实现以上两大功能,可以建立如表1所示的对象。音量控制和媒体播放对象对界面管理存在依赖关系,这两个

5、对象要从界面获取控制指令,它们的属性要在界面上显示。本播放器的类图如图2所示。2.3界面设计界面应满足以下要求: 1. 界面首先要布置一系列按钮控件实现所有要实现的功能; 2. 设置“播放进度条”来指示媒体文件的播放进度,还应该可以用鼠标拖动进度条来改变播放进度; 3. 设置音量控制按钮(包括增大和减小); 4. 界面应尽量美观; 根据以上描述,程序运行时效果如图3所示。2.4主框架设计启动Visual C+ 6.0,执行NewProject新建菜单项,新建一个MFC AppWizard(ExE)应用,在左上方的工程文本中输入“Player”,完成后单击【确定】按钮,进入MFCAppWizar

6、d向导。如图4所示。图4 新建工程1. 在MFC AppWizard向导的第一步选择Dialog Based,单击【Finish】按钮完成工程的建立。 2. 为应用程序添加菜单资源。执行InsertResource菜单,打开Insert Resource对话框,选择Menu项,为工程添加菜单资源,其ID为ID_MENU1。 3. 为工程添加ActiveMovie控件。执行ProjectAdd To ProjectComponents Add Aontrols,在出现的Components And Controls Gallery 对话框中打开Registered Active Controls

7、文件夹,选中 ActiveMovie Control Object选项,然后按【Insert】后关闭对话框,调整好控件在对话框中的位置。如图5所示。 4. 在对话框类的文件夹中包含控件类,添加的代码如下: /MovieDlg.h : header file #include “activemovie3.h” 5. OnPaint( ) 播放器对话框函数。 void CMediaPlayerDlg:OnPaint() if (IsIconic() CPaintDC dc (this); / device context for painting SendMessage(WM_ICONERASEB

8、KGND, (WPARAM) dc.GetSafeHdc(), 0); /在用户端长方形中置图像 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; /拉图像 dc.DrawIcon(x, y, m_hIcon); else CDialog:OnPai

9、nt(); 6. 设置对话框的属性。在对话框的属性框中的Menu框中选择ID_MENU1菜单。这样就把创建的菜单加入到对话框中。 7. 创建控件类的对象,在对话框类的头文件中添加CActiveMovie3类型的变量,如下所示: /MovieDlg.h: header. file Protected : HICON m_hIcon; CActiveMovie3 m_ActiveMovie; 8. 添加菜单的消息映射。并编辑代码响应功能,其代码如下所示: (1)添加【打开】按钮的处理函数,它的主要功能是初始化路径,取得播放曲目列表文件的全路径并利用文件对话框打开视频文件,具体实现步骤为,在对话框资

10、源中,双击打开文件按钮,出现“Add Member Function”对话框,默认Member Function Name为OnOpen,单击“OK”按钮,进入OnOpen()函数编辑区,添加如下代码: void CMediaPlayerDlg:OnOpen () char szFileFilter = /设置打开下拉菜单 Mp3 File(*.mp3)|*.mp3| Wma File (*.wma)|*.wma| Video File (*.dat)|*.dat| Wave File (*.wav)|*.wav| AVI File (*.avi)|*.avi| Movie File (*.m

11、ov)|*.mov| Media File (*.mmm)|*.mmm| Mid File (*.mid;*, rmi)|*.mid;*.rmi| MPEG File (*.mpeg)|*.mpeg| All File (*.*)|*.*|;CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); /定义打开对话框对象 if (dlg.DoModal()=IDOK) CString PathName=dlg.GetPathName();/获取一个字符串 PathName.MakeUpper(); m_ActiveMovie.S

12、etFileName(PathName);/设置该串为媒体播放器文件 其中,第一条语句用于设置选择文件的类型,第二条语句用于创建一个“打开文件”的对话框,后面的语句用于选择要播放的文件。 (2)添加【关闭】按钮的处理函数,它的主要功能是利用文件对话框关闭视频文件,具体实现步骤同(1),添加的代码如下: void CMediaPlayerDlg:OnClose() /在这里增加控制处理程序代码 m_ActiveMovie.CloseWindow(); /关闭窗口 (3)添加【播放】按钮的处理函数,我们先判断文件的状态,再调用控件的有关方法来播放视频文件,具体代码如下: void CMediaPl

13、ayerDlg:OnPlay() m_ActiveMovie.Run(); SetTimer(0,20, NULL); /设置定时器模式 (4)添加【停止】按钮的处理函数,它的主要功能是利用文件对话框停止视频文件的播放,具体实现如下: void CMediaPlayerDlg:OnStop() /在这里增加控制处理程序代码 m_ActiveMovie.Stop(); KillTimer(0); /关掉定时器 (5)添加【暂停】按钮的处理函数,它的主要功能是利用文件对话框暂停视频文件的播放,具体实现如下: void CMediaPlayerDlg:OnPause() / 在这里增加控制处理程序代

14、码m_ActiveMovie.Pause(); (6)添加调节音量大、小的处理函数,具体实现如下: void CMediaPlayerDlg:OnUpper() long Volume=m_ActiveMovie.GetVolume(); /获取当前音量 m_ActiveMovie.Pause(); m_ActiveMovie.SetVolume(Volume+100); /增大音量 m_ActiveMovie.Run(); void CMediaPlayerDlg:OnLower() long Volume=m_ActiveMovie.GetVolume(); /获取当前音量 m_Activ

15、eMovie.Pause(); m_ActiveMovie.SetVolume(Volume-100); /减小音量 m_ActiveMovie.Run(); /继续播放 (7)添加【重复】按钮的处理函数,它的主要功能是利用文件对话框进行重复播放,具体实现如下: void CMediaPlayerDlg:OnRepeat() if(!isRepeat) isRepeat=TRUE; /如果重复为真 SetDlgItemText(IDC_STATIC2,Status:Repeat); /重复播放 else isRepeat=FALSE; /如果重复为假 SetDlgItemText(IDC_ST

16、ATIC2,Status:Normal); (8)添加【全屏】按钮的处理函数,它的主要功能是把视频播放器切换成全屏形式进行播放,具体实现如下: void CMediaPlayerDlg:OnFulscreeen() m_ActiveMovie.Pause();/暂停播放 m_ActiveMovie.SetFullScreenMode(true); /设置全屏模式 m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED); /将窗口显示为最大 m_ActiveMovie.Run(); /继续播放 (9)设置定时功能 void CMediaPlayerD

17、lg:OnTimer(UINT nIDEvent) double CurrentPos=m_ActiveMovie.GetCurrentPosition();/得到当前位置if(CurrentPos=0&isRepeat)m_ActiveMovie.Run();CDialog:OnTimer(nIDEvent);CDialog:OnTimer(nIDEvent);(10)添加【退出】按钮的处理函数,它的功能是关闭视频播放器。 void CMediaPlayerDlg:OnCancel() CDialog:OnCancel(); (11)至此,已完成所有的编程工作,现在可以编译和生成多媒体播放器

18、应用程序了,可用它来播放各种格式的媒体文件。 经过上面的操作,我们现在可以编译并运行此应用程序了。运行程序后,先单击“打开”按钮,出现 “打开文件”对话框,进行媒体文件的选择后,即可播放媒体文件。在播放的过程中,可以音量控制按钮进行音量的控制,还可以按“ 全屏显示”按钮,使媒体文件全屏播放,若单击鼠标左键,则暂停播放;再单击鼠标右键,则可选择屏幕播放状态。三、测试结果与分析1、原来电脑里没有ActiveMovie控件,我们使用的方法是:在DOS窗口根目录下输入regsvr32 msdxm.ocx可以生成该控件。2、程序中需要修改的地方: 1)OnOpen()函数编辑区 CFileDialog

19、dig;同时要将一个中文的“/”改成英文格式的。2)这样就还剩下三个为定义的错误,分别是isRepeat;IDC_STATIC2;nIDEvent。 (1)对于isRepeat这个未定义,只要在m_hlcon子程序中的protected: HICON m_hIcon;后添加 bool isRepeat;即可。 (2)对于IDC_STATIC2这个未定义,在Menu项对Status:Normal进行右击,点击属性栏,将ID的IDC_STATIC改为IDC_STATIC2就可以了。 (3)对于nIDEvent这个未定义,只要在控件上右击选择“建立类向导”,删除Member functions:项的

20、E OnTimer ON_IDC_ACTIVEMOVIECONTROL:State change,然后选择Object IDs:CPlayerDlg ;Messages:WM TIMER,单击添加即可。然后回到PlayerDlg.cpp文件中,将原来OnTimer()程序段里的内容转移到新出现的void CMediaPlayer1Dlg:OnTimer(UINT nIDEvent)中,删除原来的即可。这个是因为系统默认的关联比较小,所以这边要扩大关联,因此做了以上修改。3、进过以上修改,编译已经没有错误,但是连接时出错,经老师指点,应该是有东西重定义了,但是由于不知道哪里操作错误,只能重新做一

21、次。这一次经过以上修改,确定过程当中也没出错,果然就可以运行了。4、运行出来后的界面如图所示:说明:点击打开按钮,即可打开选择文件的对话框;打开完后点击播放按钮即可播放视频;点击暂停则播放暂时停止,再次点击则继续播放;点击停止按钮,则视频又回到最初状态,只能点击播放按钮才能播放;点击重复按钮则状态改成rePeat,视频重复播放;点击全屏按钮则视频最大化,只能右击缩小100%才能回到原始状态;点击退出按钮则会关闭整个播放器;关闭按钮则是关闭当前播放的媒体文件,可以继续选择别的媒体文件继续播放。四、心得体会课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,

22、是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在,因此作为二十一世纪的大学来说掌握一门编程语言是十分重要的。譬如此次课程设计就是要求我们用VC+设计视频播放器。由于这次拿到的课程设计指导书上有具体的步骤和部分程序代码,所以这次的课程设计总的来说还是比较顺利的,由于在实际操作的过程中遇到很多问题,所以这个时候不耻下问就是很好的解决方法,问自己班同学不会就问工本班,工本班不会问老师。所以在这次的设计过程中,我学到的不仅是知识,我还认识到许多事情。虽然这次课程设计老师给出了大部分的程序,但本次设计还是让我的编程水平提高了一大步,使我充分的

23、认识到合作的可贵。这次设计对我的综合能力是一次很好的锻炼,但是我必须承认自己的能力和知识还很肤浅。所以今后我的学习道路还是很漫长的。通过这次编程我们深深的感受到对代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同人员之间的协作。最后,在这里我要衷心的感谢我们的指导老师焦良保,谢谢他的悉心指导和热心帮助。由于我水平有限,加之时间短暂,播放器中还有许多不足之处,请老师批评指正,我会在以后的制作中不断改进,不断完善。五、参考文献1. 王瑶,视频处理与通信,北京:清华大学出版社,2005。 2. 全子一,数字视

24、频处理,电子工业出版社,年。 3. 毕厚杰,新一代视频压缩编码标准-H.264/AVC,北京:人民邮电出版社,2005。 六、附录(源程序)#include stdafx.h#include PlayerDlg.h#include PlayerDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg(

25、);/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_M

26、AP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND

27、_MESSAGE_MAP()/ C PlayerDlg dialogCPlayerDlg:CPlayerDlg (CWnd* pParent /*=NULL*/): CDialog(CPlayerDlg:IDD, pParent)/AFX_DATA_INIT(CPlayerDlg)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGe

28、tApp()-LoadIcon(IDR_MAINFRAME);void CPlayerDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CMediaPlayer1Dlg)DDX_Control(pDX, IDC_ACTIVEMOVIECONTROL1, m_ActiveMovie);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CPlayerDlg, CDialog)/AFX_MSG_MAP(CPlayerDlg)ON_WM_SYSCOMMAND()ON_WM_PAIN

29、T()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDOK, OnOpen)ON_BN_CLICKED(IDCANCEL, OnPlay)ON_BN_CLICKED(IDC_BUTTON1, OnPause)ON_BN_CLICKED(IDC_BUTTON2, OnStop)ON_BN_CLICKED(IDC_BUTTON3, OnRepeat)ON_BN_CLICKED(IDC_BUTTON4, OnFulscreeen)ON_BN_CLICKED(IDC_BUTTON6, OnClose)ON_BN_CLICKED(IDC_BUTTON7, OnLower)ON_

30、BN_CLICKED(IDC_BUTTON8, OnUpper)ON_BN_CLICKED(IDC_BUTTON5, OnCancel)ON_WM_TIMER()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CPlayerDlg message handlersBOOL CPlayerDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX

31、 & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hI

32、con, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CPlayerDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you

33、add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CPlayerDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONER

34、ASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y,

35、m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CPlayerDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CPlayerDlg:OnOpen() char szFileFilter =/设置打开下拉菜单Mp3 File(*.mp3)|*.mp3|Wma File (*.wma)|*.wma|Video File

36、(*.dat)|*.dat|Wave File (*.wav)|*.wav|AVI File (*.avi)|*.avi|Movie File (*.mov)|*.mov|Media File (*.mmm)|*.mmm|Mid File (*.mid;*, rmi)|*.mid;*.rmi|MPEG File (*.mpeg)|*.mpeg|All File (*.*)|*.*|;CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);/定义打开对话框对象if (dlg.DoModal()=IDOK)CString PathName=dlg.GetPathName();/获取一个字符串PathName.MakeUpper();m_ActiveMovie.SetFileName(PathName);/设置该串为媒体播放器文件void CPlayerDlg:OnPlay() m_ActiveMovie.Run();SetTimer(0,20, NULL);/设置定时器模式void CPlayerDlg:OnPau

温馨提示

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

评论

0/150

提交评论