多媒体播放器课程设计.docx
《多媒体播放器课程设计.docx》由会员分享,可在线阅读,更多相关《多媒体播放器课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
![多媒体播放器课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/25/100a9251-bdc9-46bc-be6c-6e0b1b4bec92/100a9251-bdc9-46bc-be6c-6e0b1b4bec921.gif)
多媒体播放器课程设计
淮阴工学院
多媒体编程实习报告
选题名称:
视频播放器设计
系(院):
计算机工程学院
专业:
通信工程(多媒体通信方向)
班级:
姓名:
学号:
指导教师:
学年学期:
2012~2013学年第2学期
2013年06月30日
实习任务书
课题
名称
视频播放器设计
实习
目的
1.巩固多媒体编程所涉及的基础理论和经典技术,努力提高实践动手能力;
2.学习多媒体编程,进一步掌握VC6.0的使用方法和技术;
3.通过一个完整的项目开发流程,构建合理的专业技能结构,完善知识体系;
4.强化软件设计概念,训练文档处理能力,培养团队合作精神。
实验
环境
1.微型电子计算机(PC);
2.VC6.0。
任务
要求
1.利用课余时间查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;并在第15周完成预设计,请指导教师审查,通过后方可进行下一步工作;
2.设计软件:
(1)能简单地实现视频文件的打开以及播放;
(2)在以上的基础上,实现视频的暂停,快进,快退,停止以及音量的调节。
3.结束后,及时提交课程设计报告(含纸质稿、电子稿)。
工作进度计划
序号
起止日期
工作内容
1
2013.06.17~2013.06.18
在预设计的基础上,进一步查阅资料,完善设计方案,形成书面材料。
2
2013.06.19~2013.06.24
设计总体方案,绘制流程框图,编写代码,上机调试。
3
2013.06.25~2013.06.28
测试程序,优化代码,增强功能,撰写设计报告。
4
2013.06.29~2013.06.30
提交软件代码、设计报告,参加答辩,根据教师反馈意见,修改、完善设计报告。
指导教师(签/章):
年月日
一、实习目的
1、巩固多媒体编程所涉及的基础理论和经典技术,努力提高实践动手能力;
2、学习多媒体编程,进一步掌握VC6.0的使用方法和技术;
3、通过一个完整的项目开发流程,构建合理的专业技能结构,完善知识体系;
4、强化软件设计概念,训练文档处理能力,培养团队合作精神;
5、加深对于多媒体软件功能的理解;
6、激发学生对于多媒体相关技术的兴趣。
二、实习时间
2013年06月17日~2013年06月30日。
三、实习地点
淮阴工学院计算机工程学院及所属专业实验室。
四、实习内容
(一)设计课题:
视频播放器
(二)设计目标:
使用VC++6.0强大的AppWizard、ClassWizard和其中的多种控件可以很方便地建立各种应用程序。
借助ActiveX控件资源和其他现有的控件资源,可以省去自己编程的复杂过程,从而实现高级的功能。
本次课程设计要使用VC++6.0内部的ActiveX控件——WindowsMediaPlayer控件,建立自己的多媒体播放器。
此多媒体播放器具有打开文件、播放、暂停、关闭、全屏、音量滑块调节、快进、快退等基本功能,可以播放*.mp3、*.wma、*.mdi、*.wav、*avi、*dat等格式的多媒体文件。
(三)设计过程:
1、设计思路:
基于VC++6.0制作多媒体播放器,主要使用了WindowsMediaPlayer控件和各种类型按钮,控件WindowsMediaPlayer完成了由其他控件加载的多媒体文件的解码,以及完成由其他控件提交的控制信息的响应。
根据WindowsMediaPlayer和各个按钮控件功能的特点,首先要在初始化中对CWMPControl,CWMPSettings,CWMPMedia等类的对象进行绑定和定义。
播放器的一些基本的功能如播放、暂停、全屏、静音、快进、快退等主要是调用CWMPControl和CWMPPlayer类中的成员函数来进行实现。
对于打开按钮,需要调用通用文件对话框类,调用szFileFilter()文件过滤函数和GetFileName()获取文件名函数。
音量滑动条Slinder是通过对CSliderCtrl类进行初始化,调用m_slinder中的CustomdrawSlider()函数来定义音量的改变。
2、创建工程:
打开VC++6.0,点击“新建”,在“新建”窗口选择“工程”选项卡。
由于程序是基于对话框的MFC应用程序,所以首先是建立基于对话框的工程,以“lee”为工程名,然后点击“确定”,如图1所示。
图1新建对话框
在点击“确定”后进入到了“MFC应用程序向导—步骤1”的设置界面,选择“基本对话框”,然后点击“下一步”。
图2MFC应用程序向导
在剩下的3个步骤中,全部选择默认的设置,不要做随意更改,直至“完成”便实现了对话框的创建。
在建立的对话框中,点击右键,选择“插入ActiveX控件”,在跳出的对话框中选择“WindowsMediaPlayer”,点击“确定”。
图3插入WindowsMediaPlayer控件
虽然已插入该控件,但该控件没有与工程中的对话框发生任何联系,所以需要对其进行变量(variables)的关联,将该控件与对话框联系起来。
左键单击对话框中的中的“WindowsMediaPlayer”控件,“属性”设置为“IDC_player”,右键单击“建立类向导”,在对话框中选择“MemberVariables”选项卡,单击“ADDVariables”,图5中的“ConfirmClasses”中点击“OK”会弹出下图6所示的“Addmembername”对话框,命名为“m_player”,设为控制“Control”型,单机“OK”。
图4MFCClassWizard
图5ConfirmClasses
图6变量命名
关联变量之后才算是真正的添加了该控件,可以发现在关联变量之后,控件工具栏多了“WindowsMediaPlayer”控件的选项,并且在“SourceFiles”中增加了许多类,相应的头文件也增加许多,其中最主要的类为Cwmpplayer4,Cwmpcontrols,Cwmpmedia,Cwmpsettings四大类。
Cwmpplayer4类主要是关于对其他类的对象的调用以及基本的控件功能的实现,提供了与WindowsMediaPlayer控件进行交互的基本方法,其中部分成员函数还能够进一步获取得到其他相关类对象的实例;Cwmpcontrols类主要是对控件的更多的操作;Cwmpmedia类主要是对于媒体文件资源的一些操作;Cwmpsettings类主要是对于媒体文件中的一些基本设置的操作。
3、界面的设计:
首先是打开按钮,用于媒体文件的打开;然后依次是播放、暂停、全屏、快进、快退、静音、停止、退出按钮,以及音量滑块条Slinder控件。
对空间主要进行变量的关联,以及ID的修改,对于普通按钮进行ID修改,结果如下下表1和表2所示。
表1控件ID以及关联变量表
控件Caption
按钮ID
关联变量类型
WMPlayer
IDC_player
CWMPlayer4
Slinderr
IDC_Slinder
CSliderCtrl
控件Caption
按钮ID
消息响应函数
打开
IDC_OPEN
OnOpen()
播放
IDC_PLAY
OnPlay()
暂停
IDC_PAUSE
OnButtonPause()
全屏
IDC_FULSCREEN
OnFulscreen()
快进
IDC_FASTFORWARD
OnFastforward()
快退
IDC_FASTREVERSE
OnFastreverse()
静音
IDC_MUTE
OnMute()
停止
IDC_STOP
OnButtonStop()
退出
IDCANCEL
OnCancel()
表2控件ID以及对应响应函数表
经过控件添加、关联和位置修改、ID修改,最终得到各个控件分布后的界面。
另外还要加入菜单“MENU”,菜单的添加相对较简单。
在“ResourceFile”中添加“MENU”,属性为“IDR_MENU1”,在“MENU”将按钮的ID填入到相应的“MENU”选项中,但是菜单并未与对话窗口有实质性联系,需要将菜单加入到“IDD_CWMJ_DIALG”中来,在“IDD_CWMJ_DIALG”窗口空白右键单击,选中菜单“IDR_MENU1”,这样便完成了对菜单的加载。
运行界面效果图如下图所示。
图7运行后的界面效果
4、关键功能的实现:
4.1“打开”功能的实现:
voidCleeDlg:
:
Onopen()
{
//TODO:
Addyourcommandhandlercodehere
charszFilter[]="ALLData(*.*)|*.*|AVIFile(*.avi)|*.avi|VideoFile(*.dat)|*.dat|WavFile(*.wav)|*.wav|MidFile(*.mid;*.rmi)|*.mid;*.rmi|MPEGFile(*.mpeg)|*.mpeg";
//用于设置FileDialog的文件类型
CFileDialogFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFilter);
if(FileDlg.DoModal()==IDOK)
{
CStringPathName=FileDlg.GetPathName();
PathName.MakeUpper();
m_ActiveMovie.SetFileName(PathName);
CMenu*pMenu=GetMenu();
ASSERT_VALID(pMenu);
pMenu->EnableMenuItem(fullscreen,0);
pMenu->EnableMenuItem(end,0);
pMenu->EnableMenuItem(pause,0);
pMenu->EnableMenuItem(run,0);
}
}
4.2“播放”功能的实现
voidCleeDlg:
:
Onrun()
{
//TODO:
Addyourcommandhandlercodehere
//播放
m_ActiveMovie.Run();
}
4.3“暂停”功能的实现
voidCleeDlg:
:
Onpause()
{
//TODO:
Addyourcommandhandlercodehere
//暂停
m_ActiveMovie.Pause();
}
4.4“结束”功能的实现
voidCleeDlg:
:
Onend()
{
//结束菜单
//TODO:
Addyourcommandhandlercodehere
m_ActiveMovie.Stop();
}
4.5“全屏”功能的实现
voidCleeDlg:
:
Onfullscreen()
{
//TODO:
Addyourcommandhandlercodehere
//全屏
if(m_ActiveMovie.GetCurrentState()>-1)
{
m_ActiveMovie.Pause();//暂停播放
m_ActiveMovie.SetFullScreenMode(true);//设置满屏模式
m_ActiveMovie.Run();//继续播放
}
}
4.6“控件隐藏”功能的实现
voidCleeDlg:
:
Onhide()
{
//设置按键的隐藏
CRectrc;
GetWindowRect(rc);
if(rc.bottom>500)
//判断窗口是否过小
m_hide=m_hide==0?
1:
0;
if(m_hide==0)
GetMenu()->CheckMenuItem(hide,MF_UNCHECKED);
else
GetMenu()->CheckMenuItem(hide,MF_CHECKED);
MovieWindow();
}
4.7“滑块控制音量”的实现
voidCleeDlg:
:
OnCustomdrawSlider(NMHDR*pNMHDR,LRESULT*pResult)
{
//TODO:
Addyourcontrolnotificationhandlercodehere
//滑块控制声音
UpdateData(TRUE);
sound=m_slider.GetPos();
UpdateData(FALSE);
*pResult=0;
CMenu*pMenu=GetMenu();
ASSERT_VALID(pMenu);
pMenu->EnableMenuItem(reduce,0);
pMenu->EnableMenuItem(add,0);
if(sound<100&&sound>-100)
{
m_sound=-sound*20-2000;
if(m_ActiveMovie.GetCurrentState()>-1&&sound_flag==1)
m_ActiveMovie.SetVolume(-sound*20-2000);
}
else
if(sound<0)
pMenu->EnableMenuItem(add,1);
else
pMenu->EnableMenuItem(reduce,1);
}
4.8“音量增大”的功能实现
voidCleeDlg:
:
Onadd()
{
//用于增加音量
CMenu*pMenu=GetMenu();
ASSERT_VALID(pMenu);
pMenu->EnableMenuItem(reduce,0);
//讲减小置为可用
if(sound>-100)
{
pMenu->EnableMenuItem(add,0);
m_slider.SetPos(sound-10);
//更改滑块位置
if(m_ActiveMovie.GetCurrentState()>-1)
//判断是否已载入媒体
m_ActiveMovie.SetVolume(-sound*20-2000);
}
else
pMenu->EnableMenuItem(add,1);
//声音大于0禁用增大
}
4.9“音量减小”的功能实现
voidCleeDlg:
:
Onreduce()
{
//用于减小音量
CMenu*pMenu=GetMenu();
ASSERT_VALID(pMenu);
pMenu->EnableMenuItem(add,0);
//讲增加置为可用
//TODO:
Addyourcommandhandlercodehere
if(sound<100)
{
pMenu->EnableMenuItem(reduce,0);
m_slider.SetPos(sound+10);
//更改滑块位置
if(m_ActiveMovie.GetCurrentState()>-1)
//判断是否已载入媒体
m_ActiveMovie.SetVolume(-sound*20-2000);
}
else
pMenu->EnableMenuItem(reduce,1);
//声音小于-4000禁用减小
}
4.10“静音”功能的实现
voidCleeDlg:
:
Onnosound()
{
//TODO:
Addyourcommandhandlercodehere
m_nosound.SetCheck(sound_flag);
//设置静音复选框的复选
GetMenu()->CheckMenuItem(nosound,MF_UNCHECKED);
//设置静音菜单的复选
if(sound_flag==1)
{
m_sound=m_ActiveMovie.GetVolume();
GetMenu()->CheckMenuItem(nosound,MF_CHECKED);
sound_flag=0;
if(m_ActiveMovie.GetCurrentState()>-1)
m_ActiveMovie.SetVolume(-8000);
}
else
{
sound_flag=1;
GetMenu()->CheckMenuItem(nosound,MF_UNCHECKED);
if(m_ActiveMovie.GetCurrentState()>-1)
m_ActiveMovie.SetVolume(m_sound);
}
//静音标志的更改
}
4.11“声道平衡”功能的实现
voidCleeDlg:
:
Onbalance()
{//TODO:
Addyourcommandhandlercodehere
//声道平衡
Cbalancesound_balance;
m_movie=(CActiveMovie3*)&m_ActiveMovie;
//使用CActiveMovie3控件指针传递
sound_balance.DoModal();
}
4.12“退出”功能的实现
voidCleeDlg:
:
Onclose()
{
//TODO:
Addyourcommandhandlercodehere
OnOK();//退出应用程序
}
5、实验成果
图8打开
图9播放中
五、实习总结
经过这次课程设计,让我对于MFC编程的方法有了进一步的认识。
开始看到VC++选择了一个感兴趣的的题目——视频播放器,以为用VC++做出一个视频播放器的静态界面,结果说要做出一个播放器并且还要具有播放视频的真实效果,其他的功能也都要实现,就觉得这个课设很难,因为VC++学的不扎实。
接触题目开始做后,选用相对简单的WindowsMediaPlayer控件,于是在网上查了一些关于WindowsMediaPlayer控件的,结果按照网上说的方法来根本无法实现,所以在头两天是在摸索中,耗费了很多时间才拾起当时学的一些基本知识。
整个程序设计我做了十天,直到答辩前一天我都还在编写代码,每天熬夜到12点,想起当时没有好好学习VC++的课程知识,现在做起来才知道多么的浪费时间,很多小知识点却耗费了大量的时间去纠结。
在此次的实习中,我发现控件自带的的类会在对话框的主程序中被调用,那么就要在主程序中#include入对应类的头文件。
对需要用到的类生成对应的对象以实现类中函数的使用。
在完成控件自带类的函数在程序中的使用之后,还需要调用对话框自身的函数,比如消息及消息响应函数等函数,以及各控件对应的消息响应函数,并且初始化函数等也需要做一些改动,添加一些与控件类有关的函数或者定义一些变量,如此便可以实现控件自带类和本程序中的类的共同作用。
除此以外,我个人觉得VC++有个缺点,就是每次建立类向导后,一旦删除类向导后总是还要手动删除该类向导代码,还要删除头文件里的变量,不然总是提示错误,很繁琐,很费事。
最后,历时两周的实习终于结束了,播放器也做好了,并且能够实现一个视频播放器最基本的一些功能,每次运行看到我的播放器能够按照我的指令去实现一些功能真的很欣慰。
这次是一个很好的机会,让我再次拾起了忘记了的知识,也锻炼了我的实践能力,提高了自己独立解决问题的水平。
同时也非常感谢马岱、于永彦两位老师的指导,以及计算机工程学院给我们提供实验环境。
参考文献
[1]揣锦华.面向对象程序设计与VC++实践[M].西安电子科技大学出版社.2005
[2]郑阿奇.VisualC++教程[M].北京:
机械工业出版社.2004
[4]周长发.VisualC++.NET多媒体编程[M].电子工业出版社.2002
[5]SteveMack.流媒体宝典.电子工业出版社.2003
[6]王育坚.VisualC++面向对象编程教程.第2版.北京:
清华大学出版社,2008
[7]侯俊杰.深入浅出MFC.第2版.广东:
南方出版社,2007
[8]严华峰等.VisualC++课程设计案例精编.北京:
中国水利水电出版社,2004
[9]王维玉等.VisualC++高级编程技术精粹.北京:
科学出版社,2008
[10]于永彦等.多媒体开发与编程.北京:
北京大学出版社,2011
指导教师评语
学号
1101312215
姓名
章鹏
班级
通信1102
选题
名称
视频播放器设计
序号
评价内容
权重(%)
得分
1
考勤记录、学习态度、工作作风与表现。
5
2
自学情况:
上网检索机时数、文献阅读情况。
10
3
选题是否先进,是否具有前沿性或前瞻性。
5
4
成果验收:
是否完成设计任务;能否运行、可操作性如何等。
20
5
报告的格式规范程度、是否图文并茂、语言规范及流畅程度;主题是否鲜明、重心是否突出、论述是否充分、结论是否正确;是否提出了自己的独到见解。
30
6
文献引用是否合理、充分、真实。
5
7
答辩情况:
自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。
25
合计
指导教师(签名):
年月日