基于VC的多媒体播放器的设计与开发Word格式.docx
《基于VC的多媒体播放器的设计与开发Word格式.docx》由会员分享,可在线阅读,更多相关《基于VC的多媒体播放器的设计与开发Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
1.2ActiveXControl介绍
ActiveX控件,一个类似于复选框或按钮的控件,可向用户提供选项或运行自动执行任务的宏或脚本。
可以在MicrosoftVisualBasicforApplications中为控件编写宏,或在Microsoft脚本编辑器中编写脚本。
2.需求分析
2.1功能需求分析
图2-1功能需求图
(1)播放视频文件:
用户可以通过该软件播放任意格式(例如avi、rmvb、rm等格式)的视频文件。
(2)播放音频文件:
用户可以播放常规(mp3格式)的音频文件。
(3)文件列表显示:
用户通过添加音频视频文件将在列表显示并告知用户正在播放的曲目。
(4)音量大小控制:
用户可以通过音量增大按钮和音量减小按钮来控制音量大小。
2.2性能需求分析
(1)流畅性。
音频文件和视频文件能流畅的播放。
(2)稳定性。
程序运行稳定,占用内存小,不会出现崩溃的情况。
(3)模块化。
播放器各个模块划分清晰,用户操作方便。
2.3运行需求分析
(1)硬件要求:
内存:
512MB以上,
CPU:
2.20GHz,
磁盘空间:
20MB。
(2)系统要求:
Windows7旗舰版32位操作系统。
3.系统总体设计
3.1总体设计
1)界面设置
①按钮类声明
②ActiveX控件类声明
③对话框类声明
④基本界面的图形设置(根据图形设置界面)
2)打开文件与添加列表
①播放列表
②添加文件
3)播放控制
①打开
②播放
③暂停
④停止
⑤音量增大
⑥音量减小
⑦循环
⑧全屏
⑨播放进程控制
⑩退出
4)对列表控制
①添加文件
②保存列表
③列表中的双击播放
④列表的扩展
⑤删除文件
⑥保存方式
5)菜单设置(菜单是从按钮出来,而不是原来意义的直接添加在对话框上)
①菜单按钮
②控制按钮
③播放列表按钮
3.2总体设计层次图
系统总体设计层次图如图3-2所示。
图3-2总体设计层次图
4.详细设计
最初运用MFC,建立对话框为基本框架。
因为本软件是以系统自带的ActiveX控件为基础,所以将本软件的设计重点和难点放在了功能设计方面。
4.1基本界面设置
在基本界面确定后,添加各类控件。
按钮定义为CButtom按钮类,播放控件定义为CActiveMovie3类,基础类以CDialog为父类的CMediaPlayerDlg类,列表框为CListBox类。
4.2打开文件与添加列表控制设置
打开文件有两种方法,一是通过主面板上打开按钮,二是通过菜单中文件的子菜单――打开文件。
添加文件:
CButton,IDC_ADD
4.3播放控制控件设置
播放控制包括:
播放,暂停,停止,音量增大,音量减小,循环,全屏,打开,退出。
播放控制也可在菜单中进行控制。
①播放:
CButton, IDC_PLAY
②暂停:
CButton, IDC_PAUSE
③停止:
CButton, IDC_STOP
④音量增大:
CButton, IDC_LOWER
⑤音量减小:
CButton, IDC_UPPER
⑥循环:
CButton, IDC_REPEAT
⑦全屏:
CButtom,IDC_FULLSCREEN
⑧打开:
CButton,IDC_OPEN
⑨退出:
CButton,IDCANCEL
4.4对列表的控制控件设置
列表的控制包括:
添加文件,删除当前所选项,保存列表,保存方式,在列表中双击播放,列表的扩展。
设置如下。
①添加文件:
CButton, IDC_ADD
①删除当前所选项:
CButton, IDC_DEL
②保存列表:
CButton,IDC_SAVELIST
③保存方式:
IDC_RADIO1,//自动保存。
IDC_RADIO2,//手动保存。
④列表中的双击播放:
LIST BOX本身的LBN_DBLCLK消息函数OnDblclkList()
⑤列表的扩展:
m_list.SetHorizontalExtent(1000);
4.5菜单控件设置
除去上述菜单控制之外,菜单中还包括音量控制、模式控制和列表控制。
①音量控制:
IDC_LOWER,//音量减小
IDC_UPPER,//音量增大
②模式控制:
IDC_REPEAT,//循环控制
IDC_FULLSCREEN,//全屏
③列表控制:
IDC_OPENLIST,//播放列表
4.6程序设计的详细说明
1)界面设置
各个自定义类的声明:
CButton类:
按钮类声明。
CActiveMovie3类:
ActiveX控件类声明。
CDialog类:
对话框类声明。
在主对话框的类定义中声明:
public:
voidMoveMovieWindow();
//界面初始化
在主对话框的初始化程序里调用该函数,具体定义请参照程序中函数,
BOOLisRepeat;
//循环控制标识
控制循环模式的标识,通过此标识识别系统状态:
单曲或重复。
并在系统界面显示状态。
2)打开文件函数设置
由按钮的BN_CLICKED消息函数控制。
程序详见
voidCMediaPlayerDlg:
:
OnOpen()
//打开文件
3)列表函数设置
列表文件的程序主要写在按钮的BN_CLICKED消息函数里面。
OnAdd()
//添加列表
OnSavelist()
//保存列表
OnOpenlist()
//播放列表的打开与关闭
4)播放控制函数设置
OnPlay()
OnPause()
OnStop()
OnUpper()
OnLower()
OnRepeat()
⑦循环控制:
⑧全屏:
OnFullscreen()
BOOLCMediaPlayerApp:
InitInstance()
5)列表控制函数设置
CButton,IDC_ADD,此函数同上述打开文件OnAdd()。
CButton,IDC_SAVELIST,此函数同上述保存文件列表OnSavelist()。
③列表的扩展:
在OnInitDialog()函数中添加如下代码。
LIST BOX本身的LBN_DBLCLK消息函数OnDblclkListP()。
OnDblclkListP()
⑤列表的隐藏弹出:
同上述列表函数的播放列表的打开与关闭函数OnOpenlist()。
6)菜单控制函数设置
菜单是从按钮出来,而不是原来意义的直接添加在对话框上。
①菜单按钮:
OnMenu()
②音量控制:
OnLower()
//音量减小
OnUpper()
//音量增大
③模式控制:
//全屏
//单曲或重复
④列表控制:
5.编码实现
5.1ActiveX控件在播放器中应用
目前视频播放器很多,可以播放各种各样的文件和流,但大多只支持一个文件或一个流播放,若要播放多个文件就需手工打开多个播放器。
在现实的应用中,为了实现多流播放,实际上是直接将媒体流打包输入到计算机的通信接口上,由多个播放器进程进行播放,这样做只适应于播放无关联的媒体流,如多路视频监控,多人会议系统等。
而对于相关联的媒体流,目前市场上的视频播放器就不能实现多个视频文件流的控制和同步。
在对多流媒体同步播放技术研究的基础上,通过对流媒体服务器的设置,进行了多流媒体播放器的开发。
多流媒体播放器可以接收多流媒体服务器的码流并对其进行解码和控制,同时对相关流进行同步,改进了播放器的内部结构和播放器的用户界面。
将其移植成ActiveX控件后,通过对4个媒体流的同步播放测试,证实用ActiveX控件设计的播放器运行性能良好。
ActiveX是一种技术集合。
利用ActiveX,开发者几乎可以利用任何熟悉的工具产生多媒体效果、交互式功能及复杂的应用程序。
其优点在于开放的跨平台支持,可以运行在Macintosh,Windows和UNIX操作系统上,支持VisualBasic、VisualC++、BorlandDelphi、BorlandC++、javaandJava-enabledtools等各种工具,支持HTML,TCP/IP,Java,COM和其他工业标准。
ActiveX的技术包括用户能够在浏览器之中浏览非HTML文档(如word文档);
能够被插入网页或任何称作控件容器库的应用程序之中的对象(如按钮、直方图);
可以在整个客户区域以框架形式显示文档;
能够定制来源于数据库或是一个在服务器上运行的程序的网页内容;
可以将处理过程从服务器方移至客户方。
5.2主要实现原理及程序
1)文件处理过程演示
文件处理过程如图5-1所示。
图5-1文件处理过程演示图
主要实现代码如下所示。
OnOpen()
{
charszFileFilter[]="
所有支持类型|*.mp3;
*.wma;
*.dat;
*.wav;
*.avi;
*.mov;
*.rmvb;
*.mmm;
*.mid;
*.rmi;
*.mpeg|"
"
Mp3File(*.mp3)|*.mp3|"
WmaFile(*.wma)|*.wma|"
VideoFile(*.dat)|*.dat|"
WaveFile(*.wav)|*.wav|"
AVIFile(*.avi)|*.avi|"
MovieFile(*.mov)|*.mov|"
RmvbFile(*.rmvb)|*.rmvb|"
MediaFile(*.mmm)|*.mmm|"
MidFile(*.mid;
*,rmi)|*.mid;
*.rmi|"
MPEGFile(*.mpeg)|*.mpeg|"
AllFile(*.*)|*.*||"
;
//文件类型过滤
CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
if(dlg.DoModal()==IDOK){
CStringPathName=dlg.GetPathName();
PathName.MakeUpper();
m_ActiveMovie.SetFileName(PathName);
m_list.AddString(PathName);
}
OnPlay();
}
2)主界面实现
主界面设计如图5-2所示。
图5-2主界面设计对照图
根据上图设计主界面,主要实现代码如下。
BOOLCMediaPlayerDlg:
OnInitDialog()
CDialog:
OnInitDialog();
ASSERT((IDM_ABOUTBOX&
0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<
0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->
AppendMenu(MF_SEPARATOR);
AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
SetIcon(m_hIcon,TRUE);
//Setbigicon
SetIcon(m_hIcon,FALSE);
//Setsmallicon
Volume=m_ActiveMovie.GetVolume()+652;
CStringstr1;
str1.Format(_T("
%ld"
),Volume);
SetDlgItemText(IDC_STATIC3,str1);
SetWindowPos(NULL,0,0,800,570,SWP_NOMOVE);
m_list.SetHorizontalExtent(1000);
CStdioFile*fsp=newCStdioFile("
.\\list.txt"
CFile:
modeRead);
CStringstr;
while(fsp->
ReadString(str))
m_list.AddString(str);
fsp->
Close();
deletefsp;
MoveMovieWindow();
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
3)消息处理
程序中各个按键及打开、保存、删除、添加等消息处理示意如图5-3所示。
图5-3消息处理示意图
软件在运行中每个动作都要得到响应,也就是每个动作都会有一个消息,通过对每个消息的处理才能保证软件正常的工作,也就是线程的控制代码如下。
OnPlay()
//TODO:
Addyourcontrolnotificationhandlercodehere
if(p_flag==0){
m_ActiveMovie.SetFileName(m_pathname);
//播放列表文件
else
m_ActiveMovie.Run();
//播放文件
SetTimer(0,20,NULL);
//设置定时器
OnPause()
p_flag=1;
m_ActiveMovie.Pause();
//暂停播放
OnStop()
p_flag=0;
m_ActiveMovie.Stop();
//停止播放文件
KillTimer(0);
//关掉定时器
OnCancel()
Addextracleanuphere
OnCancel();
j=0;
if(i==0)
m++;
n--;
Volume=m_ActiveMovie.GetVolume();
if(m>
5){
AfxMessageBox("
音量最小了!
!
"
);
i=1;
//m_ActiveMovie.Pause();
m_ActiveMovie.SetVolume(Volume-100);
//m_Activ