【正文】
rol, full screen and other use technologies include Visual C++ and MFC program design methods, the use of DirectShow player core technology, ADO database access technology, Skin++ library technology the system requirements analysis, design, implementation, pleted a media player system, various functions normal use, and gives the realization key second chapter is a paper related to technology introduction, two chapters is the system requirements analysis and design, the fifth chapter is the focus of this paper, detailing the implementation details of the player, the sixth chapter is the system testing and is based on the COM ponent, it is a binary level (not limited to programming languages ??and operating systems), has good patibility and portability. Since I was a beginner DirectShow, the player has some flaws, DirectShow development prospects, have the opportunity to study it in depth, on the basis of the existing players more perfect.Key words:Visual C++ MFC DirectShow Player1 緒論 課題研究的背景與意義當今信息技術越來越發(fā)達,社會越來越信息化、智能化,多媒體在未來社會應用越來越廣泛。Microsoft的Windows操作系統(tǒng)作為全球最主流、最常用的操作系統(tǒng),掌握在它上面的多媒體開發(fā)技術顯得越來越需要,相對于其他多媒體開發(fā)技術,掌握它本身提供的DirectX多媒體開發(fā)包顯得更為適合。DirectShow是微軟提供的多媒體開發(fā)包DirectX中的一部分,它是建立在DirectDraw和DirectSound基礎之上。 Microsoft給DirectShow程序員提供了一套開發(fā)多媒體標準的、統(tǒng)一的、高效的API接口,這些接口使得多媒體數(shù)據(jù)的回放變得簡單,剝離了應用程序和硬件底層的差異性。而DirectShow是基于COM組件的開發(fā)包,COM是基于二進制代碼級的協(xié)議(與編程語言無關的協(xié)議),對使用DirectShow開發(fā)的軟件以后的移植和兼容問題提供了良好的解決方案。 DirectShow使用智能連接開發(fā)多媒體應用程序,大大簡化了開發(fā)人員工作量,同時開發(fā)人員亦可開發(fā)自定義的濾波器。使得基于DirectShow的應用程序可以充分滿足不同用戶的需求。在未來幾年中,DirectShow技術的發(fā)展前景將是非常廣闊的。 課題國內外研究現(xiàn)狀DirectShow流媒體視頻技術現(xiàn)在廣泛的應用在國內外,涉及視頻處理、視頻捕捉、網(wǎng)絡視頻監(jiān)控、網(wǎng)絡視頻傳輸和電子商務等各個方面。 國內的視頻播放器多種多樣,有暴風影音、影音、迅雷看看等多種播放器,它們各自有各自的特點,目前暴風影音占據(jù)著市場的最大份額,它們各自采用的實現(xiàn)技術有所異同。隨著Internet的商業(yè)化,一些商家紛紛行動規(guī)劃開發(fā)適用于本企業(yè)的播放器。根據(jù)iResearch艾瑞資訊最新退出的網(wǎng)民連續(xù)用戶行為研究系統(tǒng)iUserTracker的最新數(shù)據(jù)顯示,目前,比較流行的多媒體播放器有:Microsoft Windows Media Player、RealOne、豪杰超級解霸以及暴風影音等,暴風影音和Windows Media Player是使用最廣泛的影視播放軟件,而這量大播放器的核心編碼已成控件,因此全球網(wǎng)絡化的公司都在利用這兩大核心控件開發(fā)適合自己使用的播放器;網(wǎng)絡上也有不少的研究者熱衷于播放器的研究利用控件或MCT接口開發(fā)自己的播放器,并取得了很大的進步,推動了播放器的發(fā)展。筆者所開發(fā)的多媒體播放器是使用的DirectShow技術,使用KLite_Codec_Pack進行解碼,能播放任意格式的媒體文件,和其他播放器不同的是,我加入了排行榜、播放模式控制、捕獲設備視頻等功能,界面清晰,使用簡單。 可行性分析 技術可行性分析本人熟悉計算機相關基本知識、熟悉程序設計方法、熟練掌握VC++編程、MFC開發(fā)方法和技巧,具備一定的編程經(jīng)驗和獨立編程能力?;贒irectShow視頻播放器實現(xiàn)原理可以通過查閱相關資料、請教老師和他人進行學習掌握,所以在技術上具有可行性。 經(jīng)濟可行性分析該軟件的開發(fā)、測試、運行使用等步驟皆在自己PC上完成,無需提供其他設備。 開發(fā)過程中涉及到的知識、軟件開發(fā)成本、交付后的運營維護皆由本人控制、完成,所用的軟件和硬件配置環(huán)境均為現(xiàn)成,所以經(jīng)濟上具有可行性。 管理可行性分析本軟件運用到實際生活、工作中,將會使音頻/視頻的播放和處理變得便利、經(jīng)濟及娛樂,而且還可以根據(jù)朋友、他人的用戶體驗不斷完善此軟件,可以感受到成就感,所以管理上具有可行性。綜上所述,本課題的可行性是有保障的。 論文的主要內容及章節(jié)安排論文的主要內容:詳細的闡述利用DirectShow實現(xiàn)多媒體播放器的原理、實現(xiàn)過程以及實現(xiàn)之后的演示效果,當中包含大量的Visual C++程序設計方法和數(shù)據(jù)庫操作。論文內容整體安排如下:第一章:介紹此課題的意義、相關背景和現(xiàn)狀。第二章:介紹完成此軟件所用到的平臺和技術。第三章:闡述此軟件的需求分析,包括業(yè)務分析、數(shù)據(jù)分析、功能需求和非功能需求。第四章:闡述此軟件的整體結構和各個模塊設計。第五章:詳細闡述此軟件的具體實現(xiàn)過程,包括各功能的核心代碼。 最后是總結、致謝。 2 相關平臺及開發(fā)技術簡介 Microsoft Visual C++ 2010概述Microsoft Visual C++,(簡稱Visual C++、MSVC、VC++或VC)微軟公司的C++開發(fā)工具,具有集成開發(fā)環(huán)境,可提供編輯C語言,C++以及C++/CLI等編程語言。VC++整合了便利的除錯工具,特別是整合了微軟視窗程式設計(Windows API)、三維動畫DirectX API,Microsoft .NET框架。 MicosoftVisual C++ 2010特點Microsoft Visual C++是微軟公司推出的開發(fā)Win32環(huán)境程序、面向對象的可視化集成編程系統(tǒng)。它的主要優(yōu)點如下:(1)程序框架自動生成(2)靈活方便的類管理(3)代碼編寫和界面設計集成交互操作(4)可開發(fā)多種程序(5)支持數(shù)據(jù)庫接口、OLEWinSock網(wǎng)絡和3D控制界面 MFC概述MFC(Microsoft Foundation Classes)是一個微軟公司提供的類庫(class libraries),以C++類的形式封裝了Windows的API,并且包含一個應用程序框架,以減少應用程序開發(fā)人員的工作量。MFC中的關鍵技術:(1) MFC程序的初始化過程建立一個MFC窗口:從CWinApp派生一個應用程序類,然后建立應用程序對象(theApp)。(2) 動態(tài)創(chuàng)建運行時創(chuàng)建指定類的對象。如框架窗口對象、視對象等,比如文檔對象需要由文檔模版類對象來動態(tài)的創(chuàng)建。 (3) 串行化程序中盡管有著各種各樣的數(shù)據(jù),串行化機制會像流水一樣按順序存儲到單一的文件中,而又能按順序的取出,變成各種不同的對象數(shù)據(jù)。 (4) 消息映射和傳遞MFC把SDK編程中對消息的產生、傳遞、到過程函數(shù)中響應的過程封裝起來,形成消息映射宏、消息映射表和消息響應函數(shù)體系,更加直觀和便于操作。 ADO訪問數(shù)據(jù)庫技術概述 OLE DB和ADO簡介OLE DB(Object Link and Embedding DataBase)是Visual C++開發(fā)數(shù)據(jù)庫應用程序時提供的新技術,它對所有的文件系統(tǒng)包括關系型數(shù)據(jù)庫和非關系型數(shù)據(jù)庫都提供了統(tǒng)一的接口。ADO(ActiveX Data Object)技術基于OLE DB,它繼承了OLE DB技術的優(yōu)點,對其接口作了封裝,使程序開發(fā)得到簡化。 ADO主要對象介紹(1) 連接對象(Connection Object)代表一個和數(shù)據(jù)源的連接,以后的數(shù)據(jù)庫操作都是建立在這個連接上的。 (2) 命令對象(Command Object)用來處理數(shù)據(jù)庫的一些操作,在某些方面具有和連接對象相同的功能(3) 記錄集對象(RecordSet Object)代表了一個記錄集,用來訪問記錄集。在使用這3個對象的時候,需要定義與之對應的3個智能指針,分別為:_ConnectionPtr、_CommandPtr和_RecordsetPtr。 VC++中使用ADO進行數(shù)據(jù)庫開發(fā)的基本流程(1)引入ADO動態(tài)鏈接庫。(2)初始化OLE/COM庫環(huán)境。(3)用Connection對象連接數(shù)據(jù)庫。(4)利用建立好的連接,打開記錄,通過Connection、Command對象執(zhí)行SQL語句或利用Recordset對象取得結果記錄集進行查詢、處理操作。 (5)使用完畢后關閉連接、釋放對象。 DirectShow核心技術 DirectShow整體架構DirectShow SDK為流媒體的開發(fā)帶來了極大的便利。提供了從底層的視頻采集到頂層的流媒體交互應用的解決方案,并且把應用程序從數(shù)據(jù)傳輸、硬件差別和同步機制等復雜問題中分離出來。其整體架構如下圖所示: DriectShow系統(tǒng)架構 COM組件DirectShow是基于COM的流媒體處理的開發(fā)包。COM是一種跨應用和語言共享的二進制代碼的方法,它是個開放的組件標準,具有很強的擴充和擴展能力。其優(yōu)點如下:(1) 可以將系統(tǒng)中的組件用新的替換掉,以便隨時進行系統(tǒng)的升級和定制。(2) 可以方便的將應用系統(tǒng)擴展到網(wǎng)絡環(huán)境中。 (3) 可以在多個應用系統(tǒng)中重復利用同一個組件。 (4) COM組件與語言和平臺無關。 Filter概述及連接濾波器Filter是一個COM組件,是DirectShow中最基本的元件,DirectShow提供了標準濾波器,亦可自定義。濾波器主要分為以下幾種類型:(1)源濾波器(2)變換濾波器(3)提交濾波器。濾波器之間通過輸出引腳(OutPin)和輸入(InputPin)引腳之間連接來進行數(shù)據(jù)傳輸,所有的濾波器連接起來形成濾波器鏈表即Filter Graph Manager。 數(shù)據(jù)流的傳輸過程如下圖所示: 數(shù)據(jù)傳輸流動過程 濾波器鏈表管理器在DirectShow中,使用濾波器鏈表管理器來控制濾波器鏈表中的所有濾波器,它也是COM形式的。它通過使用迭代的方法將各個濾波器連接起來建立濾波器鏈表。 最重要的是它提供了一系列的接口給應用程序,比如IMediaControl(控制數(shù)據(jù)流)、IMediaEventEx(處理濾波器鏈表事件)、IBasicAudio(控制音頻流的音量和平衡)等,使得應用程序方便、實時的控制、改變?yōu)V波器鏈表中的狀態(tài),以達到用戶想要的要求和效果。 濾波器鏈表中數(shù)據(jù)傳輸濾波器之間傳遞的數(shù)據(jù)內容不是直接指向內存塊的指針,而是一個管理內存的COM對象,稱之為媒介樣品(MediaSample),它由一個叫做(分配器)Allocator的COM對象來創(chuàng)建和管理。 濾波器、媒介樣品和分配器三者之間的關系如下圖所示: 分配器、媒介樣品和濾波器之間的關系DirectShow為數(shù)據(jù)在濾波器鏈表中傳輸定義了兩種機制:(1)推模式(Push Model):上一級濾波器將生成的數(shù)據(jù)提交給下一級濾波器,下一級被動的接收數(shù)據(jù),依次進行傳遞。 (2)拉模式(Pull Model):下一級濾波器向上一級濾波器請求數(shù)據(jù),上一級濾波器才傳送數(shù)據(jù)給它,依次進行傳遞。 事件通知機制DirectShow中的事件通知機制和Windows中的消息機制非常類似,各種濾波器,濾波器鏈表管理器都是通過事件通知的方式和應用程序進行交互、通信的。 比如多媒體文件的播放、暫停、停止等狀態(tài)變化都是通過此方式通知應用程序,應用程序自定義響應函數(shù)來處理各種事件。在本軟件中,響應最多的是多媒體文件播放結束事件通知。 具體實現(xiàn)過程:(1) 自定義濾波器鏈表通知給指定窗口消息 define WM_GRAPHNOTIFY (WM_USER + 20)(2)設置消息通知到指定窗口 m_pFilterGraphSetNotifyWindow(thisGetSafeHwnd())。 (3)自定義響應函數(shù)中解析事件(回調函數(shù)) pEventGetEvent(amp。eventCode,amp。eventParam1,amp。eventParam2,INFINITE)(4)響應操作 Skin++皮膚庫概述 Skin++簡介Skin++,采用獨特的軟件界面開發(fā)技術,讓原本復雜繁瑣的界面編程變得輕松自如,只需要在您的程序中添加一句代碼,Skin++就能讓您的界面煥然一新,并擁有多種主題風格和色調的動態(tài)切換功能。 Skin++特性(1)支持Windows系統(tǒng)對話框與控件。(2)支持廣泛的開發(fā)工具。(3)皮膚資源海量。 Skin++換膚流程(1) 應用程序啟動,加載Skin++庫。(2) 執(zhí)行Skin++加載皮膚文件API函數(shù)。(3) 應用程序退出,卸載Skin++庫。3 系統(tǒng)需求分析 系統(tǒng)業(yè)務需求此軟件是基于DirectShow的多媒體播放器,主要的業(yè)務需求是正確播放不同格式的音頻和視頻文件。 系統(tǒng)數(shù)據(jù)需求此軟件的數(shù)據(jù)需需求主要為播放器接收到的數(shù)據(jù)源,此處包括mpwma、flac等