freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于局域網(wǎng)的視頻聊天室系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)—計(jì)算機(jī)(論文)(編輯修改稿)

2025-01-12 09:21 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 變?nèi)肿兞?,使線程的執(zhí)行函數(shù)返回,則該線程終止。 3 需求分析 軟硬件環(huán)境 電腦兩臺(tái)以上,分別配有 攝像頭、麥克風(fēng)、音箱或耳機(jī)等外部設(shè)備 ; Windows XP系統(tǒng), Microsoft Visual Studio 編程開發(fā)系統(tǒng)等。 需求分析 在同一個(gè)局域網(wǎng)中, 如何根據(jù)自身業(yè)務(wù)的要求,量身定制,對(duì)視頻設(shè)備進(jìn)行 第 6 頁(yè) 共 24 頁(yè) 合理搭配,選擇一套合理的視頻 聊天室 系統(tǒng) 。如何來(lái)滿足局域網(wǎng)內(nèi)部用戶的通訊要求,在考慮到網(wǎng)絡(luò)帶寬的同時(shí) ,提高 視頻清晰度,動(dòng)態(tài)畫面的流暢,語(yǔ)音的實(shí)時(shí)傳輸?shù)?,正是現(xiàn)代社會(huì)通訊所必需的。設(shè)計(jì)本系統(tǒng)時(shí),分析網(wǎng)絡(luò)承載、整個(gè)系統(tǒng)結(jié)構(gòu)的組建等是實(shí)現(xiàn)局域網(wǎng)文字聊天和語(yǔ)音視頻聊天所必需的。 文字、語(yǔ)音視頻聊天作為一種廣泛的網(wǎng)絡(luò)應(yīng)用對(duì)其基礎(chǔ)的承載網(wǎng)絡(luò)環(huán)境有著較高的網(wǎng)絡(luò)要求。其中應(yīng)重點(diǎn)考慮的是網(wǎng)絡(luò)的帶寬情況、端到端的時(shí)延、時(shí)延抖動(dòng)、丟包率等問(wèn)題。 ( 1) 網(wǎng)絡(luò)帶寬需求,視頻聊天對(duì)網(wǎng)絡(luò)的帶寬需求為“視頻帶寬 +IP 包頭開銷”,計(jì)算方法為:網(wǎng)絡(luò)帶寬 = 視頻帶寬 。 ( 2) 端到端的時(shí)延,網(wǎng)絡(luò)傳輸不可避免的會(huì)發(fā)生傳輸時(shí)延,通常建議視頻聊天的通用時(shí) 延小于 150ms。 ( 3) 時(shí)延抖動(dòng),由于音頻 /視頻的傳輸為實(shí)時(shí)的交互,因此網(wǎng)絡(luò)的時(shí)延抖動(dòng)更為重要,一般,視頻聊天的時(shí)延抖動(dòng)控制在 50ms 內(nèi)。 ( 4) 丟包率,網(wǎng)絡(luò)數(shù)據(jù)傳輸經(jīng)常會(huì)出現(xiàn)丟包現(xiàn)象,視頻傳輸過(guò)程中數(shù)據(jù)丟包嚴(yán)重的話會(huì)影響在線視頻聊天質(zhì)量。因此,在設(shè)計(jì)上應(yīng)將網(wǎng)絡(luò)上的丟包率控制在 1%以內(nèi)。 視頻聊天對(duì)實(shí)時(shí)性要求較高的網(wǎng)絡(luò)應(yīng)用,作為其基礎(chǔ)的承載網(wǎng)絡(luò)有較高的寬帶和對(duì)網(wǎng)絡(luò)中的業(yè)務(wù)流量有較高的控制能力。而視頻聊天系統(tǒng)本身對(duì)帶寬的要求為 62kbit/s~ 2Mbit/s,但是為了滿足流暢的視音頻效果,要求帶寬不低于384kbit/s。 文字、視頻聊天的功能和應(yīng)用效果體現(xiàn)在客戶端,而服務(wù)器端則是必不可少的,對(duì)于系統(tǒng)的需求分析在系統(tǒng)設(shè)計(jì)的過(guò)程中應(yīng)該明確、細(xì)致: ( 1) 文字聊天:首先啟動(dòng)服務(wù)器端,當(dāng)用戶啟動(dòng)客戶端時(shí),用服務(wù)器保存的用戶名和密碼來(lái)驗(yàn)證客戶是否已經(jīng)登錄到服務(wù)器。只有當(dāng)有兩個(gè)以上的用戶啟動(dòng)客戶端時(shí),才可以進(jìn)行文字聊天,聊天內(nèi)容要經(jīng)過(guò)服務(wù)器中轉(zhuǎn),分別在服務(wù)器端和兩個(gè)聊天的客戶端顯示聊天。 ( 2) 語(yǔ)音視頻聊天:在有兩個(gè)客戶在線的情況下,才能進(jìn)行語(yǔ)音視頻聊天。兩個(gè)用戶要進(jìn)行語(yǔ)音視頻聊天時(shí),一個(gè)用戶選中另一個(gè)用戶的用戶名,根據(jù)該用戶名在后臺(tái)鏈表中的 對(duì)應(yīng) IP 地址查找用戶并請(qǐng)求視頻連接。當(dāng)雙方確認(rèn)視頻連接后就進(jìn)行視頻傳輸,并顯示在客戶端,同時(shí)用線程實(shí)現(xiàn)語(yǔ)音錄制和回放。這樣,兩個(gè)用戶就實(shí)現(xiàn)了點(diǎn)對(duì)點(diǎn)的語(yǔ)音視頻聊天。在進(jìn)行語(yǔ)音視頻聊天的過(guò)程中,不能再與其它用戶進(jìn)行語(yǔ)音視頻聊天,但能夠與其它用戶進(jìn)行文字聊天。 第 7 頁(yè) 共 24 頁(yè) 4 系統(tǒng)結(jié)構(gòu) 硬件結(jié)構(gòu) 該系統(tǒng)采用的是 Server/Client 結(jié)構(gòu),服務(wù)器端是一臺(tái) PC 機(jī),而客戶端是PC 機(jī)和一個(gè)數(shù)字?jǐn)z像頭、耳機(jī)和麥克風(fēng)。它們進(jìn)行文字聊天時(shí),要經(jīng)過(guò)服務(wù)器進(jìn)行中轉(zhuǎn),而當(dāng)進(jìn)行語(yǔ)音視頻聊天時(shí)是客戶端與客戶端之間直接進(jìn)行的點(diǎn)對(duì)點(diǎn)的連接,它們之間的網(wǎng) 絡(luò)拓?fù)浣Y(jié)構(gòu)如圖 1。在圖中,為了簡(jiǎn)便,沒有畫出 麥克風(fēng)、音箱或耳機(jī)等外部設(shè)備 。 圖 1 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖 軟件結(jié)構(gòu) 功能需求 通過(guò)需求調(diào)研并分析,確定系統(tǒng)具備的基本功能,包括:文字聊天、語(yǔ)音視頻聊天。 ( 1) 文字聊天: 文字聊天采用的是 TCP 模式,包括服務(wù)器端和客戶端。首先啟動(dòng)服務(wù)器端,客戶端通過(guò)用戶名和密碼登錄服務(wù)器,服務(wù)器響應(yīng)客戶端登錄并提示有用戶登錄,此時(shí)兩個(gè)用戶就可以進(jìn)行文字聊天,在文字聊天時(shí)通過(guò)服務(wù)器中轉(zhuǎn),而每個(gè)用戶可以同時(shí)與多個(gè)用戶進(jìn)行文字聊天。當(dāng)有用戶退出時(shí),服務(wù)器做出響應(yīng),提示在線用戶 ,用戶下線 。 ( 2) 語(yǔ)音視頻聊天: 語(yǔ)音視頻聊天時(shí)采用的是 UCP 模式,客戶端與客戶端點(diǎn)對(duì)點(diǎn)的進(jìn)行,不需要經(jīng)過(guò)服務(wù)器端中轉(zhuǎn)。在文字聊天的基礎(chǔ)上,客戶端之間自行處理的語(yǔ)音視頻聊天,運(yùn)用 VFW函數(shù)庫(kù)中的函數(shù)對(duì) USB口輸入的數(shù)字視頻信息進(jìn)行相關(guān)處理 ,比如 :視頻捕獲、影像壓縮以及影像播放等,同時(shí)利用線程來(lái)處理聲音部分的錄制、回放等。 第 8 頁(yè) 共 24 頁(yè) A客戶端向 B 客戶端請(qǐng)求語(yǔ)音視頻聊天是通過(guò) B客戶端的用戶名來(lái)獲得 B客戶端的 IP 地址,并向 B 客戶端發(fā)送語(yǔ)音視頻聊天請(qǐng)求,當(dāng) B 客戶端接受后捕獲視頻,并進(jìn)行壓縮傳輸?shù)?A客戶端解壓并進(jìn)行顯示,在 B 客戶端接受視頻的同時(shí) , A客戶端也捕獲視頻,壓縮傳輸?shù)?B 客戶端解壓并進(jìn)行顯示。 系統(tǒng)功能模塊圖 該系統(tǒng)分為服務(wù)器端和客戶端,完成了文字聊天和語(yǔ)音視頻聊天,使用上只有文字聊天時(shí)才會(huì)通過(guò)服務(wù)器端,而對(duì)于語(yǔ)音視頻聊天就只需要對(duì)整個(gè)在線客戶端兩兩之間進(jìn)行點(diǎn)對(duì)點(diǎn)的視頻聊天。而在語(yǔ)音視頻時(shí)包括了視頻捕獲、視頻壓縮、解壓縮、語(yǔ)音錄制、語(yǔ)音回放以及視頻傳輸?shù)取U麄€(gè)系統(tǒng)的功能模塊圖如圖 2。 基 于 局 域 網(wǎng) 的 視 頻聊 天 室 系 統(tǒng)語(yǔ) 音 視 頻 聊 天視 頻 捕 獲視 頻 壓 縮 、解 壓 縮視 頻 傳 輸服 務(wù) 器 中 轉(zhuǎn) 語(yǔ) 音 錄 制 語(yǔ) 音 回 放文 字 聊 天 圖 2 系統(tǒng)功能模塊圖 系統(tǒng)各模塊流程圖 在整個(gè)系統(tǒng)中主要運(yùn)行兩個(gè)功能:圖 3 文字聊天流程圖和圖 4 語(yǔ)音視頻聊天流程圖。 第 9 頁(yè) 共 24 頁(yè) 圖 3 文字聊天流程圖 圖 4 語(yǔ)音視頻聊天流程圖 第 10 頁(yè) 共 24 頁(yè) 5 系統(tǒng)的詳細(xì)設(shè)計(jì) 文字聊天 TCP 套接字的運(yùn)用 在文字聊天時(shí) ,服務(wù)器端與客戶端的連接是采用的 TCP 套接節(jié)進(jìn)行連接。 TCP套接字的使用如圖 5。創(chuàng)建 CSocket 對(duì)象 CSocketServer 來(lái)處理服務(wù)器端與客戶端的連接, CSocket 繼承于 CasyncSocket,是 Windows Socket API 的高層抽象。CSocket 通常和 CsocketFile 以及 Carchive 類混合使用,這兩個(gè)類負(fù)責(zé)數(shù)據(jù)的發(fā)送和接收。要使用 CSocket 對(duì)象,首先要調(diào)用構(gòu)造函數(shù),然后調(diào)用 Create 函數(shù)創(chuàng)建一個(gè) Socket 句柄。 CSocket 函數(shù)缺省是創(chuàng)建一個(gè)流 Socket;如果沒有使用 CArchive 類,那么還可以創(chuàng)建一個(gè)數(shù)據(jù)報(bào) Socket。服務(wù)器端調(diào)用 Accept,客戶端調(diào)用 Connect,然后創(chuàng)建一個(gè) CsocketFile 去關(guān)聯(lián) CSocket。接下來(lái)的操作可以創(chuàng)建 CArchive 對(duì)象關(guān)聯(lián) CsocketFile,以用來(lái)發(fā)送和接收數(shù)據(jù)。 圖 5 TCP套接字的使用 第 11 頁(yè) 共 24 頁(yè) 文字聊天實(shí)現(xiàn) ChatServer 服務(wù)器運(yùn)行時(shí),利用一個(gè) CSocket 對(duì)象 CSocketServer 啟動(dòng)服務(wù)器,用函數(shù) gethostname 來(lái)獲得服務(wù)器端主機(jī)名和 IP,同時(shí)在服務(wù)器對(duì)話框中顯示服務(wù)器 IP,并將分配的固定端口號(hào) 8123 顯示在對(duì)話框中。用一個(gè) list列表顯示在線用戶,隨時(shí)更新用戶登錄情況,用一個(gè) edit box 顯示客戶端的聊天內(nèi)容以及系統(tǒng)提示消息。每一個(gè) ChatClient 客戶端啟動(dòng)時(shí),利用服務(wù)器內(nèi)定的用戶號(hào)和密碼來(lái)登錄 (如圖 6)。在整個(gè)系統(tǒng)中,利用鏈表來(lái)處理所有的用戶信息:當(dāng)有用戶登錄時(shí),在鏈表尾部加入該用戶信息;當(dāng)用戶下線時(shí),在該鏈表中刪除用戶,并提示所有用戶,該用戶下線 。在對(duì)鏈表進(jìn)行操作的同時(shí),要更新list 列表中的信息。 圖 6 用戶登錄界面 ChatServer 服務(wù)器端響應(yīng)客戶端文字聊天時(shí)的中轉(zhuǎn)情況如圖 7。 圖 7 服務(wù)器響應(yīng)文字聊天信息中轉(zhuǎn) ChatClient 客戶端兩兩間進(jìn)行文字聊天時(shí),發(fā)送信息的處理函數(shù)如下: 第 12 頁(yè) 共 24 頁(yè) void CChatClientDlg::OnChatBtSend() //發(fā)送信息按鍵 { if( !m_bConnect) { SetMessageBox(請(qǐng)連接服務(wù)器 !\r\n)。 return 。 } CString str。 CString szUserName。 CMesg msg。 GetDlgItemText(IDC_MESSAGE,str)。 GetDlgItemText(IDC_USERNAME,szUserName)。 if( () = 0 ) { SetMessageBox(請(qǐng)輸入想要發(fā)送的信息 !\r\n)。 return 。 } if ( () = 0) { SetMessageBox(請(qǐng)選擇說(shuō)話對(duì) 象 !\r\n)。 return 。 } //消息封裝 (Message)。 (szUserName)。 (str)。 m_csClientSendM(amp。msg)。 AddReceiver(szUserName , true)。 AddChatMessage(str)。 } 在聊天兩個(gè)客戶端的信息情況如圖 8 和圖 9。 第 13 頁(yè) 共 24 頁(yè) 圖 8 接收文字信息 圖 9 發(fā) 送文字信息 語(yǔ)音視頻聊天 UDP 套接字的運(yùn)用 在實(shí)現(xiàn)語(yǔ)音視頻聊天時(shí) ,采用的是基于 UDP套接字的點(diǎn)對(duì)點(diǎn)模式 ,而 UDP面向的是無(wú)連接的數(shù)據(jù)服務(wù) ,其套接字的使用如圖 10所示。 第 14 頁(yè) 共 24 頁(yè) 圖 10 UDP套接字的使用 視頻的捕獲 利用 VFW 接口,視頻捕獲可以分為以下幾個(gè)步驟: ( 1) 建立視頻采集窗口:該窗口用來(lái)接收視頻捕捉驅(qū)動(dòng)程序傳來(lái)的數(shù)據(jù)和消息。 ( 2) 連接視頻驅(qū)動(dòng)程序:將建立的視頻捕捉窗口與視頻設(shè)備驅(qū)動(dòng)程序相連。 ( 3) 視頻捕獲初始化。 ( 4) 視頻捕捉設(shè)置: VFW下視頻捕捉參數(shù)的設(shè)置可以通過(guò)調(diào)用函數(shù)或彈出對(duì)話框的形式來(lái)實(shí)現(xiàn)。一般視頻驅(qū)動(dòng)程序允 許設(shè)置的參數(shù)包括視頻源選擇、視頻格式、視頻顯示格式等。 ( 5) 設(shè)置回調(diào)函數(shù):通過(guò)回調(diào)函數(shù)來(lái)通知程序視頻事件的發(fā)生,比如捕捉一幀圖像成功的消息,捕捉出錯(cuò)的消息等。 ( 6) 結(jié)束捕捉:結(jié)束捕捉是應(yīng)該有一些清除工作。如釋放分配的內(nèi)存,斷開捕捉窗口與視頻捕捉驅(qū)動(dòng)程序的連接,清除視頻捕捉窗口等。 窗口類為捕獲數(shù)字視頻流及其相關(guān)操作提供了很大的方便,靈活編寫其中的 第 15 頁(yè) 共 24 頁(yè) 回調(diào)函數(shù)可滿足實(shí)時(shí)視頻傳輸?shù)男枰?,例如?yīng)用程序可直接從緩沖中取得數(shù)字視頻并對(duì)其進(jìn)行壓縮編碼后實(shí)時(shí)地傳到遠(yuǎn)端的客戶端。 在 VC++中,采用 VFW 技術(shù),客戶端通過(guò) capSetCallbackOnFrame()注冊(cè)回調(diào)函數(shù),當(dāng)采集卡采集到一幅圖像后,系統(tǒng)就會(huì)自動(dòng)調(diào)用回調(diào)函數(shù),然后再回調(diào)函數(shù)中使 用 ICSeqCompressFrame()函數(shù)進(jìn)行壓縮。然后再通過(guò) Winsock 將壓縮后的數(shù)據(jù)發(fā)送到 另一客戶 端。 該客戶 端接收完一幀以后,交給 ICDepress()解壓,最后用 SetDIBitsToDevice()將圖像顯示出來(lái) 。 基本的捕獲設(shè)置包括設(shè)置捕獲速度(每秒捕獲多少幀)、是否同時(shí)捕獲聲頻、捕獲緩沖、允許最大丟失多少幀和是否使用 DOS 內(nèi)存,以及使用鍵盤的哪個(gè)鍵或鼠標(biāo)的哪個(gè)鍵來(lái)終止捕 獲等內(nèi)容,這些設(shè)置使用 CAPTUREPARAMS 結(jié)構(gòu)來(lái)描述,capCaptureGetSetup 宏來(lái)得到當(dāng)前的設(shè)置,然后改變此結(jié)構(gòu)的成員變量,再使用 capCaptureSetSetup 宏設(shè)置新的設(shè)置。 設(shè)置捕獲速度,通過(guò)使用 capCaptureGetSetup 宏來(lái)得到當(dāng)前的捕捉速度,將當(dāng)前的捕捉速度保存在 CAPTUREPARAMS結(jié)構(gòu)的 dwRequestMicroSecPerFrame成員變量中,也可以通過(guò)設(shè)置此變量來(lái)改變當(dāng)前設(shè)置值。 設(shè)置終止捕獲,同樣通過(guò)使用 capCaptureGetSetup 宏來(lái)得到當(dāng) 前的設(shè)置,當(dāng)前按鍵設(shè)置保存在 CAPTUREPARAMS 結(jié)構(gòu)的 vKeyAbort 成員中,鼠標(biāo)設(shè)置保存在fAbortLeftMouse 和 fAbortRightMouse 成員中,通過(guò)修改可以設(shè)置新的熱健或者鼠標(biāo)左右鍵,修改完成后,使用 capCaptureSetSetup 宏來(lái)進(jìn)行更新。 捕獲的時(shí)間限制,用 CAPTUREPARAMS 結(jié)構(gòu)中的 fLimitEnabled 表示捕獲是否有時(shí)間的限制, wTimeLimit 用來(lái)設(shè)置指示捕獲最大的持續(xù)時(shí)間,其單位為秒。使用 capCaptureGetSetup 宏來(lái)得到當(dāng)前的設(shè)置值。 下面程序?yàn)樵O(shè)置 CAPTUREPARAMS 結(jié)構(gòu)的實(shí)現(xiàn)代碼: BOOL VideoCapture::SetCapturePara() { CAPTUREPARMS CapParms={0}。 capCaptureGetSetup(m_capwnd,amp。CapParms,sizeof(CapParms))。 //得到當(dāng)前的捕獲速度 = FALSE。 = FALSE。 = TRUE。 = FALSE。 = 80
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1