组员姓名:马超_08490125张源_08490115曾威_08490107项目概述:项目简介相关背景项目目标项目内容相关工具遇到的问题组员分工总结多媒体技术是当今信息技术领域发展最快、最活跃的技术,是当前人们关注的热点技术之一,是新一代电子技术发展和竞争的焦点。与多媒体技术发展密切相关的就是多媒体播放平台,它是多媒体技术的一个重要的分支,是人们畅游媒体信息世界的主要渠道。本文实现了一个基于ActiveMovie组件的多媒体播放器。主要实现的功能包括:支持目前多数格式的媒体文件,基本的播放控制功能,支持多媒体播放列表,同步歌词显示,曲目信息显示等。该系统是在VisualStudio6.0开发平台上开发的,是基于VisualBasic语言编写的。关键词多媒体技术,播放平台,组件,接口函数目的:为了进一步增加对多媒体知识的了解,进一步熟悉多媒体编程方面的知识,从而使自己在多媒体理论、编程实践方面都有一个较大的提高。意义:多媒体技术已经成为当今比较热门的研究课题,因此掌握多媒体及多媒体技术的相关知识,了解多媒体技术当前的发展状况及未来的发展前景,并能熟练地进行多媒体技术的开发,对于当前即将毕业的大学生来讲,是很有必要的。现状多媒体技术是当今信息技术领域发展最快、最活跃的技术,是新一代电子技术发展和竞争的焦点,特别是伴随着多媒体技术的网络化,使得多媒体技术的发展前景无限广阔。设计出一款基于WindowsActiveMovie组件的、能播放大多主流媒体格式的、功能完善、使用方便的多媒体播放器。了解WindowsActiveMove组件的功能、成员及应用,熟悉播放器各个功能模块及其实现过程,熟悉播放器的底层工作原理,熟悉ActiveMovie组件的应用,了解媒体编码解码原理。本播放器设计将不采用任何第三方控件,欲采用的是Windows底层组件进行解码播放,该组件主要是支持MP3播放,所以必须对MP3音频文件格式进行了解,熟悉MP3编码方式和文件结构,熟悉基于XML的更改皮肤原理。本系统将采用MicrosoftVisualC++6.0开发平台准备解决的问题:(1)利用系统组件实现最基本的媒体播放。(2)自己实现进度条进行播放控制、音量控制。(3)迷你播放器实现。(4)切割窗体。(5)最小化后系统托盘显示。遇到的问题:(1)播放视频后全屏显示后无法返回迷你状态。(2)迷你状态下显示时播放视频显示不全使用播放组件出现问题,正常播放情况下,在用播放对象获取相关播放信息(播放位置、播放音量等)时出现对象没有相关属性的异常,通过多次尝试得以解决,原因是创建播放对象但还未开始播放时,不能获取播放位置等信息,根本原因在于播放控制存在问题,需要改进。马超张源曾威可视动画控件ActiveMovie是Microsoft公司开发的ActiveX控件,从开始的1.0版、1.2版到现在的2.0版,功能上已经有了很大的改进。由于该控件内嵌了MicrosoftMPEG音频解码器和MicrosoftMPEG视频解码器,所以能够很好地支持音频文件和视频文件,ActiveMovie一、建立工程----利用VC++6.0的AppWizard生成一个基于对话框的工程Player,去掉对话框上的“确定”和“取消”按钮,并加入ActiveMovie控件(通常情况下ActiveMovie控件并不出现在控件面板中,可在菜单中依次选择“project—AddToProject—ComponentsAndControls”,在出现的“ComponentsAndControlsGallery”对话框中打开“RegisteredActiveControls”文件夹,选中“ActiveMovieControlObject”选项,按“Insert”后关闭该对话框,ActiveMovie控件便出现在控件面板中),调整好控件在对话框中的位置。为了能够控制控件的操作,应为对话框设计一个菜单,菜单的项目可以定为“文件”、“屏幕控制“和“音量控制”。二、添加代码----首先利用ClassWizard为ActiveMovie控件声明一个变量m_ActiveMovie。然后为菜单“文件”添加两个菜单项“打开文件”和“退出”,并分别添加函数OnOpen()和OnExit(),代码如下:voidCplayer::OnOpen(){//TODO:AddyourcommandhandlercodeherecharszFilter[]=VideoFile(*.dat)∣*.dat∣WaveFile(*.wav)∣*.wav∣AVIFile(*.avi)∣(*.avi)∣MovieFile(*.mov)∣(*.mov)∣MediaFile(*.mmm)∣(*.mmm)∣MidFile(*.mid;*.rmi)∣(*.mid;*.rmi)∣MPEGFile(*.mpeg)∣(*.mpeg)∣AllFile(*.*)∣*.*;//用于设置FileDialog的文件类型CFileDialogFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFilter);if(FileDlg.DoModal()==IDOK){CStringPathName=FileDlg.GetPathName();PathName.MakeUpper();m_ActiveMovie.SetFileName(PathName);}}----OnOpen()函数的作用是显示“打开”对话框,通过该对话框选择要执行的文件。三、如何实现文件的关联voidCObjectPlayerDlg::OnBtnOpen(){//TODO:AddyourcontrolnotificationhandlercodehereCStringpathName,str1;boolbobtn=true;charszFileFilter[]=Mp3File(*.mp3)|*.mp3|WmaFile(*.wma)|*.wma|VideoFile(*.dat)|*.dat|WaveFile(*.wav)|*.wav|AVIFile(*.avi)|*.avi|MovieFile(*.mov)|*.mov|MediaFile(*.mmm)|*.mmm|MidFile(*.mid;*,rmi)|*.mid;*.rmi|MPEGFile(*.mpeg)|*.mpeg|AllFile(*.*)|*.*||;CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);if(dlg.DoModal()==IDOK){pathName=dlg.GetPathName();pathName.MakeUpper();//大写m_ActiveMovie.SetFileName(pathName);intIstr;for(inti=0;ipathName.GetLength();i++){Istr=pathName.Find(_T(\\),i);if(Istr==-1){//但如果遇到路经中夹带中文就不好用了,比如“测”字中第一个字节信息会被误认为是“\”从而出错,所以路经中除了目标文件名外最后一个“\”前的字符最好都用英文str1=pathName.Mid(i);break;}}//m_ListB.AddString(pathName);m_ListB.AddString(str1);UpdateData(FALSE);bobtn=false;//如果有文件加载,使按钮有效m_Enable=true;if(m_Enable){m_BtnRun.EnableWindow(TRUE);m_BtnUpRadio.EnableWindow(TRUE);m_BtnDownRadio.EnableWindow(TRUE);m_BtnShotStop.EnableWindow(TRUE);m_BtnStop.EnableWindow(TRUE);m_BtnAllShow.EnableWindow(TRUE);m_SliderRadion.EnableWindow(TRUE);return;}}if(bobtn==true){AfxMessageBox(_T(请选择要播放的文件!));return;}}文件的加载voidCMediaPlayerDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMediaPlayerDlg)DDX_Control(pDX,IDC_FULSCREEEN,m_FullScreen);DDX_Control(pDX,IDC_REPEAT,m_Repeat);DDX_Control(pDX,IDC_UPPER,m_Upper);DDX_Control(pDX,IDC_LOWER,m_Lower);DDX_Control(pDX,IDC_CLOSE,m_Close);DDX_Control(pDX,IDCANCEL,m_Exit);DDX_Control(pDX,IDC_STOP,m_Stop);DDX_Control(pDX,IDC_PLAY,m_Play);DDX_Control(pDX,IDC_PAUSE,m_Pause);DDX_Control(pDX,IDC_OPEN,m_Open);DDX_Control(pDX,IDC_ACTIVEMOVIECONTROL1,m_ActiveMovie);//}}AFX_DATA_MAP}在这里关联控件类型DDX_Control函数管理着在对话框、表格视或控件视中被子类化的控件与对话框、表格视或控件视的CWnd数据成员之间的数据交换。voidAFXAPIDDX_Control(CDataExchange*pDX,intnIDC,CWnd&rControl);参数:pDX是指向CDataExchange对象的指针。这种结构为指定对象提供了建立数据交换的环境,也包括结构的指向。nIDC子控件类的资源ID继承控件的属性。rControl对对话框成员变量的一个引用,形成视图资源,或者控制数据被交换的视图对象。不同按钮的功能实现BEGIN_MESSAGE_MAP(CMediaPlayerDlg,CDialog)//{{AFX_MSG_MAP(CMediaPlayerDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_CLOSE,OnClose)ON_BN_CLICKED(IDC_OPEN,OnOpen)ON_BN_CLICKED(IDC_PLAY,OnPlay)ON_BN_CLICKED(IDC_STOP,OnStop)ON_BN_CLICKED(IDC_PAUSE,OnPause)ON_BN_CLICKED(IDC_LOWER,OnLower)ON_BN_CLICKED(IDC_UPPER,OnUpper)ON_BN_CLICKED(IDC_REPEAT,OnRepeat)ON_BN_CLICKED(IDC_FULSCREEEN,OnFulscreeen)ON_WM_TIMER()ON_BN_CLICKED是宏。。ON_BN_CLICKED(IDC_BUTTON,OnButtonWaistAction)括号里第一个参数,是资源里的ID第二个参数是当按动时调用的函数名。BOOLCMediaPlayerDlg::OnInitDialog(){CDialog::OnInitDialog();isRepeat=FALSE;/*//初始化Sliderm_Slider.SetRange(0,1000,FALSE);m_Slider.SetTicFreq(2);//m_Slider.SetLineSize(2);/