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

正文內(nèi)容

基于局域網(wǎng)的視頻聊天室系統(tǒng)的設(shè)計與實現(xiàn)—計算機(論文)-在線瀏覽

2025-02-09 09:21本頁面
  

【正文】 實時地直接從視頻緩存中 獲 取數(shù)據(jù)的要求 。而 AVICap 在捕獲視頻方面具有一定的優(yōu)勢,它能直接訪問視頻緩沖區(qū),不需要生成中間文件,實時性很強,效率很高。 在視頻捕獲之前需要創(chuàng)建一個捕獲窗,所有的捕獲操作及其設(shè)置都以它為基礎(chǔ)。 實際 上,捕獲窗類似于標(biāo)準控制(如按鈕、列表框等)。 AVICap 在顯示視頻時提供的兩種模式 : ( A)預(yù)覽( Preview)模式:該模式使用 CPU資源,視頻幀先從捕獲硬件傳到系統(tǒng)內(nèi)存,接著采用 GDI 函數(shù)在捕獲窗中顯示。 第 3 頁 共 24 頁 ( B)疊加( Overlay)模式:該模式使用硬件疊加進行視頻顯示,疊加視頻的顯示不經(jīng)過 VGA 卡,疊加視頻的硬件將 VGA的輸出信號與其自身的輸出信號合并,形成組合信號顯示在計算機的監(jiān)視器上。 靈活編寫 AVICap 提供的回調(diào)函數(shù)還可滿足一些特殊需求 。 在視頻 聊天 的應(yīng)用程序中可利用這一點來獲得視頻幀 , 回調(diào)函數(shù)將捕獲的圖像傳到遠端的計算機。 視頻捕獲編程也要用到涉及視頻捕獲的結(jié)構(gòu)、宏、消息和函數(shù)。例如,SendMessage( hWndCap,WM_CAP_DRIVER_CONNECT,0,0L)與 capDriverConnect( hWndCap,0)的作用相同,都是將創(chuàng)建的捕獲窗同視頻輸入器件連接起來。 Video Capture主要提供下列功能:連接驅(qū)動程序;獲取影像、 聲音資料,并顯示在屏幕上或者是存成 AVI 文件;獲取單張影像顯示在屏幕上,拷貝至剪貼簿,或者是存成 DIB( DeviceIndependent Bitmap)文件。 結(jié)構(gòu)體 BITMAPINFO 和點陣圖有關(guān),主要定義了影像獲取之后顯示在屏幕上、存儲在文件中的格式,它包含兩個成員: BITMAPINFOHEADER bmiHeader 描述影像性質(zhì)的結(jié)構(gòu),其成員記載了影像的大小、顏色深度和壓縮的方式,該成員在Video Capture、 Video Compression Manager 和 DrawDib 函數(shù)庫中,以及有關(guān)于點陣圖的應(yīng)用中; RGBQUAD bmiColors 指向 color table 第一個元素的位置。 Video Compression Functions 主要記錄壓縮功能相關(guān)的信息,其包含的比較重要的成員: ICLocate 輸入指向壓縮前后 BITMAPINFO 的指標(biāo),以及欲使用的codecs; ICCompressorChoose 呼叫一個系統(tǒng)內(nèi)建的對話,其中包含所有可能使用的 codes 以及其相關(guān)參數(shù); ICCompressQuery 詢問 pressor 是否支持某種壓縮方式,輸入?yún)?shù)為 pressor handle 及指向壓縮前后 BITMAPINFO 的指標(biāo),此函數(shù)會傳回詢問結(jié)果; ICCompressBegin要求系統(tǒng)準備相關(guān)資源以供 壓縮之用;ICCompress 壓縮某個 frame ; ICCompressEnd 歸還 相 關(guān) 資 源 給 系統(tǒng) ;ICDompressQuery 詢問 depressor 是 否 支 持 某 種 解 壓 縮 方 式 ;ICDompressBegin 要求系統(tǒng)準備相關(guān)資源以供解壓縮之用; ICDompress 解壓縮某一個 frame; ICDompressEnd歸還相關(guān)資源給系統(tǒng); ICDompressFree歸還 COMPVARS所占用的資源。單獨一個執(zhí)行程序運行時,缺省地包含 了 一個主線程,主線程以函數(shù)地址的形式出現(xiàn),提供程序的啟動點 ,當(dāng)主線程終止時,進程也隨之終止。 一個進程中的所有線程都在該進程的虛擬地址空間中,使用該進程的全局變量和系統(tǒng)資源。操作系統(tǒng)是根據(jù)線程的優(yōu)先級來安排 CPU 的時間,優(yōu)先級高的線程優(yōu)先運行,優(yōu)先級低的線程則繼續(xù)等待。用戶界面線程通常用來處理用戶的輸入并響應(yīng)各種事件和消息,其實,應(yīng)用程序的主執(zhí)行線程 CWinApp 對象就是一個用戶界面線程,當(dāng)應(yīng)用程序啟動時自動創(chuàng)建和啟動,同樣它的終止也意味著該程序的結(jié)束,進程終止。工作線程和用戶界面線程啟動時要調(diào)用同一個函數(shù)的不同版本;一個進程中的所有線程共享它們父進程的變量,但同時每個線程可以擁有自己的變量。第二步是根據(jù)需要重載該派生類的一些成員函數(shù)如: ExitInstance()、InitInstance()、 OnIdle()、 PreTranslateMessage()等函數(shù)。 ( 2) 線程的優(yōu)先級 CwinThread 類的成員函數(shù)用于線程優(yōu)先級的操作 : int GetThreadPriority(); BOOL SetThradPriority() (int nPriority); ( 3) 線程的掛 起 和恢復(fù) CWinThread 類中包 含了應(yīng)用程序掛 起 和恢復(fù)它所創(chuàng)建的線程的函數(shù),其中SuspendThread()用來掛 起 線程,暫停線程的執(zhí)行; ResumeThread()用來恢復(fù)線程的執(zhí)行。 ( 4) 結(jié)束線程 終止線程有三種途徑,線程可以在自身內(nèi)部調(diào)用 AfxEndThread()來終止自身的運行;可以在線程的外部調(diào)用 BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode)來強行終止一個線程的運行,然后調(diào)用 CloseHandle()函數(shù)釋放線程所占用的堆棧;第三種方法是改變?nèi)肿兞?,使線程的執(zhí)行函數(shù)返回,則該線程終止。 需求分析 在同一個局域網(wǎng)中, 如何根據(jù)自身業(yè)務(wù)的要求,量身定制,對視頻設(shè)備進行 第 6 頁 共 24 頁 合理搭配,選擇一套合理的視頻 聊天室 系統(tǒng) 。設(shè)計本系統(tǒng)時,分析網(wǎng)絡(luò)承載、整個系統(tǒng)結(jié)構(gòu)的組建等是實現(xiàn)局域網(wǎng)文字聊天和語音視頻聊天所必需的。其中應(yīng)重點考慮的是網(wǎng)絡(luò)的帶寬情況、端到端的時延、時延抖動、丟包率等問題。 ( 2) 端到端的時延,網(wǎng)絡(luò)傳輸不可避免的會發(fā)生傳輸時延,通常建議視頻聊天的通用時 延小于 150ms。 ( 4) 丟包率,網(wǎng)絡(luò)數(shù)據(jù)傳輸經(jīng)常會出現(xiàn)丟包現(xiàn)象,視頻傳輸過程中數(shù)據(jù)丟包嚴重的話會影響在線視頻聊天質(zhì)量。 視頻聊天對實時性要求較高的網(wǎng)絡(luò)應(yīng)用,作為其基礎(chǔ)的承載網(wǎng)絡(luò)有較高的寬帶和對網(wǎng)絡(luò)中的業(yè)務(wù)流量有較高的控制能力。 文字、視頻聊天的功能和應(yīng)用效果體現(xiàn)在客戶端,而服務(wù)器端則是必不可少的,對于系統(tǒng)的需求分析在系統(tǒng)設(shè)計的過程中應(yīng)該明確、細致: ( 1) 文字聊天:首先啟動服務(wù)器端,當(dāng)用戶啟動客戶端時,用服務(wù)器保存的用戶名和密碼來驗證客戶是否已經(jīng)登錄到服務(wù)器。 ( 2) 語音視頻聊天:在有兩個客戶在線的情況下,才能進行語音視頻聊天。當(dāng)雙方確認視頻連接后就進行視頻傳輸,并顯示在客戶端,同時用線程實現(xiàn)語音錄制和回放。在進行語音視頻聊天的過程中,不能再與其它用戶進行語音視頻聊天,但能夠與其它用戶進行文字聊天。它們進行文字聊天時,要經(jīng)過服務(wù)器進行中轉(zhuǎn),而當(dāng)進行語音視頻聊天時是客戶端與客戶端之間直接進行的點對點的連接,它們之間的網(wǎng) 絡(luò)拓撲結(jié)構(gòu)如圖 1。 圖 1 網(wǎng)絡(luò)拓撲結(jié)構(gòu)圖 軟件結(jié)構(gòu) 功能需求 通過需求調(diào)研并分析,確定系統(tǒng)具備的基本功能,包括:文字聊天、語音視頻聊天。首先啟動服務(wù)器端,客戶端通過用戶名和密碼登錄服務(wù)器,服務(wù)器響應(yīng)客戶端登錄并提示有用戶登錄,此時兩個用戶就可以進行文字聊天,在文字聊天時通過服務(wù)器中轉(zhuǎn),而每個用戶可以同時與多個用戶進行文字聊天。 ( 2) 語音視頻聊天: 語音視頻聊天時采用的是 UCP 模式,客戶端與客戶端點對點的進行,不需要經(jīng)過服務(wù)器端中轉(zhuǎn)。 第 8 頁 共 24 頁 A客戶端向 B 客戶端請求語音視頻聊天是通過 B客戶端的用戶名來獲得 B客戶端的 IP 地址,并向 B 客戶端發(fā)送語音視頻聊天請求,當(dāng) B 客戶端接受后捕獲視頻,并進行壓縮傳輸?shù)?A客戶端解壓并進行顯示,在 B 客戶端接受視頻的同時 , A客戶端也捕獲視頻,壓縮傳輸?shù)?B 客戶端解壓并進行顯示。而在語音視頻時包括了視頻捕獲、視頻壓縮、解壓縮、語音錄制、語音回放以及視頻傳輸?shù)取? 基 于 局 域 網(wǎng) 的 視 頻聊 天 室 系 統(tǒng)語 音 視 頻 聊 天視 頻 捕 獲視 頻 壓 縮 、解 壓 縮視 頻 傳 輸服 務(wù) 器 中 轉(zhuǎn) 語 音 錄 制 語 音 回 放文 字 聊 天 圖 2 系統(tǒng)功能模塊圖 系統(tǒng)各模塊流程圖 在整個系統(tǒng)中主要運行兩個功能:圖 3 文字聊天流程圖和圖 4 語音視頻聊天流程圖。 TCP套接字的使用如圖 5。CSocket 通常和 CsocketFile 以及 Carchive 類混合使用,這兩個類負責(zé)數(shù)據(jù)的發(fā)送和接收。 CSocket 函數(shù)缺省是創(chuàng)建一個流 Socket;如果沒有使用 CArchive 類,那么還可以創(chuàng)建一個數(shù)據(jù)報 Socket。接下來的操作可以創(chuàng)建 CArchive 對象關(guān)聯(lián) CsocketFile,以用來發(fā)送和接收數(shù)據(jù)。用一個 list列表顯示在線用戶,隨時更新用戶登錄情況,用一個 edit box 顯示客戶端的聊天內(nèi)容以及系統(tǒng)提示消息。在整個系統(tǒng)中,利用鏈表來處理所有的用戶信息:當(dāng)有用戶登錄時,在鏈表尾部加入該用戶信息;當(dāng)用戶下線時,在該鏈表中刪除用戶,并提示所有用戶,該用戶下線 。 圖 6 用戶登錄界面 ChatServer 服務(wù)器端響應(yīng)客戶端文字聊天時的中轉(zhuǎn)情況如圖 7。 return 。 CString szUserName。 GetDlgItemText(IDC_MESSAGE,str)。 if( () = 0 ) { SetMessageBox(請輸入想要發(fā)送的信息 !\r\n)。 } if ( () = 0) { SetMessageBox(請選擇說話對 象 !\r\n)。 } //消息封裝 (Message)。 (str)。msg)。 AddChatMessage(str)。 第 13 頁 共 24 頁 圖 8 接收文字信息 圖 9 發(fā) 送文字信息 語音視頻聊天 UDP 套接字的運用 在實現(xiàn)語音視頻聊天時 ,采用的是基于 UDP套接字的點對點模式 ,而 UDP面向的是無連接的數(shù)據(jù)服務(wù) ,其套接字的使用如圖 10所示。 ( 2) 連接視頻驅(qū)動程序:將建立的視頻捕捉窗口與視頻設(shè)備驅(qū)動程序相連。 ( 4) 視頻捕捉設(shè)置: VFW下視頻捕捉參數(shù)的設(shè)置可以通過調(diào)用函數(shù)或彈出對話框的形式來實現(xiàn)。 ( 5) 設(shè)置回調(diào)函數(shù):通過回調(diào)函數(shù)來通知程序視頻事件的發(fā)生,比如捕捉一幀圖像成功的消息,捕捉出錯的消息等。如釋放分配的內(nèi)存,斷開捕捉窗口與視頻捕捉驅(qū)動程序的連接,清除視頻捕捉窗口等。 在 VC++中,采用 VFW 技術(shù),客戶端通過 capSetCallbackOnFrame()注冊回調(diào)函數(shù),當(dāng)采集卡采集到一幅圖像后,系統(tǒng)就會自動調(diào)用回調(diào)函數(shù),然后再回調(diào)函數(shù)中使 用 ICSeqCompressFrame()函數(shù)進行壓縮。 該客戶 端接收完一幀以后,交給 ICDepress()解壓,最后用 SetDIBitsToDevice()將圖像顯示出來 。 設(shè)置捕獲速度,通過使用 capCaptureGetSetup 宏來得到當(dāng)前的捕捉速度,將當(dāng)前的捕捉速度保存在 CAPTUREPARAMS結(jié)構(gòu)的 dwRequestMicroSecPerFrame成員變量中,也可以通過設(shè)置此變量來改變當(dāng)前設(shè)置值。 捕獲的時間限制,用 CAPTUREPARAMS 結(jié)構(gòu)中的 fLimitEnabled 表示捕獲是否有時間的限制, wTimeLimit 用來設(shè)置指示捕獲最大的持續(xù)時間,其單位為秒。 下面程序為設(shè)置 CAPTUREPARAMS 結(jié)構(gòu)的實現(xiàn)代碼: BOOL VideoCapture::SetCapturePara() { CAPTUREPARMS CapParms={0}。CapParms,sizeof(CapParms))。 = FALSE。 = FALSE。 第 16 頁 共 24 頁 if(!capCaptureSetSetup(m_capwnd,amp。 return FALSE。m_bmpinfo,sizeof(m_bmpinfo))。 =IMAGE_HEIGHT。m_bmpinfo,sizeof(m_bmpinfo))。 return ret。 capCaptureAbort(m_capwnd)。 return TRUE。將捕獲窗口 連接至捕獲設(shè)備,用 capDriverConnect 函數(shù)來使一個捕獲窗口與一個捕獲設(shè)備連接或關(guān)聯(lián)連接上后 ,就可以通過捕獲窗口向捕獲設(shè)備發(fā)送各種消息 ,可以使用函數(shù) capGetDriverDescription 來獲得已安裝的捕獲設(shè)備名稱及版本 ,將其列舉在實現(xiàn)程序過程中。如果斷開捕獲窗口與捕獲設(shè)備的連接用 capDriverDisconnect。該結(jié)構(gòu)的內(nèi)容包含了圖片的尺寸、卷軸的當(dāng)前位置、overlay 和 preview 是否已設(shè)置。而捕獲窗口尺寸的改變并不影響實際的捕獲視頻流的尺寸。 //捕獲窗口 BOOL VideoCapture::Initialize() { char devname[128]={0},devversion[128]={0}。 BOOL ret = TRUE, ret1 = TRUE, ret2 = TRUE, ret3 = TR
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1