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

正文內容

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

2024-12-03 15:19本頁面

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