基于VC的多媒體播放器的設(shè)計(jì)與開(kāi)發(fā)_第1頁(yè)
基于VC的多媒體播放器的設(shè)計(jì)與開(kāi)發(fā)_第2頁(yè)
基于VC的多媒體播放器的設(shè)計(jì)與開(kāi)發(fā)_第3頁(yè)
基于VC的多媒體播放器的設(shè)計(jì)與開(kāi)發(fā)_第4頁(yè)
基于VC的多媒體播放器的設(shè)計(jì)與開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

文檔來(lái)源為文檔來(lái)源為 :從網(wǎng)絡(luò)收集整理 .word版本可編輯 .歡迎下載支持 .文檔來(lái)源為:從網(wǎng)絡(luò)收集整理文檔來(lái)源為:從網(wǎng)絡(luò)收集整理.word版本可編輯.歡迎下載支持.文檔來(lái)源為 :從網(wǎng)絡(luò)收集整理 .word版本可編輯 .(4)音量大小控制:用戶(hù)可以通過(guò)音量增大按鈕和音量減小按鈕來(lái)控制音量大小。性能需求分析1)流暢性。音頻文件和視頻文件能流暢的播放。2)穩(wěn)定性。程序運(yùn)行穩(wěn)定,占用內(nèi)存小,不會(huì)出現(xiàn)崩潰的情況。3)模塊化。播放器各個(gè)模塊劃分清晰,用戶(hù)操作方便。運(yùn)行需求分析1)硬件要求:內(nèi)存:512MB以上,CPU:2.20GHz,磁盤(pán)空間:20MB。2)系統(tǒng)要求:Windows7旗艦版32位操作系統(tǒng)。系統(tǒng)總體設(shè)計(jì)總體設(shè)計(jì)界面設(shè)置按鈕類(lèi)聲明ActiveX控件類(lèi)聲明對(duì)話(huà)框類(lèi)聲明基本界面的圖形設(shè)置(根據(jù)圖形設(shè)置界面)打開(kāi)文件與添加列表播放列表添加文件播放控制打開(kāi)播放暫停停止音量增大音量減小循環(huán)全屏播放進(jìn)程控制退出對(duì)列表控制添加文件保存列表列表中的雙擊播放列表的擴(kuò)展刪除文件保存方式菜單設(shè)置(菜單是從按鈕出來(lái),而不是原來(lái)意義的直接添加在對(duì)話(huà)框上)菜單按鈕控制按鈕播放列表按鈕總體設(shè)計(jì)層次圖系統(tǒng)總體設(shè)計(jì)層次圖如圖3-2所示。圖3-2總體設(shè)計(jì)層次圖詳細(xì)設(shè)計(jì)最初運(yùn)用MFC,建立對(duì)話(huà)框?yàn)榛究蚣?。因?yàn)楸拒浖且韵到y(tǒng)自帶的ActiveX控件為基礎(chǔ),所以將本軟件的設(shè)計(jì)重點(diǎn)和難點(diǎn)放在了功能設(shè)計(jì)方面?;窘缑嬖O(shè)置在基本界面確定后,添加各類(lèi)控件。按鈕定義為CButtom按鈕類(lèi),播放控件定義為CActiveMovie3類(lèi),基礎(chǔ)類(lèi)以CDialog為父類(lèi)的CMediaPlayerDlg類(lèi),列表框?yàn)镃ListBox類(lèi)。打開(kāi)文件與添加列表控制設(shè)置打開(kāi)文件有兩種方法,一是通過(guò)主面板上打開(kāi)按鈕,二是通過(guò)菜單中文件的子菜單――打開(kāi)文件。添加文件:CButton,IDC_ADD播放控制控件設(shè)置播放控制包括:播放,暫停,停止,音量增大,音量減小,循環(huán),全屏,打開(kāi),退出。播放控制也可在菜單中進(jìn)行控制。播放:CButton,IDC_PLAY暫停:CButton,IDC_PAUSE停止:CButton,IDC_STOP音量增大:CButton,IDC_LOWER音量減?。篊Button,IDC_UPPER循環(huán):CButton,IDC_REPEAT全屏:CButtom,IDC_FULLSCREEN打開(kāi):CButton,IDC_OPEN退出:CButton,IDCANCEL對(duì)列表的控制控件設(shè)置列表的控制包括:添加文件,刪除當(dāng)前所選項(xiàng),保存列表,保存方式,在列表中雙擊播放,列表的擴(kuò)展。設(shè)置如下。添加文件:CButton,IDC_ADD刪除當(dāng)前所選項(xiàng):CButton,IDC_DEL保存列表:CButton,IDC_SAVELIST保存方式:IDC_RADIO1,//自動(dòng)保存。IDC_RADIO,2//手動(dòng)保存。列表中的雙擊播放:LISTBOX^身的LBN_DBLCLK息函數(shù)OnDblclkList()列表的擴(kuò)展:m_list.SetHorizontalExtent(1000);菜單控件設(shè)置除去上述菜單控制之外,菜單中還包括音量控制、模式控制和列表控制。音量控制:IDC_LOWER,//音量減小IDC_UPPER,//音量增大模式控制:IDC_REPEAT,//循環(huán)控制IDC_FULLSCREEN,//全屏列表控制:IDC_OPENLIST,//播放列表程序設(shè)計(jì)的詳細(xì)說(shuō)明1)界面設(shè)置各個(gè)自定義類(lèi)的聲明:CButton類(lèi):按鈕類(lèi)聲明。CActiveMovie3類(lèi):ActiveX控件類(lèi)聲明。CDialog類(lèi):對(duì)話(huà)框類(lèi)聲明。在主對(duì)話(huà)框的類(lèi)定義中聲明:public:voidMoveMovieWindow();//界面初始化在主對(duì)話(huà)框的初始化程序里調(diào)用該函數(shù),具體定義請(qǐng)參照程序中函數(shù),BOOLisRepeat;//循環(huán)控制標(biāo)識(shí)控制循環(huán)模式的標(biāo)識(shí),通過(guò)此標(biāo)識(shí)識(shí)別系統(tǒng)狀態(tài):?jiǎn)吻蛑貜?fù)。并在系統(tǒng)界面顯示狀態(tài)。2)打開(kāi)文件函數(shù)設(shè)置由按鈕的BN_CLICKEDf息函數(shù)控制。程序詳見(jiàn)voidCMediaPlayerDlg::OnOpen()//打開(kāi)文件3)列表函數(shù)設(shè)置列表文件的程序主要寫(xiě)在按鈕的BN_CLICKEDf息函數(shù)里面。程序詳見(jiàn)voidCMediaPlayerDlg::OnAdd()//添加列表voidCMediaPlayerDlg::OnSavelist()//保存列表voidCMediaPlayerDlg::OnOpenlist()//播放列表的打開(kāi)與關(guān)閉4)播放控制函數(shù)設(shè)置播放:voidCMediaPlayerDlg::OnPlay()暫停:voidCMediaPlayerDlg::OnPause()停止:voidCMediaPlayerDlg::OnStop()音量增大:voidCMediaPlayerDlg::OnUpper()音量減?。簐oidCMediaPlayerDlg::OnLower()循環(huán):voidCMediaPlayerDlg::OnRepeat()循環(huán)控制:BOOLisRepeat;全屏:voidCMediaPlayerDlg::OnFullscreen()退出:BOOLCMediaPlayerApp::InitInstance()5)列表控制函數(shù)設(shè)置①添加文件:CButton,IDC_ADD此函數(shù)同上述打開(kāi)文件OnAdd()。保存列表:CButton,IDC_SAVELIS,T此函數(shù)同上述保存文件列表OnSavelist()。列表的擴(kuò)展:在OnInitDialog()函數(shù)中添加如下代碼。m_list.SetHorizontalExtent(1000);列表中的雙擊播放:LISTBOX*:身的LBN_DBLCLK息函數(shù)OnDblclkListP()。voidCMediaPlayerDlg::OnDblclkListP()列表的隱藏彈出:同上述列表函數(shù)的播放列表的打開(kāi)與關(guān)閉函數(shù)OnOpenlist()。voidCMediaPlayerDlg::OnOpenlist()6)菜單控制函數(shù)設(shè)置菜單是從按鈕出來(lái),而不是原來(lái)意義的直接添加在對(duì)話(huà)框上。菜單按鈕:voidCMediaPlayerDlg::OnMenu()音量控制:voidCMediaPlayerDlg::OnLower()//音量減小voidCMediaPlayerDlg::OnUpper()//音量增大模式控制:voidCMediaPlayerDlg::OnFullscreen()//全屏voidCMediaPlayerDlg::OnRepeat()//單曲或重復(fù)列表控制:voidCMediaPlayerDlg::OnOpenlist()編碼實(shí)現(xiàn)ActiveX控件在播放器中應(yīng)用目前視頻播放器很多,可以播放各種各樣的文件和流,但大多只支持一個(gè)文件或一個(gè)流播放,若要播放多個(gè)文件就需手工打開(kāi)多個(gè)播放器。在現(xiàn)實(shí)的應(yīng)用中,為了實(shí)現(xiàn)多流播放,實(shí)際上是直接將媒體流打包輸入到計(jì)算機(jī)的通信接口上,由多個(gè)播放器進(jìn)程進(jìn)行播放,這樣做只適應(yīng)于播放無(wú)關(guān)聯(lián)的媒體流,如多路視頻監(jiān)控,多人會(huì)議系統(tǒng)等。而對(duì)于相關(guān)聯(lián)的媒體流,目前市場(chǎng)上的視頻播放器就不能實(shí)現(xiàn)多個(gè)視頻文件流的控制和同步。在對(duì)多流媒體同步播放技術(shù)研究的基礎(chǔ)上,通過(guò)對(duì)流媒體服務(wù)器的設(shè)置,進(jìn)行了多流媒體播放器的開(kāi)發(fā)。多流媒體播放器可以接收多流媒體服務(wù)器的碼流并對(duì)其進(jìn)行解碼和控制,同時(shí)對(duì)相關(guān)流進(jìn)行同步,改進(jìn)了播放器的內(nèi)部結(jié)構(gòu)和播放器的用戶(hù)界面。將其移植成ActiveX控件后,通過(guò)對(duì)4個(gè)媒體流的同步播放測(cè)試,證實(shí)用ActiveX控件設(shè)計(jì)的播放器運(yùn)行性能良好。ActiveX是一種技術(shù)集合。利用ActiveX,開(kāi)發(fā)者幾乎可以利用任何熟悉的工具產(chǎn)生多媒體效果、交互式功能及復(fù)雜的應(yīng)用程序。其優(yōu)點(diǎn)在于開(kāi)放的跨平臺(tái)支持,可以運(yùn)行在Macintosh,Windows和UNIX操作系統(tǒng)上,支持VisualBasic、VisualC++、BorlandDelphi、BorlandC++、javaandJava-enabledtools等各種工具,支持HTMLTCP/IP,Java,COMB其他工業(yè)標(biāo)準(zhǔn)。ActiveX的技術(shù)包括用戶(hù)能夠在瀏覽器之中瀏覽非HTML文檔(如word文檔);能夠被插入網(wǎng)頁(yè)或任何稱(chēng)作控件容器庫(kù)的應(yīng)用程序之中的對(duì)象(如按鈕、直方圖);可以在整個(gè)客戶(hù)區(qū)域以框架形式顯示文檔;能夠定制來(lái)源于數(shù)據(jù)庫(kù)或是一個(gè)在服務(wù)器上運(yùn)行的程序的網(wǎng)頁(yè)內(nèi)容;可以將處理過(guò)程從服務(wù)器方移至客戶(hù)方。主要實(shí)現(xiàn)原理及程序1)文件處理過(guò)程演示文件處理過(guò)程如圖5-1所示。圖5-1文件處理過(guò)程演示圖主要實(shí)現(xiàn)代碼如下所示。voidCMediaPlayerDlg::OnOpen(){charszFileFilter[]="所有支持類(lèi)型|*.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(*.*)|*.*||";//文件類(lèi)型過(guò)濾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)主界面實(shí)現(xiàn)主界面設(shè)計(jì)如圖5-2所示。圖5-2主界面設(shè)計(jì)對(duì)照?qǐng)D根據(jù)上圖設(shè)計(jì)主界面,主要實(shí)現(xiàn)代碼如下。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);pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);}SetIcon(m_hIcon,TRUE);//SetbigiconSetIcon(m_hIcon,FALSE);//SetsmalliconVolume=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)消息處理程序中各個(gè)按鍵及打開(kāi)、保存、刪除、添加等消息處理示意如圖5-3所示。圖5-3消息處理示意圖軟件在運(yùn)行中每個(gè)動(dòng)作都要得到響應(yīng),也就是每個(gè)動(dòng)作都會(huì)有一個(gè)消息,通過(guò)對(duì)每個(gè)消息的處理才能保證軟件正常的工作,也就是線(xiàn)程的控制代碼如下。voidCMediaPlayerDlg::OnPlay(){//TODO:Addyourcontrolnotificationhandlercodehereif(p_flag==0){m_ActiveMovie.SetFileName(m_pathname);//播放列表文件}else{m_ActiveMovie.Run();//播放文件}SetTimer(0,20,NULL);//設(shè)置定時(shí)器}voidCMediaPlayerDlg::OnPause(){//TODO:Addyourcontrolnotificationhandlercodeherep_flag=1;m_ActiveMovie.Pause();//暫停播放}voidCMediaPlayerDlg::OnStop(){//TODO:Addyourcontrolnotificationhandlercodeherep_flag=0;m_ActiveMovie.Stop();//停止播放文件KillTimer(0);//關(guān)掉定時(shí)器}voidCMediaPlayerDlg::OnCancel(){//TODO:AddextracleanuphereCDialog::OnCancel();}voidCMediaPlayerDlg::OnLower(){j=0;if(i==0){m++;n--;//TODO:AddyourcontrolnotificationhandlercodehereVolume=m_ActiveMovie.GetVolume();if(m>5){AfxMessageBox("音量最小了?。 ?;i=1;}else{//m_ActiveMovie.Pause();m_ActiveMovie.SetVolume(Volume-100);//m_ActiveMovie.Run();Volume=(Volume+502)/10+50;CStringstr;str.Format(_T("%ld"),Volume);SetDlgItemText(IDC_STATIC3,str);}}else{AfxMessageBox("音量最小了!!”);}}voidCMediaPlayerDlg::OnUpper(){i=0;if(j==0){m--;n++;//TODO:AddyourcontrolnotificationhandlercodehereVolume=m_ActiveMovie.GetVolume();if(n>6){AfxMessageBox("音量最大了?。 ?;j=1;//n=0;}else{//m_ActiveMovie.Pause();m_ActiveMovie.SetVolume(Volume+100);//m_ActiveMovie.Run();Volume=(Volume+702)/10+50;CStringstr;str.Format(_T("%ld"),Volume);SetDlgItemText(IDC_STATIC3,str);}}else{AfxMessageBox("音量最大了??!”);}}voidCMediaPlayerDlg::OnFullscreen(){//TODO:Addyourcontrolnotificationhandlercodeherem_ActiveMovie.Pause();m_ActiveMovie.SetFullScreenMode(true);m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED);m_ActiveMovie.Run();}voidCMediaPlayerDlg::OnRepeat(){//TODO:Addyourcontrolnotificationhandlercodehereif(!isRepeat){isRepeat=TRUE;SetDlgItemText(IDC_STATIC2,"模式:循環(huán)");}else{isRepeat=FALSE;SetDlgItemText(IDC_STATIC2,"模式:單曲");}}voidCMediaPlayerDlg::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefaultdoubleCurrentPos=m_ActiveMovie.GetCurrentPosition();if(CurrentPos==0&&isRepeat)//如果當(dāng)前是文件的起始位置而且為重復(fù)播放狀態(tài)m_ActiveMovie.Run();CDialog::OnTimer(nIDEvent);}voidCMediaPlayerDlg::MoveMovieWindow(){CRectrc1,rc2,rc3;//得到ActiveMovie控件的大小m_ActiveMovie.GetWindowRect(rc1);//保證對(duì)話(huà)框客戶(hù)區(qū)的寬不小于300像素,高不小于225像素if(rc1.Width()<300||rc1.Height()<225){rc1.right=rc1.left+300;rc1.bottom=rc1.top+225;}//獲得對(duì)話(huà)框的大小GetWindowRect(rc2);//獲得對(duì)話(huà)框客戶(hù)區(qū)的大小GetClientRect(rc3);m_ActiveMovie.GetWindowRect(rc1);GetClientRect(rc3);//使ActiveMovie控件在對(duì)話(huà)框的客戶(hù)區(qū)居中m_ActiveMovie.MoveWindow((rc3.Width()-rc1.Width())/2,rc1.Width(),(rc3.Height()-rc1.Height())/2-50,rc1.Height());rc1.Width(),}voidCMediaPlayerDlg::OnOpenlist(){//TODO:Addyourcontrolnotificationhandlercodehereflag=!flag;if(!flag){SetWindowPos(NULL,0,0,800,570,SWP_NOMOVE);}else{SetWindowPos(NULL,0,0,1010,570,SWP_NOMOVE);}}voidCMediaPlayerDlg::OnAdd(){charszFileFilter[]="媒體文件(*.avi,*.mp3,*.wma)|*.avi;*.mp3;*.wma|";CFileDialogdlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR,szFileFilter);POSITIONpos=dlg.GetStartPosition();if(dlg.DoModal()==IDOK){while(pos!=NULL){m_pathname=dlg.GetNextPathName(pos);m_list.AddString(m_pathname);}}if(r_flag==1){OnSavelist();}}voidCMediaPlayerDlg::OnDblclkListP(){CStringstr;intindex=m_list.GetCurSel();m_list.GetText(index,str);m_ActiveMovie.SetFileName(str);OnPlay();m_pathname=str;}voidCMediaPlayerDlg::OnSavelist(){CStdioFilefile;file.Open(".\\list.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::typeText);for(inti=0;i<m_list.GetCount();i++){CStringstrtemp;m_list.GetText(i,strtemp);strtemp+="\n";//需要換行file.WriteString(strtemp);}file.Close();AfxMessageBox("保存成功!!");}voidCMediaPlayerDlg::OnDel(){intindex1=m_list.GetCurSel();m_list.DeleteString(index1);if(r_flag==1){OnSavelist();}}voidCMediaPlayerDlg::OnRadio1(){r_flag=0;}voidCMediaPlayerDlg::OnRadio2(){r_flag=1;}voidCMediaPlayerDlg::OnOpenfile(){ShellExecute(NULL,_T("open"),_T("d:\\MPlayer\\Debug\\list.txt"),NULL,NULL,SW_SHOW);}voidCMediaPlayerDlg::OnSetfocusListP(){p_flag=0;}總結(jié)通過(guò)對(duì)整個(gè)媒體播放器軟件的設(shè)計(jì),我不僅對(duì)播放器的開(kāi)發(fā)了有一定的了解,也認(rèn)識(shí)了平常不常接觸到的媒體類(lèi)型及其發(fā)展,使我的編程能力了有了很大的提高。本軟件實(shí)現(xiàn)在大多數(shù)的媒體格式的播放,基本上WindowsMediaPlayer能播放的格式,本軟件都支持,還有其他一些格式,如wm潞式。通過(guò)本次的設(shè)計(jì),熟悉并深入了解了MFC寸話(huà)本g和ActiveX控件的一些知識(shí)和原理。使我本次的收獲很大,編程能力也得到了雖然本軟件看起來(lái)簡(jiǎn)單,但是在設(shè)計(jì)的過(guò)程中也遇到了不少的困難,由最初的不知從何下手,到后來(lái)通過(guò)書(shū)籍、資料以及網(wǎng)絡(luò)編程者的經(jīng)驗(yàn)之談,在實(shí)踐中慢慢的摸索,做出了自己的多媒體播放器的雛形。然后在播放器基礎(chǔ)功能實(shí)現(xiàn)的前提下,逐漸增加一些常用功能,播放器在實(shí)踐中日趨完善。到現(xiàn)的成品播放器,其功能的設(shè)計(jì)與實(shí)現(xiàn)也基本完工,個(gè)人覺(jué)得還算滿(mǎn)意,當(dāng)然

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論