流媒體視頻點(diǎn)播系統(tǒng)畢業(yè)論文_第1頁
流媒體視頻點(diǎn)播系統(tǒng)畢業(yè)論文_第2頁
流媒體視頻點(diǎn)播系統(tǒng)畢業(yè)論文_第3頁
流媒體視頻點(diǎn)播系統(tǒng)畢業(yè)論文_第4頁
流媒體視頻點(diǎn)播系統(tǒng)畢業(yè)論文_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

PAGE學(xué)校代碼:學(xué)號(hào):學(xué)校代碼:學(xué)號(hào):本科畢業(yè)設(shè)計(jì)說明書(題題目:流媒體點(diǎn)播系統(tǒng)學(xué)生姓名:學(xué)院:系別:專業(yè):班級(jí):指導(dǎo)教師:二〇一四年六月內(nèi)蒙古工業(yè)大學(xué)本科畢業(yè)設(shè)計(jì)說明書摘要隨著生活水平的提高,互聯(lián)網(wǎng)越發(fā)成為人們生活的重要組成部分。上網(wǎng)看電影和玩游戲是主要的網(wǎng)絡(luò)娛樂的重要分支,數(shù)據(jù)表明該類需求比重在未來將長(zhǎng)時(shí)間持續(xù)增長(zhǎng)。在當(dāng)今多媒體時(shí)代,以往電視機(jī)模式(運(yùn)營(yíng)商方主動(dòng)播放,客戶被動(dòng)接收)已經(jīng)不再能夠滿足用戶的需求,用戶希望能根據(jù)自身喜歡,選擇性對(duì)視頻內(nèi)容進(jìn)行觀看。寬帶VOD視頻點(diǎn)播技術(shù)因良好的人機(jī)交互性和流媒體傳輸技術(shù)倍受教育、娛樂等行業(yè)青睞。隨著互聯(lián)網(wǎng)的迅速崛起,C/S結(jié)構(gòu)的系統(tǒng)可以在任何一臺(tái)的計(jì)算機(jī)上使用,系統(tǒng)的部署和維護(hù)只是在服務(wù)器上進(jìn)行,這樣的模式既能減少管理的成本,更重要的是它能很方便的實(shí)現(xiàn)用戶與系統(tǒng)的交互,更快地響應(yīng)用戶信息交互請(qǐng)求。本文從視頻點(diǎn)播系統(tǒng)的基本概念和流媒體技術(shù),實(shí)時(shí)網(wǎng)絡(luò)傳輸協(xié)議等方面講述了視頻點(diǎn)播系統(tǒng)的設(shè)計(jì)原理、軟件結(jié)構(gòu)和設(shè)計(jì)實(shí)現(xiàn),采用C/S模式開發(fā)一個(gè)方便易用的視頻點(diǎn)播系統(tǒng)。本視頻點(diǎn)播系統(tǒng)基于MFC編程思想,在微軟VisualC++6.0的開發(fā)平臺(tái)上設(shè)計(jì),實(shí)現(xiàn)了點(diǎn)播服務(wù)器端和客戶端的相關(guān)功能。在服務(wù)器端實(shí)現(xiàn)用戶視頻文件的添加、刪除、修改、顯示等功能??蛻舳酥饕獙?shí)現(xiàn)服務(wù)器端視頻的查找、下載、播放等功能。采用基本的Access數(shù)據(jù)庫(kù),易于實(shí)現(xiàn),方便對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理。關(guān)鍵字:流媒體;視頻點(diǎn)播;C/S模式AbstractWiththeimprovementoflivingstandards,theInternetincreasinglybecomeanimportantpartofpeople'slife.Watchingmoviesandplayingonlinegamesisanimportantbranchofthemainonlineentertainment,datashowthatthiskindofdemandwillbesustainedgrowthforalongtimeinthefuture.Intoday'smultimediaera,pasttheTVmodel(operatorsideplayactively,passivereceivingcustomer)arenolongerabletomeettheneedsofusers,usershopetobeabletoaccordingtotheirownlikes,selectivitytowatchthevideocontent.WiththerapidriseoftheInternet,theC/Sstructureofthesystemcanbeusedonanyofthecomputer,deploymentandmaintenanceofsystemwasdoneontheserver,thismodelcannotonlyreducethecostofmanagement,moreimportantisthatitcanbeveryconvenientforuserinteractionwiththesystem,fasterresponsetoauserinteractiveinformationrequest.Thisarticlefromthebasicconceptofvideoondemandsystemandstreamingmediatechnology,real-timenetworktransmissionprotocolaspectsaboutthedesignofvideoondemandsystemprinciple,softwarestructureanddesign,usingC/Smodetodevelopaconvenientandeasytousevideoondemandsystem.Thisvideoondemandsystemmainlyimplementstheclientandserverrelatedfunctions.Clientimplementationmainservervideosearch,download,play,etc.Becausethissystemisasmallsystem,weadoptthebasicAccessdatabase,easytoimplement,easytomanagedatabase.Keywords:Streamingmedia;Videoondemand.C/Smode目錄TOC\o"1-3"\h\z\u引言 1第一章系統(tǒng)簡(jiǎn)介 21.1流媒體相關(guān)概念 21.2流媒體傳輸相關(guān)原理 21.3VOD視頻點(diǎn)播概念 31.4VOD視頻點(diǎn)播系統(tǒng)構(gòu)成 3第二章開發(fā)環(huán)境及工具介紹 52.1VisualC++6.0 52.1.1VisualC++6.0 52.1.2MFC編程框架介紹 52.2數(shù)據(jù)庫(kù)平臺(tái) 52.3系統(tǒng)運(yùn)行環(huán)境 6第三章系統(tǒng)分析與設(shè)計(jì) 73.1系統(tǒng)核心角色與功能 83.2系統(tǒng)界面 93.3軟件的基本架構(gòu) 103.4軟件的系統(tǒng)架構(gòu) 103.5系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì) 11第四章系統(tǒng)實(shí)現(xiàn) 134.1服務(wù)端界面實(shí)現(xiàn) 134.1.1DataGrid控件 174.1.2DataGrid控件的使用 174.2客戶端界面實(shí)現(xiàn) 184.3數(shù)據(jù)庫(kù)的訪問和操作 194.4網(wǎng)絡(luò)通信 23第五章系統(tǒng)測(cè)試 275.1功能測(cè)試 27結(jié)論 28參考文獻(xiàn) 29謝辭 30PAGE30引言隨著人們生活水平的普遍提高,互聯(lián)網(wǎng)在人們的生活中所占的地位也越來越高,所以人們利用網(wǎng)絡(luò)傳輸圖片、語音和視頻信息的需求也越來越大。音視頻文件存儲(chǔ)時(shí)所占的體積一般都很龐大。雖然網(wǎng)絡(luò)的傳輸速度在不斷的提高,但是鑒于巨大的需求,網(wǎng)絡(luò)帶寬還是十分有限的,花幾分鐘甚至更長(zhǎng)的時(shí)間來下載一個(gè)音頻或者視頻文件,是一件很讓人痛苦的事。但隨著流媒體技術(shù)的出現(xiàn),在一定的程度上使得網(wǎng)絡(luò)傳輸音視頻信息比較緩慢的情況得到明顯的改善。傳統(tǒng)的音視頻文件的播放需要完全下載后才能播放,要下載一個(gè)文件需要花費(fèi)少則幾分鐘多則數(shù)小時(shí)。當(dāng)時(shí)如果采用流媒體傳輸技術(shù),就可實(shí)現(xiàn)數(shù)據(jù)的流式傳輸。使用流媒體技術(shù),服務(wù)器端將聲音、影像或者動(dòng)畫連續(xù)且不間斷的傳送給客戶端,因此用戶想要觀看就不必等到整個(gè)文件都下載完成,而只需經(jīng)過幾秒鐘或幾十秒鐘的啟動(dòng)緩沖就可以進(jìn)行觀看,文件的剩余部分還會(huì)繼續(xù)從服務(wù)器端繼續(xù)下載。因此,本文從流媒體點(diǎn)播系統(tǒng)的基本概念和流媒體技術(shù)特點(diǎn)、實(shí)時(shí)網(wǎng)絡(luò)傳輸協(xié)議等方面講述了該視頻點(diǎn)播系統(tǒng)的設(shè)計(jì)原理、軟件結(jié)構(gòu)和設(shè)計(jì)實(shí)現(xiàn)等過程,開發(fā)實(shí)現(xiàn)了一個(gè)基于方便易用服務(wù)端/客戶端模式的流媒體點(diǎn)播系統(tǒng)。第一章系統(tǒng)簡(jiǎn)介本文中主要論述的是流媒體視頻點(diǎn)播系統(tǒng),所以在本章對(duì)VOD流媒體視頻點(diǎn)播相關(guān)概念簡(jiǎn)單介紹以便于理解本文的后續(xù)內(nèi)容。1.1流媒體概念簡(jiǎn)介流媒體(StreamingMedia)指在數(shù)據(jù)網(wǎng)絡(luò)上按時(shí)間先后次序傳輸和播放的連續(xù)音/視頻數(shù)據(jù)流。流媒體技術(shù)是一種專門用于網(wǎng)絡(luò)多媒體信息傳播和處理的新技術(shù),該技術(shù)能夠在網(wǎng)絡(luò)上實(shí)現(xiàn)傳播和播放同時(shí)進(jìn)行的實(shí)時(shí)工作模式,相對(duì)于其他的一些音、視頻網(wǎng)絡(luò)傳輸和處理技術(shù),流媒體比較成熟和使用,目前已經(jīng)成為網(wǎng)上音、視頻(特別是實(shí)時(shí)音視頻)傳輸?shù)闹饕鉀Q方案。流媒體與常規(guī)視頻媒體之間的不同在于,流媒體可以邊下載邊播放?!傲鳌钡闹匾饔皿w現(xiàn)在可以明顯的節(jié)省時(shí)間,由于常規(guī)視頻媒體文件比較大,并且只能下載下來后才能播放,因此下載需要很長(zhǎng)的時(shí)間,妨礙了信息的流通。流媒體的應(yīng)用是近幾年來Internet發(fā)展的產(chǎn)物,廣泛應(yīng)用于:視頻廣播、視頻點(diǎn)播(VOD)、視頻監(jiān)視、遠(yuǎn)程教學(xué)、交互式游戲、視頻會(huì)議等。總之,目前基于流媒體的應(yīng)用形式很多,并且發(fā)展也非常快。1.2流媒體傳輸相關(guān)原理如果將音視頻文件的傳輸看作是一次接水的過程,那么過去的傳輸方式必須要等到一桶水接滿了才能使用它,但是這個(gè)等待的時(shí)間受到水流量的大小和桶的大小的影響。然而流式傳輸則是,把水頭龍打開,等待一小會(huì),水就會(huì)源源不斷地流出來,并且可以做到隨接隨用。從這個(gè)意義上看,用流媒體這個(gè)詞是還是非常形象的。順序流式傳輸和實(shí)時(shí)流式傳輸是流媒體技術(shù)的主要特征。順序流式傳輸是順序下載,在下載文件的同時(shí)用戶可觀看再線媒體,在給定時(shí)刻,用戶只能觀看已下載的那部分,而不能跳到還未下載的前頭部分,順序流式傳輸不象實(shí)時(shí)流式傳輸在傳輸期間根據(jù)用戶連接的速度做調(diào)整。這就意味著用戶在觀看媒體文件前,必須經(jīng)過延遲,對(duì)較慢的連接更是如此。它也不支持現(xiàn)場(chǎng)廣播,從某種意義上說,它是一種點(diǎn)播技術(shù)。實(shí)時(shí)流式傳輸指保證媒體信號(hào)帶寬與網(wǎng)絡(luò)連接配匹,使媒體可被實(shí)時(shí)觀看到。實(shí)時(shí)流需要專用的流媒體服務(wù)器與傳輸協(xié)議與HTTP流式傳輸不同。實(shí)時(shí)流式傳輸總是實(shí)時(shí)傳送,特別適合現(xiàn)場(chǎng)事件,也支持隨機(jī)訪問,用戶可快進(jìn)或后退以觀看前面或后面的內(nèi)容。視頻點(diǎn)播概念VOD(Video

On

Demand)即視頻點(diǎn)播的意思,它是一種可以按用戶需要點(diǎn)播節(jié)目的交互式視頻系統(tǒng)。視頻點(diǎn)播是一個(gè)用戶控制的視頻分配業(yè)務(wù),它允許每個(gè)用戶可以交互地訪問存儲(chǔ)在遠(yuǎn)程服務(wù)器上的媒體信息。隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,交互電視技術(shù)(ITV)、網(wǎng)絡(luò)視頻點(diǎn)播技術(shù)(VOD)等多媒體技術(shù)在網(wǎng)絡(luò)系統(tǒng)中或Internet/Intranet中的應(yīng)用進(jìn)入了一個(gè)新的里程。網(wǎng)絡(luò)多媒體技術(shù)的核心概念就是流(streaming)。1.4VOD視頻點(diǎn)播系統(tǒng)構(gòu)成VOD視頻點(diǎn)播系統(tǒng)一般是由視頻服務(wù)器和客戶端和瀏覽器端組成的。它們之間通過網(wǎng)絡(luò)通信系統(tǒng)建立連接。結(jié)構(gòu)圖如下:

