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

正文內(nèi)容

網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)項(xiàng)目(參考版)

2024-12-07 15:19本頁(yè)面
  

【正文】 最后,特別感謝我的父母,在我十六年求學(xué)生涯中給與我的無(wú)限支持和鼓勵(lì)。 與此同時(shí),我要感謝紹興文理學(xué)院 工學(xué)院計(jì)算機(jī)系的各位老師和同學(xué)們的指 導(dǎo)與幫助。 28 參考文獻(xiàn) [1] Stevens . TCP/IP詳解 卷一:協(xié)議 北京 :機(jī)械工作出版社 , [2] jonesamp。 (8) 在用戶登陸驗(yàn)證時(shí),出現(xiàn)了沒(méi)有該用戶錯(cuò)誤。 (6) 在客戶端傳輸?shù)臄?shù)據(jù)在服務(wù)器顯示的是亂碼,原因是客戶端和服務(wù)器對(duì)字符的編碼選擇不統(tǒng)一。 (4) 在把接受 filter 和 divx 的解碼器 filter 連接時(shí),出現(xiàn)了不類型不同錯(cuò)誤,原因是接受 filter 媒體類型在 divx 解碼器 filter 中不允許。出現(xiàn)了不能發(fā)送數(shù)據(jù)和接受數(shù)據(jù),原因是沒(méi)有啟動(dòng) WSAStartup()函數(shù)。 在本系統(tǒng)開(kāi)發(fā)過(guò)程中遇到了如下的問(wèn)題 : (1) 在 VC++ 平臺(tái)開(kāi)發(fā)環(huán)境的配置 jrtplib directshow sdk 庫(kù)和頭文件時(shí)遇到了 錯(cuò)誤,原因是頭文件目錄排放順序不對(duì)。服務(wù)器要啟動(dòng)多個(gè)線程來(lái)接受多個(gè)客戶端, filter 中要采用多個(gè)線程來(lái)處理視頻數(shù)據(jù)處理和傳輸 ,所以都要保證線程的同步,不然會(huì)造成程序邏輯錯(cuò)誤,甚至可能造成程序的崩潰。此系統(tǒng)涉及的開(kāi)發(fā)技術(shù)還有 DirectShow、 Filter、 RTP 協(xié)議,由于自己是第一次做視頻方面的, 所以要花時(shí)間去了解這些技術(shù)的基礎(chǔ)介紹,練習(xí)寫些與之相關(guān)的程序。利用好網(wǎng)絡(luò)資源和學(xué)校圖書(shū)館資源。 我認(rèn)為開(kāi)發(fā) 基于 Inter 的多客戶端的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng) 應(yīng)注意: (1) 應(yīng)該做好準(zhǔn)備工作:如對(duì)此系統(tǒng)進(jìn)行調(diào)查,查找網(wǎng)上資料還有翻閱相關(guān)書(shū)籍,以及相關(guān)的系統(tǒng)樣例。 此系統(tǒng)的關(guān)鍵是實(shí)現(xiàn)視頻接受和發(fā)送模塊的功能也就是接受 filter 和發(fā)送 filter 的開(kāi)發(fā),也是此系統(tǒng)的難點(diǎn),所以對(duì)這一模塊一定要肯花時(shí)間和精力去做,和同組成員進(jìn)行技術(shù)上的計(jì)論,同時(shí)多征求指導(dǎo)老師的意見(jiàn)和建議。因此在今后的工作里,這些功能與技術(shù)還需要加以提高和實(shí)現(xiàn)。 26 4 總結(jié) 本文簡(jiǎn)要介紹了基于 Inter 的多客戶端的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的主要功能及體系結(jié)構(gòu),重點(diǎn)討論了 filter 的開(kāi)發(fā)、 DirectShow 應(yīng)用程序的開(kāi)發(fā)、網(wǎng)絡(luò)監(jiān)聽(tīng)服務(wù)器和客戶端的開(kāi)發(fā)以及各部分的功能模塊圖和部分程序代碼這些技術(shù)的實(shí)現(xiàn),滿足了系統(tǒng)的需要,優(yōu)化了系統(tǒng)的性能。 開(kāi)發(fā)好 filter后,可以編譯生成 dll和 ax為后綴的文件,不過(guò) filter一般生成 .ax文件,然后用 regsvc32 /path 注冊(cè),這 樣就可以在應(yīng)用程序里使用了。} GetDeliveryBuffer()發(fā)送得到下游 filter的存放數(shù)據(jù)內(nèi)存地址的請(qǐng)求,然后把接受到的視頻幀數(shù)據(jù)拷貝到該內(nèi)存地址,然后調(diào)用下游 filter的 Deliver()方法通知該下游 filter。 break。 m_pOutputDeliver(pIMediaSample)。buffer)。 if (SUCCEEDED(hr)) { pIMediaSampleSetActualDataLength(dataLen)。 while(true) { hr=m_pOutputGetDeliveryBuffer(amp。 Memcpy()函數(shù)用來(lái)內(nèi)存數(shù)據(jù)之間的拷貝, GetPayloadLength()是得到接受緩沖區(qū)的數(shù)據(jù)地址,如果該幀的數(shù)據(jù)全部到達(dá)后就調(diào)用 ProcessBuffer()傳給下游 filter處理。 //等待時(shí)間 RTPTime::Wait(RTPTime())。 recvoffset = 0。 //重新設(shè)置初始化值 len=bufLen。 } 25 else { memcpy(buffer+recvoffset,payloadpointer,length)。 recvoffset+=length。 DWORD length=packGetPayloadLength()。但這并不會(huì)啟動(dòng)網(wǎng)絡(luò)連接,在初始化會(huì)話之前要調(diào)用 WSAStartup()函數(shù),在結(jié)束時(shí)不要忘了調(diào)用 WSACleanup()方法。 (port)。 //background thread to call virtual callbacks set by default, but just to be sure (MAX_PACKET_SIZE)。 ()。 //RTPTime::Wait(RTPTime())。 // increment decrement pbBuffer += dwSnarf。 if(dwSnarf==dwLength) //如果是小于 1400字節(jié),標(biāo)記為該數(shù)據(jù)是整幀數(shù)據(jù)然后發(fā)送出去 thisSendPacket(pbBuffer,dwSnarf,96,true,160)。接收端收到數(shù)據(jù)后,再把屬于同一視頻幀的數(shù)據(jù)再組起來(lái)。 filter的數(shù)據(jù)傳輸以幀為單位的,每一幀的數(shù)據(jù)都存儲(chǔ)在 IMediaSample結(jié) 24 中,在 IMediaSample中取得數(shù)據(jù)的首地址用 GetPointer()方法,然后拷貝到緩沖區(qū),把緩沖區(qū)地址作參數(shù)傳送給發(fā)送函數(shù), 在網(wǎng)絡(luò)帶寬比較低的情況下(如十幾KBps),數(shù)據(jù)丟幀現(xiàn)象比較嚴(yán)重,這對(duì)于圖像質(zhì)量有很大的影響。} else return CBaseFilter::NonDelegatingQueryInterface (riid, ppv)。 ifdef __cplusplus } endif endif // __ISEND__ 屬性頁(yè)接口和自定義接口是通過(guò)如下方法得到的 if (riid == IID_ISpecifyPropertyPages) { return GetInterface ((ISpecifyPropertyPages *) this,ppv)。接口定義如下: ifndef __ISEND__ define __ISEND__ ifdef __cplusplus extern C { endif //569c32bc8f3a457e84583bae84ee538e static const GUID IID_ISend= {0x569c32bc, 0x8f3a, 0x457e,{ 0x84, 0x58, 0x3b, 0xae, 0x84, 0xee, 0x53, 0x8e}}。 環(huán)境配置好后,開(kāi)發(fā) filter。下載 jrtp庫(kù)、 jthread庫(kù)。首先對(duì)DirectShow的基類源代碼進(jìn)行編譯,生成 debug和 release兩個(gè)版本。 //如果需要,插入事件處理代碼 (HResult)。 //代表某具體事件的數(shù)字表示 EventCode evCode。在本系統(tǒng)中,采用 ImediaEeventEx 接口來(lái)實(shí)現(xiàn)該功能。之后的 filter 的連接和 Imediacontrol 的 run 方法運(yùn)行以及 fiter 的屬性頁(yè)的調(diào)用都是同樣的。 if (i = 60) {提示信息給用戶 } } } isStop變量是只在主線程設(shè)置,在連接請(qǐng)求線程根據(jù)該設(shè)置做出相應(yīng)的響應(yīng),isStop變量避免在多個(gè)程序段中設(shè)置,因?yàn)檫@將造成線程間的不同步性。 //線程等待時(shí)間按 i而變化 (1000 * i)。break。amp。如果允許,就啟動(dòng)視頻處理模塊來(lái)發(fā)送視頻,否則就關(guān)閉程序。如果服務(wù)器端一直沒(méi)啟動(dòng),那么客戶端如果一直請(qǐng)求,這種處理方式不是最合適的,反之,也一樣。 mediaControl = null。 rot = null。釋放資源代碼如下: if (object!= null) //釋放資源 stop(objcet)。 Marshal 類中定義的 static 方法對(duì)于處理非托管代碼至關(guān)重要。 如果要關(guān)閉視頻 , 也要釋放相關(guān)的資源 ,首先應(yīng)該是停止視頻,停 止接受媒體事件,釋放 filter圖表資源 ,最后釋放 對(duì)象。 以上代碼作用是通過(guò) DllImport屬性來(lái)調(diào)用 fiter的屬性頁(yè)來(lái)設(shè)置要發(fā)送的 IP地址和 Port號(hào) ,如圖 19 圖 filter 屬性頁(yè)設(shè)置 本系統(tǒng)的 視頻處理所需的接口 : IMediaControl接口是用來(lái)控制 filter的狀態(tài), IMediaEventEx接口用來(lái)捕捉媒體事件, IVideoWindow接口對(duì)視頻進(jìn)行顯示各種操作, ICaptureGraphBuilder2接口處理視頻捕獲。在 Imediacontrol的 run方法前調(diào)用屬性頁(yè)設(shè)置 IP地址和 PORT號(hào)。 } 18 如果遠(yuǎn)程客戶端有數(shù)據(jù)傳輸過(guò)來(lái)會(huì)在窗口上顯示,如圖 圖 視頻顯示界面 連接 filter 用 (outpin, inpin)。 HResult = ((IPropertyBag)iPropertyBagSource).Read(FriendlyName, out obj, null)。 string name = 。 Guid iid0 = typeof(IBaseFilter).GUID。//Create the system device enumerator HResult = (filterType, out classEnum, 0)。 IMoniker[] moniker = new IMoniker[1]。再尋找 filter上的 pin接口,找到后,按需要的順序連接起來(lái),連接好后,運(yùn)行IMediaControl的 Run方法,那么只要數(shù)據(jù)一到達(dá)接受 filter,就會(huì)立刻發(fā)送到顯示 filter顯示。 //在此插入處理代碼 ()。 } } private void DoAcceptTcpClientCallback(IAsyncResult ar) { TcpListener listener = (TcpListener)。 (new AsyncCallback(DoAcceptTcpClientCallback), listener)。 pirvate void RunServer() { DoBeginAcceptTcpClient(listener)。 //RunServer 方法實(shí)現(xiàn)了監(jiān)聽(tīng)客戶端功能 Thread newThread = new Thread(new ThreadStart())。采用異步方式,程序不會(huì)阻塞,而是繼續(xù)執(zhí)行下面語(yǔ)句,那么循環(huán)判斷將會(huì)得到執(zhí)行,從而使程序完全退出。為了使線程間保持同步性,退出條件變量被設(shè)置為只在主線程退出的地方修改。 Xml配置文件如圖 圖 xml文檔 當(dāng)點(diǎn)擊查看視 頻按鈕 , 主線程將啟動(dòng)一個(gè)線程來(lái)監(jiān)聽(tīng)客戶端 , 每當(dāng)有用戶連接并同意的話 , 在監(jiān)聽(tīng)客戶端線程啟動(dòng)一個(gè)線程來(lái)處理視頻顯示。 //根據(jù)屬性內(nèi)容來(lái)對(duì)節(jié)點(diǎn)文本作相應(yīng)的處理,這里 //屬性內(nèi)容是 string,所以把節(jié) 點(diǎn)內(nèi)容轉(zhuǎn)化為字符串 ip = ().Trim()。 //讀取每個(gè)節(jié)點(diǎn) w
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1