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

正文內(nèi)容

局域網(wǎng)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文(已改無(wú)錯(cuò)字)

2022-10-10 16:01:48 本頁(yè)面
  

【正文】 其套接字的使用如下圖。 局域網(wǎng)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì) 24 圖 語(yǔ)音視頻聊天套接字圖 視頻的捕捉 利用 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ā)生,比如捕捉一局域網(wǎng)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì) 25 幀圖像成功的消息,捕捉出錯(cuò)的消息等。 6. 結(jié)束捕捉:結(jié)束捕捉是應(yīng)該有一些清除工作。如釋放分配的內(nèi)存,斷開(kāi)捕捉窗口與視頻捕捉驅(qū)動(dòng)程序的連接,清除視頻捕捉窗口等。 窗口類為捕獲數(shù)字視頻流及其相關(guān)操作提供了很大的方便,靈活編寫(xiě)其中的回調(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() { 局域網(wǎng)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì) 26 CAPTUREPARMS CapParms={0}。 capCaptureGetSetup(m_capwnd,amp。CapParms,sizeof(CapParms))。 //得到當(dāng)前的捕獲速度 = FALSE。 = FALSE。 = TRUE。 = FALSE。 = 80。 if(!capCaptureSetSetup(m_capwnd,amp。CapParms,sizeof(CapParms))) { // (\n Failed to set the capture parameters )。 return FALSE。 } // Set Video Format capGetVideoFormat(m_capwnd,amp。m_bmpinfo,sizeof(m_bmpinfo))。 =IMAGE_WIDTH。 =IMAGE_HEIGHT。 BOOL ret=capSetVideoFormat(m_capwnd,amp。m_bmpinfo,sizeof(m_bmpinfo))。 // (\n Video parameters set properly)。 return ret。 } //終止一個(gè)捕獲任務(wù) BOOL VideoCapture::StopCapture() { capCaptureStop(m_capwnd)。 capCaptureAbort(m_capwnd)。 Sleep(500)。 return TRUE。 } 局域網(wǎng)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì) 27 窗口的捕捉 在捕獲前必須創(chuàng)建一個(gè)捕獲窗口( Capture Widnow),下 面介紹有關(guān)捕獲窗口的情況:創(chuàng)建一個(gè) AVICap 捕獲窗口,用 capCreateCaptureWindow 函數(shù)并返回一個(gè)句柄。將捕獲窗口連接至捕獲設(shè)備,用 capDriverConnect 函數(shù)來(lái)使一個(gè)捕獲窗口與一個(gè)捕獲設(shè)備連接或關(guān)聯(lián)連接上后 ,就可以通過(guò)捕獲窗口向捕獲設(shè)備發(fā)送各種消息 ,可以使用函數(shù) capGetDriverDescription 來(lái)獲得已安裝的捕獲設(shè)備名稱及版本 ,將其列舉在實(shí)現(xiàn)程序過(guò)程中。再利用 capDriverGetName 函數(shù)來(lái)得到捕獲設(shè)備的名稱將獲得的版本發(fā)送到 capDriverGetVersion。如果斷開(kāi)捕獲窗口與捕獲設(shè)備的連接用 capDriverDisconnect。 捕獲窗口的狀態(tài),用 capGetStatus 函數(shù)來(lái)獲得當(dāng)前捕獲窗口的狀態(tài),得到一個(gè) CAPSTATUS 結(jié)構(gòu)的拷貝。該結(jié)構(gòu)的內(nèi)容包含了圖片的尺寸、卷軸的當(dāng)前位置、overlay 和 preview 是否已設(shè)置。由于其信息是動(dòng)態(tài)的,每當(dāng)捕獲的視頻流的尺寸發(fā)生改變,程序應(yīng)該在獲取捕獲設(shè)備的視頻格式以后及時(shí)進(jìn)行刷新。而捕獲窗口尺寸的改變并不影響實(shí)際的捕獲視頻流的尺寸。該尺寸由視頻捕獲設(shè)備的格式和視頻對(duì)話框決定。 //捕獲窗口 BOOL VideoCapture::Initialize() { char devname[128]={0},devversion[128]={0}。 int index=0。 BOOL ret = TRUE, ret1 = TRUE, ret2 = TRUE, ret3 = TRUE。 TRACE(VideoCapture::Initialize\n)。 //創(chuàng)建一個(gè) AVICap 捕獲窗口 m_capwnd = capCreateCaptureWindow(Capture,WS_POPUP,0,0,1,1,0,0)。 if(!m_capwnd) { return FALSE。 } //connect callback functions ret = capSetUserData(m_capwnd,this)。 局域網(wǎng)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì) 28 //Change destroy functions also........ ret1 = capSetCallbackOnVideoStream(m_capwnd,OnCaptureVideo)。 //得到已安裝的捕獲設(shè)備的 名稱及版本 ret2 = capGetDriverDescription(index,devname,100,devversion,100)。 // Connect to webcam driver //使一個(gè)捕獲窗口與一個(gè)捕獲設(shè)備連接或關(guān)聯(lián) ret3 = capDriverConnect(m_capwnd,index)。 if(!(ret amp。amp。 ret1 amp。amp。 ret2 amp。amp。 ret3)) { // Device may be open already or it may not have been // closed properly last time. AfxMessageBox(Unable to open Video Capture Device)。 // (\n Unable to connect driver to the window)。 m_capwnd=NULL。 return FALSE。 } // Set the capture parameters if(SetCapturePara()==FALSE) { // (\n Setting capture parameters failed)。 capDriverDisconnect(m_capwnd)。 //使捕獲窗口與一個(gè)捕獲設(shè)備斷開(kāi) return FALSE。 } return TRUE。 視頻捕獲驅(qū)動(dòng) 視頻捕獲必須具有視頻捕獲驅(qū)動(dòng)才能進(jìn)行,其相關(guān)內(nèi)容如下: 視頻捕獲驅(qū)動(dòng)的性能, capDriverGetCap函數(shù)得到當(dāng)前連接視頻驅(qū)動(dòng)的硬件性能,該信息保存在 CAPDRIVERCAPS 結(jié)構(gòu)中;視頻對(duì)話框,每個(gè)視頻驅(qū)動(dòng)能夠提供 4 個(gè)對(duì)話框來(lái)控制視頻捕獲和數(shù)字化處理視頻對(duì)話框定義的視頻壓縮率和圖像品質(zhì)局域網(wǎng)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì) 29 等。視頻對(duì)話框都在視頻捕獲驅(qū)動(dòng)中定義。這個(gè)四個(gè)對(duì)話框分別為: Video Source對(duì)話框用于控制選擇視頻來(lái)源( capDlgVideoSource); Video Format 對(duì)話框定義視頻幀的尺寸和精度,以及視頻捕獲卡的壓縮設(shè)置 (capDlgVideoFormat);Video Display 對(duì)話框控制在視頻捕獲期間相關(guān)顯示器上的顯示(capDlgVideoDisplay); Video Compression 對(duì)話框控制壓縮和圖像品質(zhì)(caoDlgVideoCompression)。 語(yǔ)音錄制 在音頻的錄制和播放時(shí),采用的用戶界面線程來(lái)處理,是 CWinThread 對(duì)象,根據(jù)前面線程的介紹,一步一步的來(lái)實(shí)現(xiàn)。錄音用的一個(gè) CWinThread 對(duì)象CAudioRec 來(lái)實(shí)現(xiàn) ,部分實(shí)現(xiàn)代碼: LRESULT CAudioRec::OnStartRecording(WPARAM wp, LPARAM lp) { if(recording) return FALSE。 //打開(kāi)錄音設(shè)備 MMRESULT mmReturn = ::waveInOpen( amp。m_hRecord, WAVE_MAPPER, amp。m_WaveFormatEx,::GetCurrentThreadId(),0, CALLBACK_THREAD)。 if(mmReturn!=MMSYSERR_NOERROR ) return FALSE。 if(mmReturn==MMSYSERR_NOERROR ) { for(int i=0。 i MAXRECBUFFER 。 i++) { //為錄音設(shè)備準(zhǔn)備緩存 mmReturn = ::waveInPrepareHeader(m_hRecord, rechead[i], sizeof(WAVEHDR))。 //給輸入設(shè)備增加一個(gè)緩存 mmReturn = ::waveInAddBuffer(m_hRecord, rechead[i], sizeof(WAVEHDR))。 } mmRet
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1