服務(wù)端服務(wù)端客戶端網(wǎng)絡(luò)通信圖1-1VOD視頻點(diǎn)播系統(tǒng)結(jié)構(gòu)圖 該視頻點(diǎn)播系統(tǒng)的工作流程為:用戶用客戶端通過互聯(lián)網(wǎng),向服務(wù)器發(fā)出需求連接請(qǐng)求。如果客戶端的請(qǐng)求能夠到服務(wù)器并被服務(wù)器接收。一旦通過請(qǐng)求驗(yàn)證后,服務(wù)器會(huì)把服務(wù)器數(shù)據(jù)庫(kù)上的節(jié)目單返回給客戶端。用戶客戶端播放器上會(huì)顯示可點(diǎn)播節(jié)目,用戶選擇需要的節(jié)目后,服務(wù)器就從媒體數(shù)據(jù)庫(kù)服務(wù)器中取出相應(yīng)的媒體內(nèi)容數(shù)據(jù)流。最后通過網(wǎng)絡(luò)把數(shù)據(jù)流傳送給客戶端,客戶端用播放器播放。1、視頻點(diǎn)播服務(wù)器(Server)

視頻點(diǎn)播服務(wù)器是為視頻需求客戶提供持續(xù)且穩(wěn)定的音視頻數(shù)據(jù)流的設(shè)備。音視頻文件存儲(chǔ)在視頻服務(wù)器的存儲(chǔ)空間中,服務(wù)器端配置的硬盤大小決定了存儲(chǔ)的節(jié)目的量,例如以MPEG-2(1.5Mbps)格式存放150個(gè)小時(shí)的節(jié)目,需要80G左右的硬盤空間。

