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

正文內(nèi)容

網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)項(xiàng)目-資料下載頁

2024-12-03 15:19本頁面

【導(dǎo)讀】受益于這些技術(shù)突破,基于寬帶技術(shù)的網(wǎng)絡(luò)圖像應(yīng)用在遠(yuǎn)程監(jiān)控中逐步得到。隨著寬帶的普及、數(shù)字監(jiān)控設(shè)備成本的降低,網(wǎng)絡(luò)視頻監(jiān)控已經(jīng)成為。監(jiān)控領(lǐng)域又一個(gè)新的發(fā)展方向。本文介紹了基于Inter網(wǎng)絡(luò)多客戶端的視頻監(jiān)??叵到y(tǒng)的結(jié)構(gòu)和特點(diǎn),并對(duì)它的設(shè)計(jì)的要點(diǎn)進(jìn)行了分析和討論。紹和它們的工作機(jī)制。方簡短信息交互,比如連接認(rèn)證。關(guān)鍵詞多線程;COM組件;TCP協(xié)議;RTP協(xié)議;DirectShow;

  

【正文】 屬性頁接口和自定義接口是通過如下方法得到的 if (riid == IID_ISpecifyPropertyPages) { return GetInterface ((ISpecifyPropertyPages *) this,ppv)。} else if (riid == IID_ISend) { return GetInterface ((ISend *) this, ppv) 。} else return CBaseFilter::NonDelegatingQueryInterface (riid, ppv)。 因?yàn)榻邮?filter的接口類似于發(fā)送 filter,所以這里不作詳細(xì)說明。 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ì)量有很大的影響。我們采用拆幀(拆成 1400個(gè)字節(jié))以后再發(fā)送的方法,來降低丟幀率。接收端收到數(shù)據(jù)后,再把屬于同一視頻幀的數(shù)據(jù)再組起來。 發(fā)送端拆幀的算法如下 : while(dwLength0) { //比較緩沖區(qū)的數(shù)據(jù)長度和固定數(shù)據(jù)包長度 1400的大小 dwSnarf =Min DWORD(TS_PACKET_SIZE, dwLength)。 if(dwSnarf==dwLength) //如果是小于 1400字節(jié),標(biāo)記為該數(shù)據(jù)是整幀數(shù)據(jù)然后發(fā)送出去 thisSendPacket(pbBuffer,dwSnarf,96,true,160)。 else //如果是大于 1400字節(jié),標(biāo)記為該數(shù)據(jù)是該幀的一部分?jǐn)?shù)據(jù),然后發(fā)送出去 thisSendPacket(pbBuffer,dwSnarf,96,false,160)。 // increment decrement pbBuffer += dwSnarf。 dwLength= dwSnarf。 //RTPTime::Wait(RTPTime())。 } 在接受端中初始化 RTP會(huì)話時(shí)必須設(shè)置以下參數(shù): RTPSessionParams sessParams。 ()。 //30 video frames per second (1)。 //background thread to call virtual callbacks set by default, but just to be sure (MAX_PACKET_SIZE)。 //setup transmission parameters RTPUDPv4TransmissionParams transParams。 (port)。 其中 SetOwnTimestampUnit()方法表示每秒 30幀的傳輸速率, SetUsePollThread()方法作用啟動(dòng)另一個(gè)線程來運(yùn)行 OnRTPPacket()方法 , SetMaximumPacketSize()設(shè)置最大傳輸數(shù)據(jù)包的長度, SetPortbase()設(shè)置監(jiān)聽端口號(hào)。但這并不會(huì)啟動(dòng)網(wǎng)絡(luò)連接,在初始化會(huì)話之前要調(diào)用 WSAStartup()函數(shù),在結(jié)束時(shí)不要忘了調(diào)用 WSACleanup()方法。接受端的組幀算法如下: bool packetmarker=packHasMarker()。 DWORD length=packGetPayloadLength()。 if(!packetmarker) //未傳完數(shù)據(jù)包 { memcpy(buffer+recvoffset,payloadpointer,length)。 recvoffset+=length。 //更新接收數(shù)據(jù)保存的指針 bufLen+=length。 } 25 else { memcpy(buffer+recvoffset,payloadpointer,length)。 bufLen+=length。 //重新設(shè)置初始化值 len=bufLen。 m_pRecvFilterProcessBuffer(buffer,bufLen)。 recvoffset = 0。 bufLen=0。 //等待時(shí)間 RTPTime::Wait(RTPTime())。 } 變量 packetmarker是用來指示是否已經(jīng)該幀數(shù)據(jù)是否結(jié)束。 Memcpy()函數(shù)用來內(nèi)存數(shù)據(jù)之間的拷貝, GetPayloadLength()是得到接受緩沖區(qū)的數(shù)據(jù)地址,如果該幀的數(shù)據(jù)全部到達(dá)后就調(diào)用 ProcessBuffer()傳給下游 filter處理。該方法的主要代碼如下: IMediaSample * pIMediaSample。 while(true) { hr=m_pOutputGetDeliveryBuffer(amp。pIMediaSample,NULL,NULL,0)。 if (SUCCEEDED(hr)) { pIMediaSampleSetActualDataLength(dataLen)。 pIMediaSampleGetPointer(amp。buffer)。 memcpy(buffer,pBuffer,dataLen)。 m_pOutputDeliver(pIMediaSample)。 pIMediaSampleRelease()。 break。} else Sleep(1000)。} GetDeliveryBuffer()發(fā)送得到下游 filter的存放數(shù)據(jù)內(nèi)存地址的請(qǐng)求,然后把接受到的視頻幀數(shù)據(jù)拷貝到該內(nèi)存地址,然后調(diào)用下游 filter的 Deliver()方法通知該下游 filter。如果該內(nèi)存塊正在被用,該線程就睡眠 1秒, 1秒之后醒來重新發(fā)送請(qǐng)求,直到請(qǐng)求成功。 開發(fā)好 filter后,可以編譯生成 dll和 ax為后綴的文件,不過 filter一般生成 .ax文件,然后用 regsvc32 /path 注冊(cè),這 樣就可以在應(yīng)用程序里使用了。不過要注意的是 filter文件注冊(cè)后不能被移動(dòng)到其它路徑,如果被移動(dòng)了要重新注冊(cè)。 26 4 總結(jié) 本文簡要介紹了基于 Inter 的多客戶端的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的主要功能及體系結(jié)構(gòu),重點(diǎn)討論了 filter 的開發(fā)、 DirectShow 應(yīng)用程序的開發(fā)、網(wǎng)絡(luò)監(jiān)聽服務(wù)器和客戶端的開發(fā)以及各部分的功能模塊圖和部分程序代碼這些技術(shù)的實(shí)現(xiàn),滿足了系統(tǒng)的需要,優(yōu)化了系統(tǒng)的性能。目前基于該模型的系統(tǒng)處于試運(yùn)行階段,還存在許多問題與不足,如在客戶端設(shè)置遠(yuǎn)程 IP地址和 PORT 號(hào)需要兩次、服務(wù)器端有時(shí) 會(huì)出現(xiàn)異常、服務(wù)器的分布式功能沒有實(shí)現(xiàn)等。因此在今后的工作里,這些功能與技術(shù)還需要加以提高和實(shí)現(xiàn)。網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)無論是在開發(fā)過程中,還是建成后的日常維護(hù)過程中,都需要進(jìn)行嚴(yán)格的檢測,以保證網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的服務(wù)質(zhì)量。 此系統(tǒng)的關(guān)鍵是實(shí)現(xiàn)視頻接受和發(fā)送模塊的功能也就是接受 filter 和發(fā)送 filter 的開發(fā),也是此系統(tǒng)的難點(diǎn),所以對(duì)這一模塊一定要肯花時(shí)間和精力去做,和同組成員進(jìn)行技術(shù)上的計(jì)論,同時(shí)多征求指導(dǎo)老師的意見和建議。以便完成得更好。 我認(rèn)為開發(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)書籍,以及相關(guān)的系統(tǒng)樣例。了解各模塊的功能實(shí)現(xiàn)的方式,確定各模塊實(shí)現(xiàn)應(yīng)運(yùn)用技術(shù),查找這些技術(shù)的有關(guān)資料。利用好網(wǎng)絡(luò)資源和學(xué)校圖書館資源。 (2) 基于 Inter的多客戶端的 網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的 filter開發(fā)編程語言采用C++,由于自己沒有學(xué)過 C++,所以應(yīng)該在準(zhǔn)備開發(fā)之前就應(yīng)學(xué)會(huì) C++的基礎(chǔ)知識(shí),要細(xì)心,耐心和虛心的學(xué)習(xí) C++,不懂的地方及時(shí)弄懂。此系統(tǒng)涉及的開發(fā)技術(shù)還有 DirectShow、 Filter、 RTP 協(xié)議,由于自己是第一次做視頻方面的, 所以要花時(shí)間去了解這些技術(shù)的基礎(chǔ)介紹,練習(xí)寫些與之相關(guān)的程序。 (3) 在開發(fā)過程中要注意多線程的同步問題、網(wǎng)絡(luò)數(shù)據(jù)讀寫采用何種方式、資源的釋放問題。服務(wù)器要啟動(dòng)多個(gè)線程來接受多個(gè)客戶端, filter 中要采用多個(gè)線程來處理視頻數(shù)據(jù)處理和傳輸 ,所以都要保證線程的同步,不然會(huì)造成程序邏輯錯(cuò)誤,甚至可能造成程序的崩潰。如果網(wǎng)絡(luò)通信結(jié)束后,沒有及時(shí)關(guān)閉連接和數(shù)據(jù)流的話,就會(huì)使資源不能收回。 在本系統(tǒng)開發(fā)過程中遇到了如下的問題 : (1) 在 VC++ 平臺(tái)開發(fā)環(huán)境的配置 jrtplib directshow sdk 庫和頭文件時(shí)遇到了 錯(cuò)誤,原因是頭文件目錄排放順序不對(duì)。 27 (2) 在開發(fā) filter 中網(wǎng)絡(luò)數(shù)據(jù)發(fā)送和接受時(shí),編譯時(shí)出現(xiàn)了 jrtplib 錯(cuò)誤,原因是沒有導(dǎo)入 。出現(xiàn)了不能發(fā)送數(shù)據(jù)和接受數(shù)據(jù),原因是沒有啟動(dòng) WSAStartup()函數(shù)。 (3) 在 filter 的測試中,出現(xiàn)了內(nèi)存會(huì)一直增加,直到達(dá)到內(nèi)存為 100%,原因是在 C++中用 new 申請(qǐng)的內(nèi)存,沒有用 delete 收回內(nèi)存。 (4) 在把接受 filter 和 divx 的解碼器 filter 連接時(shí),出現(xiàn)了不類型不同錯(cuò)誤,原因是接受 filter 媒體類型在 divx 解碼器 filter 中不允許。 (5) 在 啟動(dòng)服務(wù)器或客戶端時(shí)有時(shí)會(huì)出現(xiàn)交叉線程錯(cuò)誤,可能原因是在主線程窗口啟動(dòng)另一個(gè)線程,而在該線程中關(guān)閉了該窗口。 (6) 在客戶端傳輸?shù)臄?shù)據(jù)在服務(wù)器顯示的是亂碼,原因是客戶端和服務(wù)器對(duì)字符的編碼選擇不統(tǒng)一。 (7) 在用 MD5提供類對(duì)密碼進(jìn)行加密時(shí),想得到 128 位,程序會(huì)出現(xiàn)異常,在MSDN 里找到了原因,原來想利用 MD5 加密類得到大于 32 位的話,要安裝密碼服務(wù)組件,而且和操作系統(tǒng)有一定關(guān)系。 (8) 在用戶登陸驗(yàn)證時(shí),出現(xiàn)了沒有該用戶錯(cuò)誤。經(jīng)過 debug 調(diào)試發(fā)現(xiàn)從數(shù)據(jù)庫取出的該用戶名后有空格,用 ()方法來去掉字符 串的兩邊空格,就解決了問題。 28 參考文獻(xiàn) [1] Stevens . TCP/IP詳解 卷一:協(xié)議 北京 :機(jī)械工作出版社 , [2] jonesamp。jim Ohlund .Windows 網(wǎng)絡(luò)編程 . 北京 :清華大學(xué)出版社 , [3] 四維科技 ,曹衍龍 ,劉海英 . Visual C++網(wǎng)絡(luò)通信實(shí)用案例 . 北京 :人民郵電出版社 , [4] Stevens .TCP/IP詳解 卷二 :實(shí)現(xiàn) 北京 :機(jī)械工作出版社 , [5] Chris Sells .Windows Forms 程序設(shè)計(jì) . 北京 :人民郵電出版社 , [6] Jeffrey Richter .NET框架程序設(shè)計(jì) . 北京 : 清華大學(xué)出版社 , [7] 吳志軍 ,馬 蘭 ,沈笑云 Visual C++視頻會(huì)議開發(fā)技術(shù)與實(shí)例 .北京 :人民郵電出版社 , [8] 易向東 ,陳蓓 ,萬英 .C程序員開發(fā)指南 . 北京 :中國林業(yè)出版社 , [9] 陸其明 . DirectShow開發(fā)指南 . 北京 :清華大學(xué)出版社 , [10]Jori Liesenbs , . 29 致謝 在此論文完稿之際,首先要向給予我悉心指導(dǎo)、精心培養(yǎng)的導(dǎo)師蔣冠雄老師致以最衷心的感謝 !在這一學(xué)期的學(xué)習(xí)生活中,指導(dǎo)導(dǎo)師以其嚴(yán)謹(jǐn)求實(shí)的治學(xué)態(tài)度,精深淵博的學(xué)術(shù)造詣和兢兢業(yè)業(yè)的工作精神深深地影響著我 .正是蔣老師在這段時(shí)間里給與我的不斷鼓勵(lì)和指導(dǎo),我才能在學(xué)業(yè)和生活中不斷進(jìn)步。 與此同時(shí),我要感謝紹興文理學(xué)院 工學(xué)院計(jì)算機(jī)系的各位老師和同學(xué)們的指 導(dǎo)與幫助。感謝我的室友和朋友們對(duì)我的關(guān)心和幫助。 最后,特別感謝我的父母,在我十六年求學(xué)生涯中給與我的無限支持和鼓勵(lì)。 王國政 2021年 5月
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1