2、客戶端系統(tǒng)(Player)

客戶端是用戶與服務(wù)器之間建立連接并能夠進(jìn)行交互操作的平臺(tái)??蛻舨シ牌魑挥诳蛻舳?,是用戶根據(jù)自己需求點(diǎn)播節(jié)目的系統(tǒng)。它負(fù)責(zé)向服務(wù)器發(fā)送通信請(qǐng)求,獲得節(jié)目的相關(guān)信息,服務(wù)器能夠?qū)⒐?jié)目單顯示給客戶,由客戶來選擇和播放、所點(diǎn)播的節(jié)目。當(dāng)有很多客戶端同時(shí)收看同一節(jié)目卻不引起網(wǎng)絡(luò)擁塞,也不會(huì)降低音、視頻傳輸質(zhì)量。播放器的優(yōu)點(diǎn)有:便于操作,界面友好。第二章開發(fā)工具及系統(tǒng)運(yùn)行環(huán)境介紹軟件開發(fā)的語言有很多,但程序的開發(fā)只有找一個(gè)功能強(qiáng)大,易于掌握易用且適合自己的就可以了。本系統(tǒng)通過多種語言優(yōu)缺點(diǎn)的對(duì)比,我采用了VisualC++6.0的MFC應(yīng)用程序框架作為本系統(tǒng)開發(fā)語言,以Access數(shù)據(jù)庫(kù)作后臺(tái)數(shù)據(jù)支持。本章將中主要論述的是開發(fā)VOD流媒體視頻點(diǎn)播系統(tǒng)所使用的開發(fā)環(huán)境及開發(fā)工具,通過對(duì)開發(fā)環(huán)境及工具的介紹便于讀者深入了解本系統(tǒng)。VisualC++6.0簡(jiǎn)介2.1.1本系統(tǒng)采用VisualC++6.0作為后臺(tái)開發(fā)工具。VisualC++6.0是由美國(guó)的微軟公司推出的一個(gè)極其強(qiáng)大的Windows應(yīng)用程序開發(fā)平臺(tái)。VisualC++6.0不僅是一個(gè)C++的編譯器,而且是一個(gè)基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrateddevelopmentenvironment,IDE)。VisualC++6.0是由許多組件組成的,其中包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lassWizard等開發(fā)工具。這些組件通過一個(gè)名為DeveloperStudio的組件集成為一個(gè)優(yōu)秀的開發(fā)環(huán)境。2.1.2本系統(tǒng)的編寫使用了在VisualC++6.0平臺(tái)下的MFC編程框架。MFC全稱是MicrosoFoundationClasssLibrary我們稱之為微軟基礎(chǔ)類庫(kù),程序框架,封裝了絕大多數(shù)Win32API函數(shù),另外還分裝C++語法中的數(shù)據(jù)結(jié)構(gòu)。它是一種ApplicationFramework,隨著微軟VisualC++開發(fā)工具發(fā)布。基于框架編程,能夠提高工作效率,減少開發(fā)周期,節(jié)約開發(fā)成本,減少了軟件開發(fā)人員開發(fā)的工作量。該類庫(kù)提供了一組通用的并且可以重用的類庫(kù)供開發(fā)人員使用。大部分類均從CObject類直接或間接的派生,只有少部分類例外。MFC應(yīng)用程序的總體結(jié)構(gòu)通常由開發(fā)人員從MFC類派生的幾個(gè)類和一個(gè)CWinApp類對(duì)象(應(yīng)用程序?qū)ο螅┙M成。MFC提供了MFCAppWizard它能自動(dòng)的生成框架。數(shù)據(jù)庫(kù)平臺(tái)MFC程序能支持的數(shù)據(jù)庫(kù)有很多,因此我們得根據(jù)實(shí)際需求使用比較合理的數(shù)據(jù)庫(kù)。MicrosoftOfficeAccess是由微軟發(fā)布的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),在很多地方得到廣泛使用,例如小型企業(yè),大公司的部門。Access有強(qiáng)大的統(tǒng)計(jì)分析能力、數(shù)據(jù)處理,可以方便的進(jìn)行各類統(tǒng)計(jì)。并可以靈活設(shè)置統(tǒng)計(jì)的條件。Access用來開發(fā)軟件,其最大的優(yōu)點(diǎn)是:易學(xué)!非計(jì)算機(jī)專業(yè)的人員,也能夠很容易的學(xué)會(huì)。管理低成本滿足了那些從事企業(yè)管理工作的人員的對(duì)數(shù)據(jù)管理需要,通過軟件來規(guī)范同事、下屬的行為,推行其管理思想。本系統(tǒng)的數(shù)據(jù)庫(kù)方面,選用的是Access,原因是Access數(shù)據(jù)庫(kù)的學(xué)習(xí)極其簡(jiǎn)單,而且作為一個(gè)流媒體的視頻點(diǎn)播系統(tǒng),它不會(huì)像其它系統(tǒng)一樣需要很多表聯(lián)查的環(huán)境和條件那么多,大多數(shù)情況下都只是單表查詢,本系統(tǒng)將采用Access數(shù)據(jù)庫(kù)為系統(tǒng)提供數(shù)據(jù)管理。系統(tǒng)運(yùn)行環(huán)境系統(tǒng)的運(yùn)行環(huán)境要求為:1.硬件環(huán)境

目前,我們所開發(fā)的系統(tǒng)主要是一個(gè)演示系統(tǒng),因此,配置一般的計(jì)算機(jī)硬件就可以滿足系統(tǒng)需求。如果考慮到現(xiàn)實(shí)生活中的應(yīng)用和硬件價(jià)格的普遍降低,可以為本系統(tǒng)配置在較優(yōu)秀的服務(wù)器硬件,就能夠充分發(fā)揮本系統(tǒng)性能。

處理器:

IntelCOREi3

或更高

內(nèi)存:

4G(推薦)

硬盤空間:50GB

顯卡:

SVGA顯示適配器

2.軟件環(huán)境

系統(tǒng)體系:C/S(客戶端/服務(wù)器)

操作系統(tǒng):Windows2000/XP、Win7、Win8開發(fā)軟件:MicrosoftVisualC++6.0編程框架:MFC數(shù)據(jù)庫(kù):MSAccess數(shù)據(jù)庫(kù)系統(tǒng)分析為了能夠?qū)崿F(xiàn)本系統(tǒng)的各種功能,我們必須對(duì)整個(gè)系統(tǒng)的所有功能進(jìn)行詳細(xì)的分析。一個(gè)好的系統(tǒng)必須要有好的分析,因此本章我們將對(duì)本VOD流媒體視頻點(diǎn)播系統(tǒng)做出具體的分析。3.1系統(tǒng)核心角色與功能流媒體點(diǎn)播系統(tǒng)是一個(gè)電影等流媒體的網(wǎng)上下載和播放的系統(tǒng)。VOD流媒體視頻點(diǎn)播系統(tǒng)的服務(wù)器端需要實(shí)現(xiàn)的功能包括管理員登陸、處理客戶端請(qǐng)求以及音視頻媒體信息的管理等功能。具體來說,它包含系統(tǒng)管理中常見的登錄操作,視頻信息的顯示、插入、刪除,更新操作等。查看用戶信息查看用戶信息Admin增加媒體修改媒體信息刪除媒體瀏覽媒體信息重置用戶密碼用戶資費(fèi)調(diào)整圖3-1服務(wù)端功能圖CustomCustom客戶登陸客戶自助服務(wù)下載播放查找流媒體 圖3-2客戶端功能圖系統(tǒng)界面登陸界面對(duì)話框包括:用戶名稱標(biāo)簽、密碼標(biāo)簽、用戶名稱輸入框、密碼輸入框、登陸按鈕、取消按鈕。圖3-3登陸界面圖服務(wù)器端界面:自定義的工具欄按鈕(類型導(dǎo)航、視頻編輯、服務(wù)啟動(dòng)、服務(wù)停止)、樹控件,DataGrid控件、DlgVideo對(duì)話框(新建按鈕、插入按鈕、刪除按鈕、所屬類型組合框、視頻名稱輸入框、視頻描述輸入框等)。 圖3-4服務(wù)器端界面圖客戶端界面包括:WindowsMediaPlayer控件、樹控件。圖3-5客戶端端界面圖3.3軟件的基本架構(gòu) 1.媒體服務(wù)器——存放媒體Media數(shù)據(jù)。現(xiàn)實(shí)生活中每個(gè)音視頻媒體數(shù)據(jù)所占的內(nèi)存都很大,所以必須要有專門的媒體服務(wù)器來存放這些信息。媒體服務(wù)器必須有很大的內(nèi)存空間,其中全部存放按類型劃分的媒體數(shù)據(jù)。 2.數(shù)據(jù)庫(kù)服務(wù)器——存放媒體清單、用戶數(shù)據(jù)。要管理媒體服務(wù)其中的大量數(shù)據(jù),我們需要數(shù)據(jù)庫(kù)服務(wù)器來幫助我們管理這些數(shù)據(jù)。數(shù)據(jù)庫(kù)中存放媒體的詳細(xì)信息和用戶的信息,方便用戶和管理員操作和查詢。3.VOD服務(wù)器管理——后臺(tái)管理功能、包括媒體管理、用戶管理等。本系統(tǒng)采用的是C/S架構(gòu),我們的服務(wù)器軟件。服務(wù)器對(duì)CPU的要求配置將比較高,因?yàn)槲覀兊囊慌_(tái)服務(wù)器,要對(duì)應(yīng)成千上萬的客戶端訪問。4.VOD客戶端——登陸媒體服務(wù)器,可以下載數(shù)據(jù)和信息,也可以對(duì)媒體數(shù)據(jù)進(jìn)行播放。3.4軟件的系統(tǒng)架構(gòu)VOD服務(wù)器就是Server端,它是在本地維護(hù)各種媒體信息,也提供客戶端訪問處理客戶端的各種請(qǐng)求。它可以訪問VOD數(shù)據(jù)庫(kù)服務(wù)器,為了確保數(shù)據(jù)庫(kù)安全,通產(chǎn)客戶端不可以訪問VOD數(shù)據(jù)庫(kù)服務(wù)器。涉及到訪問數(shù)據(jù)庫(kù)的操作,客戶端都需要向服務(wù)器端發(fā)送請(qǐng)求,這樣數(shù)據(jù)庫(kù)安全就得到了一定保證??蛻舳瞬シ牌骺梢詮木W(wǎng)站上下載安裝,用戶安裝后供給用戶根據(jù)進(jìn)行視頻點(diǎn)播。VOD服務(wù)器VOD服務(wù)器VOD數(shù)據(jù)庫(kù)服務(wù)器客戶端1客戶端2客戶端3播放器1播放器2播放器3圖3-6系統(tǒng)架構(gòu)圖3.5系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)本系統(tǒng)數(shù)據(jù)庫(kù)結(jié)構(gòu)的設(shè)計(jì)是在完成了系統(tǒng)描述各種數(shù)據(jù)之間的相互依賴關(guān)系和信息已經(jīng)分類的情況下,然后將各種信息轉(zhuǎn)換成對(duì)應(yīng)的數(shù)據(jù)項(xiàng)定義表。數(shù)據(jù)項(xiàng)定義表的作用就是定義每個(gè)表的表名、表中字段的名稱、數(shù)據(jù)類型的長(zhǎng)度和是否允許空,但是在不同的數(shù)據(jù)庫(kù)中,數(shù)據(jù)類型的表示符號(hào)和長(zhǎng)度是有所差別。本系統(tǒng)的數(shù)據(jù)庫(kù)中需要建的表詳見如下:1、在數(shù)據(jù)庫(kù)中建立用戶表,用戶表包括了用戶的編號(hào)、角色類別編號(hào)、用戶名、性別、密碼、郵件地址等信息,詳見表3-1用戶表。表3-1用戶信息表列名數(shù)據(jù)類型可否為空說明IdintNotnull自動(dòng)編號(hào)UserNamenvarchar(16)Null用戶名Pwdnvarchar(64)Notnull密碼2、在數(shù)據(jù)庫(kù)里建立一個(gè)媒體類型表,其中包括類型ID、類型名稱、類型描述。媒體類型表詳見表3-2評(píng)論表。表3-2評(píng)論表列名數(shù)據(jù)類型可否為空說明IdintNOTNULL自動(dòng)編號(hào)typeNamenvarchar(128)NULL媒體類型typedespnvarchar(128)NULL媒體類型描述3、在數(shù)據(jù)庫(kù)里建立一個(gè)媒體信息表,其中字段包括編號(hào)、媒體信息名、媒體信息描述、媒體路徑、類型ID等基本信息,詳見表4-3視頻信息表。表3-3視頻信息表列名數(shù)據(jù)類型可否為空說明IdintNOTNULL自動(dòng)編號(hào)VideoNamenvarchar(64)NULL媒體名稱VideoDespnvarchar(128)NOTNULL媒體描述VideoPathnvarchar(64)NULL媒體類型TypeIdnvarchar(50)NULL類型ID系統(tǒng)實(shí)現(xiàn)系統(tǒng)實(shí)現(xiàn)是在系統(tǒng)分析、系統(tǒng)設(shè)計(jì)的基礎(chǔ)上,將系統(tǒng)設(shè)計(jì)的每一個(gè)細(xì)節(jié),用計(jì)算機(jī)語言(或開發(fā)工具)完整地表達(dá)出來,以便在計(jì)算機(jī)上實(shí)現(xiàn)該系統(tǒng)。新系統(tǒng)是建設(shè)的最終目標(biāo),是能在計(jì)算機(jī)上運(yùn)行的程序。本章主要介紹系統(tǒng)功能的實(shí)現(xiàn)。4.1服務(wù)器端界面實(shí)現(xiàn) 服務(wù)器端界面主要實(shí)現(xiàn)內(nèi)容:自定義的工具欄按鈕(類型導(dǎo)航、視頻編輯、服務(wù)啟動(dòng)、服務(wù)停止)、樹控件,DataGrid控件、DlgVideo對(duì)話框(新建按鈕、插入按鈕、刪除按鈕、所屬類型組合框、視頻名稱輸入框、視頻描述輸入框等) 服務(wù)器端的實(shí)現(xiàn)具體步驟如下:1.服務(wù)器端的創(chuàng)建使用MFC單文檔應(yīng)用程序,文檔視架構(gòu)的支持,其中View繼承自CFormView。2.在工程中,添加類vc界面的工具條。將sizecbar.hsizecbar.cppscbarg.h、scbarg.cpp四個(gè)文件復(fù)制到工程thirdpart目錄下。在菜單Project->Addtoproject->Files將四個(gè)文件加入工程中,此時(shí)在ClassView中將出現(xiàn)了一個(gè)稱為CCoolBar的類。在stdafx.h文件中加上浮動(dòng)時(shí)候替換原來TOOLWINDOWS的框架#define_SCB_REPLACE_MINIFRAME#include"thirdpart\sizecbar.h"#include"thirdpart\scbarg.h"為CMainFrame增加成員變量:CCoolBarm_LeftCtrBar;//左面的控制窗口CCoolBarm_BottomCtrBar;//最下面的控制窗口創(chuàng)建和停靠工具欄:if(!m_LeftCtrBar.Create(_T("導(dǎo)航"),this,CSize(230,260),TRUE,123))if(!m_BottomCtrBar.Create(_T編輯"),this,CSize(200,170),TRUE,124))m_LeftCtrBar.EnableDocking(CBRS_ALIGN_ANY);//左面工具條能夠??縨_BottomCtrBar.EnableDocking(CBRS_ALIGN_ANY);//底部工具條能夠??緿ockControlBar(&m_BottomCtrBar,AFX_IDW_DOCKBAR_BOTTOM);//??吭诘撞緿ockControlBar(&m_LeftCtrBar,AFX_IDW_DOCKBAR_LEFT);//??吭谧筮?.該ControlBar在浮動(dòng)的時(shí)候頂部的把手會(huì)消失,變成了普通的ToolWindow類型的標(biāo)題欄。為了避免這種情況,我們需要在CMainFrame::OnCreate()中,在EnableDocking()后加入:#ifdef_SCB_REPLACE_MINIFRAMEm_pFloatingFrameClass=RUNTIME_CLASS(CSCBMiniDockFrameWnd);#endif//_SCB_REPLACE_MINIFRAME并在stdafx.h中加上#define_SCB_REPLACE_MINIFRAME,在兩個(gè)頭文件前面4.設(shè)置工具欄上按鈕的功能和狀態(tài),分別添加兩種消息:voidCMainFrame::OnToolbarNavigate(){ ShowControlBar(&m_LeftCtrBar,!m_LeftCtrBar.IsVisible(),FALSE);}voidCMainFrame::OnToolbarEdit(){ShowControlBar(&m_BottomCtrBar,!m_BottomCtrBar.IsVisible(),FALSE);}5.設(shè)置皮膚(使用動(dòng)態(tài)庫(kù))拷貝skin目錄到當(dāng)前的工程中(皮膚文件、h文件、dll文件、lib文件),在項(xiàng)目的頭文件stdafx.h中包含頭文件,引入lib文件#include"./skin/SkinMagicLib.h"http://包含頭文件#pragmacomment(lib,"./skin/SkinMagicTrial.lib")//引入皮膚庫(kù)//加載皮膚VERIFY(1==InitSkinMagicLib(AfxGetInstanceHandle(),NULL,NULL));//初始化皮膚庫(kù)VERIFY(1==LoadSkinFile(_T("./skin/xpsteel.smf")));//加載皮膚VERIFY(1==SetWindowSkin(m_pMainWnd->m_hWnd,_T("MainFrame")));//將皮膚設(shè)置到窗口上VERIFY(1==SetDialogSkin(_T("Dialog")));//將皮膚設(shè)置到對(duì)話框上6.在左邊的控制窗口中添加樹控件:在CMainFrame中添加成員變量m_wndTree,在CMainFrame的OnCreate()中動(dòng)態(tài)創(chuàng)建樹控件。具體代碼如下: m_wndTree.Create(WS_CHILD,CRect(0,0,0,0),&m_LeftCtrBar,100)) //樹控件的創(chuàng)建 m_wndTree.ModifyStyleEx(0,WS_EX_CLIENTEDGE); //初始化樹控件 InitTypeTreeCtrl();樹控件的初始化,訪問數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)中得到控件類型代碼如下:voidCMainFrame::InitTypeTreeCtrl(){CMainFrame*pWnd=(CMainFrame*)AfxGetMainWnd();//定義訪問視頻類型類的對(duì)象CTypeManagertypeMgr(&pWnd->m_adoConnection);CList<CType,CType>lstTypes;//獲取視頻類型的信息保存到鏈表listTypes中typeMgr.GetAllType(&lstTypes);CTypetype;//插入樹控件的根節(jié)點(diǎn)HTREEITEMhRoot=m_wndTree.InsertItem(_T("所有類型"));for(inti=0;i<lstTypes.GetCount();i++){ //從鏈表中獲取視頻類型的數(shù)據(jù) type=lstTypes.GetAt(lstTypes.FindIndex(i)); //將視頻名稱作為樹節(jié)點(diǎn)名稱插入到樹控件 HTREEITEMhItem=m_wndTree.InsertItem(type.strTypeName,hRoot); //將視頻類型的ID設(shè)置為節(jié)點(diǎn)的附加數(shù)據(jù) m_wndTree.SetItemData(hItem,type.nTypeID);}/設(shè)置樹節(jié)點(diǎn)高度m_wndTree.SetItemHeight(20);m_wndTree.Expand(hRoot,TVE_EXPAND);//展開樹節(jié)點(diǎn)}7.在底部的控制窗口中添加對(duì)話框:添加對(duì)話框資源,設(shè)置風(fēng)格style:child;border:none,雙擊資源窗口生成對(duì)話框類CDlgVideo,在CMainFrame的OnCreate()中創(chuàng)建和顯示對(duì)話框。具體代碼如下://底部的工具條中添加對(duì)話框 if(!m_dlgVideo.Create(IDD_DLG_VIDEO,&m_BottomCtrBar)) //對(duì)話框的創(chuàng)建 m_dlgVideo.ShowWindow(SW_SHOW);//對(duì)話框的顯示m_dlgVideo.InitVideoTypeCtrl();//組合框數(shù)據(jù)初始化8.在CFormView視圖中添加MSDataGrid控件(COM組件)可以通過綁定設(shè)置數(shù)據(jù)、、屬性方便操作。CDataGrid、CColumnsCColunm添加到工程。為控件綁定成員變量m_wndGrid,控件鋪滿窗口的客戶區(qū),給視圖添加WM_SIZE的消息處理。voidCVODServerView::OnSize(UINTnType,intcx,intcy){ CFormView::OnSize(nType,cx,cy); CRectrcClient; GetClientRect(&rcClient);//獲取客戶區(qū)大小 CWnd*pWnd=GetDlgItem(IDC_DATAGRID); //設(shè)置控件的大小 if(pWnd) pWnd->MoveWindow(0,0,rcClient.Width(),rcClient.Height()); if(m_wndGrid.GetSafeHwnd()) //去掉控件的滾動(dòng)條m_wndGrid.SetScrollBars(0);}4.1.1DataGrid控件簡(jiǎn)介DataGrid控件是一個(gè)多二維的數(shù)據(jù)網(wǎng)格,用來以表格形式顯示數(shù)據(jù)源數(shù)據(jù)和以列為單位,設(shè)定各列的操作類型。網(wǎng)格中的每一行表示數(shù)據(jù)源中的一個(gè)記錄,每一列表示數(shù)據(jù)源中的個(gè)字段(列)。從顯示格式和操作控制能力看,DataGrid控件支持選擇、編輯、刪除、分頁顯示和排序等功能。可在設(shè)計(jì)時(shí)使用“屬性生成器”對(duì)話框進(jìn)行大量的自定義設(shè)置,生成顯示和編輯數(shù)據(jù)的列(包含“編輯”、“更新”、“取消”和“選擇”按鈕的列、自定義按鈕的列以及模板列)。4.1.2DataGrid控件的使用(1)首先通過DataSource屬性指定數(shù)據(jù)源;(2)指定要操作的數(shù)據(jù)表及關(guān)鍵字段;(3)DataGrid控件的外觀顯示布局設(shè)置(包括顏色、字體、字號(hào)、邊框、分頁、排序、不同列的顯示與操作類型等);(4)用BindDataGrid()方法綁定數(shù)據(jù);4.2客戶端界面實(shí)現(xiàn)客戶端界面主要實(shí)現(xiàn)的內(nèi)容:WindowsMediaPlayer控件、樹控件。當(dāng)用戶通過登錄界面進(jìn)入客戶端界面時(shí),客戶端會(huì)向服務(wù)器端發(fā)送請(qǐng)求,服務(wù)器端查詢數(shù)據(jù)庫(kù),返回給數(shù)據(jù)庫(kù)所有類型下的媒體名稱。客戶端再把這些數(shù)據(jù)添加到樹控件上,讓用戶通過點(diǎn)擊獲取媒體信息。服務(wù)端給客戶端傳回?cái)?shù)據(jù)流,客戶端就可以使用自帶的WindowsMediaPlay播放器播放。樹控件創(chuàng)建和添加:樹控件創(chuàng)建代碼如下:if(!m_wndTree.Create(WS_CHILD|WS_VISIBLE|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT,CRect(0,0,0,0),&m_LeftCtrBar,100))m_wndTree.ModifyStyleEx(0,WS_EX_CLIENTEDGE)//樹控件風(fēng)格WindowsMediaPlayerActiveX控件介紹:何為MediaPlaye控件?說白了就是一個(gè)精簡(jiǎn)版的WindowsMediaPlayer,只不過是不能自行播放而已,它是WindowsMediaPlayer的核心。WindowsMediaPlayer是一個(gè)功能強(qiáng)大的多媒體播放器,采用它的核心所制作出來的播放器可以播放除死敵REAL格式外的幾乎所有格式的多媒體文件。使用WindowsMediaPlayer軟件開發(fā)工具包(SDK),您可以擴(kuò)展獨(dú)立Player的功能,并將播放功能嵌入到自己的應(yīng)用程序中。您可以使用其播放功能,并可決定在應(yīng)用程序中是使用Player的現(xiàn)有用戶界面,還是創(chuàng)建自己的用戶界面。本客戶端MediaPlayer控件的使用過程:添加WindowsMediaPlayer控件并為其綁定變量:CWMPPlayer4m_wndPlayer。讓MediaPlayer隨著客戶端大小的改變而改變代碼如下:voidCVODClientView::OnSize(UINTnType,intcx,intcy){CFormView::OnSize(nType,cx,cy);CRectrcClient;GetClientRect(&rcClient);//獲得客戶端矩形的大小if(m_wndPlayer.GetSafeHwnd()){m_wndPlayer.MoveWindow(0,0,rcClient.Width(),rcClient.Height();}//讓MediaPlayer隨著客戶端改變大小}MediaPlayer播放器效果圖如下:圖4-1MediaPlayer播放器效果圖4.3登陸界面實(shí)現(xiàn)登陸界面主要處理的是當(dāng)用戶輸入用戶名和密碼之后點(diǎn)擊登陸按鈕所要做處理。當(dāng)用戶點(diǎn)擊登陸后,客戶端將會(huì)被用戶名和密碼發(fā)送給服務(wù)器端,服務(wù)端查詢數(shù)據(jù)庫(kù),返回結(jié)果給客戶端,如果驗(yàn)證成功,進(jìn)入客戶端主界面,否則會(huì)提示用戶名稱或密碼錯(cuò)誤,請(qǐng)重新登錄。登陸驗(yàn)證的代碼如下:voidCDlgLogin::OnOK(){UpdateData(TRUE);//刷新控件的值到對(duì)應(yīng)的變量 if(!m_clientSock.Login(m_strUserName,m_strPwd)) {MessageBox("用戶名稱或密碼錯(cuò)誤,請(qǐng)重新登錄!"); return; } CDialog::OnOK();}客戶端處理登陸的函數(shù),它向服務(wù)端發(fā)送登陸請(qǐng)求,服務(wù)端驗(yàn)證用戶名和密碼如果驗(yàn)證成功,就返回成功,客戶端進(jìn)入主界面。BOOLCClientSocket::Login(LPCSTRpszName,LPCSTRpszPwd){VODLOGINlogin={0};//登陸數(shù)據(jù)結(jié)構(gòu)體strcpy(login.szUserName,pszName);strcpy(login.szPassword,pszPwd);SendData(VODNETCMD_LOGIN,&login,sizeof(login));//給服務(wù)器發(fā)送要登陸的用戶的用戶名和密碼VODHEADERheader={0};RecvData(&header,sizeof(header));VODLOGINRETloginret={0};RecvData(&loginret,sizeof(loginret)); //接受到服務(wù)器端返回的數(shù)據(jù):登陸驗(yàn)證是否成功returnloginret.dwSuccess;}4.3數(shù)據(jù)庫(kù)的訪問和操作數(shù)據(jù)庫(kù)的訪問主要用在VODServer端,基本上它的每一項(xiàng)操作都會(huì)涉及到數(shù)據(jù)庫(kù)的訪問和操作。在服務(wù)端打開時(shí)樹控件初始化、DataGrid控件的初始化、媒體信息的添加刪除更新都會(huì)用到數(shù)據(jù)庫(kù)的訪問和操作。如果客戶端需要訪問都是通過向服務(wù)器端發(fā)送相應(yīng)的命令,服務(wù)器再訪問,最后返回給客戶端結(jié)果。VODServer對(duì)數(shù)據(jù)庫(kù)的訪問和操作如下:1.視頻數(shù)據(jù)的顯示,使用DataGrid組件顯示,在CMainFrame類中,添加成員變量CAdoConnectionm_adoConnection。并且在構(gòu)造函數(shù)中,連接數(shù)據(jù)庫(kù)m_adoConnection.ConnectAccess("../../DB/VODDB.mdb")。在視圖類View中,添加成員變量CAdoRecordSetm_adoRecordSet。在視圖類的OnInitialUpdate函數(shù)中,添加用于綁定記錄集與datagrid代碼。在視圖類中添加BindDataGrid函數(shù)并實(shí)現(xiàn)代碼如下:voidCVODServerView::OnInitialUpdate(){ CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); //數(shù)據(jù)綁定 CMainFrame*pWnd=(CMainFrame*)AfxGetMainWnd(); m_adoRecordSet.SetAdoConnection(&pWnd->m_adoConnection); m_adoRecordSet.SetCursorLocation(); CStringstrSql= "selectvideoInfo.idas編號(hào),videoNameas視頻名稱,videoDespas視頻描述,videoPathas視頻路徑,typeNameas所屬類型fromvideoInfo,TypeInfowherevideoInfo.typeid=TypeInfo.id"; m_adoRecordSet.Open(strSql,adCmdText);//執(zhí)行sql語句 BindDataGrid(&m_adoRecordSet);//綁定DataGrid控件}voidCVODServerView::BindDataGrid(CAdoRecordSet*pSet){//綁定DataGrid控件m_wndGrid.SetRefDataSource((LPUNKNOWN)m_adoRecordSet.GetRecordset());//設(shè)置數(shù)據(jù)源m_wndGrid.Refresh();//刷新}2.在不同的控件中顯示視頻類型信息(樹控件、組合框控件)。樹控件初始化代碼:voidCMainFrame::InitTypeTreeCtrl(){ CMainFrame*pWnd=(CMainFrame*)AfxGetMainWnd();//定義訪問視頻類型類的對(duì)象 CTypeManagertypeMgr(&pWnd->m_adoConnection); CList<CType,CType>lstTypes; //獲取視頻類型的信息保存到鏈表listTypes中 typeMgr.GetAllType(&lstTypes); CTypetype; //插入樹控件的根節(jié)點(diǎn) HTREEITEMhRoot=m_wndTree.InsertItem(_T("所有類型")); for(inti=0;i<lstTypes.GetCount();i++) { //從鏈表中獲取視頻類型的數(shù)據(jù) type=lstTypes.GetAt(lstTypes.FindIndex(i)); //將視頻名稱作為樹節(jié)點(diǎn)名稱插入到樹控件 HTREEITEMhItem=你_wndTree.InsertItem(type.strTypeName,hRoot); //將視頻類型的ID設(shè)置為節(jié)點(diǎn)的附加數(shù)據(jù) m_wndTree.SetItemData(hItem,type.nTypeID); } //設(shè)置樹節(jié)點(diǎn)高度 m_wndTree.SetItemHeight(20); m_wndTree.Expand(hRoot,TVE_EXPAND);}3.實(shí)現(xiàn)在對(duì)話框中對(duì)視頻數(shù)據(jù)的增刪改操作,重新顯示操作后的數(shù)據(jù)。"新建"、"插入"、"刪除"按鈕添加消息處理函數(shù)。A."新建"的實(shí)現(xiàn):清空所有控件數(shù)據(jù),修改按鈕的文本。實(shí)現(xiàn)代碼如下:voidCDlgVideo::OnNew(){ClearCtrlData(); //按鈕名稱由更新變?yōu)椴迦?m_wndOK.SetWindowText("插入");}B."插入"、"更新"的實(shí)現(xiàn):根據(jù)視頻的ID是否為空,判斷是插入還是更新操作,操作完成后調(diào)用BindDataGrid重新顯示數(shù)據(jù)。voidCDlgVideo::OnOk(){ CMainFrame*pWnd=(CMainFrame*)AfxGetMainWnd(); CVideoManagervideoMgr(&pWnd->m_adoConnection);//創(chuàng)建CVideoManager類的對(duì)象 UpdateData(TRUE);//更新控件上的值 if(m_strVideoType=="") { MessageBox("請(qǐng)選擇視頻類型!"); return; } CVideov; v.strVideoName=m_strVideoName; v.strVideoDesp=m_strVideoDesp; v.strVideoPath=m_strVideoPath; intnCurSel=m_cboType.GetCurSel(); v.nTypeid=m_cboType.GetItemData(nCurSel); //獲取當(dāng)前的文本 if(m_strVideoID=="") { //執(zhí)行插入操作videoMgr.InsertVideo(v); //清空原有數(shù)據(jù)ClearCtrlData(); } else { v.nVideoID=atoi(m_strVideoID); //執(zhí)行更新數(shù)據(jù)操作videoMgr.UpdateVideo(v,v.nVideoID); }BindDataGrid(); UpdateData(FALSE);}C."刪除"的實(shí)現(xiàn):獲取要?jiǎng)h除視頻數(shù)據(jù)的ID,執(zhí)行刪除操作,操作完成后調(diào)用BindDataGrid重新顯示數(shù)據(jù),清空控件中的數(shù)據(jù)。voidCDlgVideo::OnDel(){ //TODO:Addyourcontrolnotificationhandlercodehere CMainFrame*pWnd=(CMainFrame*)AfxGetMainWnd();CVideoManagervideoMgr(&pWnd->m_adoConnection);intnVideoID=atoi(m_strVideoID); videoMgr.DeleteVideo(nVideoID); //清空原有數(shù)據(jù)ClearCtrlData(); //重新綁定顯示BindDataGrid(); m_wndOK.SetWindowText("插入");}4.5系統(tǒng)網(wǎng)絡(luò)通信本系服務(wù)端和客戶端之間的通信是基于有連接的TCP通信。TCP通信是一種面向連接的、可靠的、基于字節(jié)流的在傳輸層(Transportlayer)通信協(xié)議。TCP網(wǎng)絡(luò)編程主要用套接字來實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)器與客戶端通信,一個(gè)標(biāo)準(zhǔn)的套接字是由協(xié)議族,IP地址與端口號(hào)組成,它是TCP服務(wù)器與客戶端通信的基礎(chǔ)。編寫網(wǎng)絡(luò)通信基本的步驟:定義用于傳輸?shù)臄?shù)據(jù)包結(jié)構(gòu)(傳輸協(xié)議),定義和實(shí)現(xiàn)網(wǎng)絡(luò)通信的封裝類,界面對(duì)封裝類的調(diào)用。VODServer關(guān)于網(wǎng)絡(luò)通信的實(shí)現(xiàn)步驟:1.socket庫(kù)的初始化:在App的InitInstance函數(shù)中:AfxSocketInit()AfxMessageBox("FailedtoInitializeSockets",MB_OK|MB_ICONSTOP)。2.服務(wù)端需要添加兩個(gè)相關(guān)類,CNetServer和CNetClient。CNetClient類定義的前面要添加數(shù)據(jù)包結(jié)構(gòu)的定義。CNetServer主要負(fù)責(zé)創(chuàng)建服務(wù)端socket,并且啟動(dòng)服務(wù)端線程等待客戶端連接。CNetClient類主要負(fù)責(zé)客戶端socket的創(chuàng)建,網(wǎng)絡(luò)通信的操作都在CNetClient類中實(shí)現(xiàn)。CNetClient主要實(shí)現(xiàn)的功能有:處理登陸的OnLogin函數(shù)、返回指定類型ID的所有視頻信息OnVideosByTypeID()函數(shù)、處理客戶端請(qǐng)求的視頻文件OnMediaData()函數(shù)、原始的數(shù)據(jù)收發(fā)函數(shù)RecvData()和SendData()函數(shù)。CNetServer和CNetClient的類視圖如下: 圖4-2MediaPlayer播放器效果圖CNetServer相關(guān)代碼:DWORDCNetServer::ServerThread(LPVOIDpParam){CNetServer*pThis=(CNetServer*)pParam; //創(chuàng)建socketpThis->m_hSockServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);sockaddr_inaddr={0};addr.sin_family=AF_INET;//綁定通信地址addr.sin_port=htons(6789);//通信端口addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);bind(pThis->m_hSockServer,(sockaddr*)&addr,sizeof(addr));//綁定socket和通信地址 listen(pThis->m_hSockServer,0);//設(shè)置監(jiān)聽while(1){sockaddraddrclient={0};intnLen=sizeof(addrclient); //接收客戶端連接SOCKETsock=accept(pThis->m_hSockServer,&addrclient,&nLen);CNetClientnetClient;//創(chuàng)建CNETClient類的netClient對(duì)象netClient.m_hClientSocket=sock; //數(shù)據(jù)的交互交給CNetClient類netClient.Initialize();}return0;}CNetClient相關(guān)代碼:BOOLCNetClient::Initialize(){DWORDdwThreadID=0;HANDLEhThread=CreateThread(NULL,0,ClientThread,this,0,&dwThreadID);//創(chuàng)建服務(wù)線程,來一個(gè)客戶端創(chuàng)建一個(gè)線程,同步處理客戶端請(qǐng)求CloseHandle(hThread);/關(guān)閉線程句柄returnTRUE;}線程處理函數(shù)代碼如下:DWORDCNetClient::ClientThread(LPVOIDpParam){CNetClient*pThis=(CNetClient*)pParam;BOOLbRet=TRUE;while(bRet){VODHEADERheader={0};bRet=pThis->RecvData(&header,sizeof(header)); //服務(wù)端收到的客戶端請(qǐng)求命令數(shù)據(jù)switch(header.dwCmd){//根據(jù)不同請(qǐng)求做出不同的操作caseVODNETCMD_LOGIN:bRet=pThis->OnLogin();//登錄break;caseVODNETCMD_MEDIADATA:bRet=pThis->OnMediaData();//獲取媒體數(shù)據(jù)break; caseVODNETCMD_TYPES: bRet=pThis->OnAllVideoTypes();//獲取所有視頻類型信息 break; caseVODNETCMD_GETVIDES: bRet=pThis->OnVideosByTypeID();//獲取媒體信息通過類型IDdefault:break;}}closesocket(pThis->m_hClientSocket);//關(guān)閉socket套接字return0;}第五章系統(tǒng)測(cè)試 軟件產(chǎn)品的質(zhì)量是軟件生存和發(fā)展的關(guān)鍵,而軟件測(cè)試是保證軟件產(chǎn)品質(zhì)量控制、管理和檢測(cè)的最重要手段。隨著軟件功能需求的日益復(fù)雜和軟件規(guī)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論