基于IOCP的MPEG-4出租車無線視頻監(jiān)控系統(tǒng)設(shè)計與實現(xiàn)

運動偵測和曲線平衡分配
來源:電子產(chǎn)品世界 更新日期:2008-12-04 作者:佚名
內(nèi)容導(dǎo)航:  分頁瀏覽 | 全文瀏覽

  運動偵測和曲線平衡分配

  XviD提供了多極運動偵測精度。包括半像素插值(half pixel interpolation)的技術(shù)以l6x16像素的微區(qū)塊為單元標(biāo)示上運動矢量;以及4分運動矢量(inter4v motion vectors)的方式,以8x8的像素區(qū)塊為單元更細(xì)致的紀(jì)錄運動向量以供二重分析。

  ·動態(tài)關(guān)鍵幀距

  在視頻壓縮中,I幀記錄全部的畫面信息,而后續(xù)插入的P幀(P—Frame)僅記錄下與之前一幀的差值。因此根據(jù)畫面鏡頭切換和運動幅度變換關(guān)鍵幀I幀的位置,對于視頻壓縮下的畫面質(zhì)量提高,有明顯效果。

  ·人類視覺系統(tǒng)HVS(Human Visual System)

  人類視覺系統(tǒng),根據(jù)人類視覺的特性,建立模型,量化的時候根據(jù)這些特性,將人眼較不敏感的區(qū)域壓得差一點,將人眼較容易注意到的區(qū)域壓得好一點,可以提升肉眼看起來的品質(zhì)。

  完成端口(IOCP)機(jī)制

  IOCP(I/O Completion Port,輸入/輸出完成端口)是一種能夠合理利用與管理多線程的機(jī)制。該機(jī)制使用完成端口,用一定數(shù)量的線程處理重疊I/O(Overlapped I/O)技術(shù),幫助處理大量客戶端請求,并使系統(tǒng)的性能達(dá)到較佳狀態(tài) 。從性能上考慮,與采用Select模型和Overlapped模型相比,采用完成端口模型在請求響應(yīng)的并行性上更勝一籌,I/O完成端口提供的多線程特性是一般異步模型所無法達(dá)到的。而且IOCP尤其適合為大量I/O請求提供服務(wù),對于提高服務(wù)器效率大有裨益。
  
  系統(tǒng)分析與實現(xiàn)

  本解決方案的開發(fā)基礎(chǔ)為Windows Server2003,開發(fā)工具為VC.NET2003。

  數(shù)據(jù)包裝和解析的實現(xiàn)

網(wǎng)絡(luò)傳輸數(shù)據(jù)包通過自加包頭進(jìn)行解析,通過不同通道傳送視頻數(shù)據(jù)/控制命令。加載過程如圖3。

  服務(wù)器的網(wǎng)絡(luò)傳輸部分的實現(xiàn)

  服務(wù)器通過UI線程和Worker線程池(Threads Poo1)來確保服務(wù)器對多個客戶端的并發(fā)控制和通訊。服務(wù)器通訊功能主要實現(xiàn)簡述如下:

  1.啟動監(jiān)聽線程并初始化完成端口(IOCP)核心對象,進(jìn)入對CDMA終端喝監(jiān)控終端的監(jiān)聽狀態(tài),主要通過CreateIoCompletionPort函數(shù)實現(xiàn),此函數(shù)主要實現(xiàn)兩個功能1)建立IOCP對象,2)將接受到的套接字(SOCKET)同IOCP關(guān)聯(lián)。

  HANDLE CreateIoCompletionPort(
        HANDLE FileHandle,//功能1時為INVALID_HANDLE_VALUE,功能2時為接受的SOCKET
  HANDLE ExistingCompletionPort,,//功能1時賦值NULL,功能2時輸入已建立的IOCP對象
  ULONG_PTR CompletionKey,//完成鍵自設(shè)的數(shù)據(jù)結(jié)構(gòu),功能1時為NULL,功能2時完成鍵
  DWORD  NumberOfConcurrentThreads ) //同時可操作IOCP對象的線程數(shù),設(shè)為CPU數(shù)×2+2

  2.調(diào)用異步接收函數(shù)WSARecv()發(fā)起接收      SAOVERLAPPED_COMPLETION_ROUTINE  lpCompletionRoutine);

  3.查看完成端口的通訊隊列,異步接收出租車終端發(fā)送的數(shù)據(jù)和通訊命令,通過調(diào)用GetQueuedCompletionStatus( )函數(shù)實現(xiàn),
  BOOL GetQueuedCompletionStatus(
  HANDLE CompletionPort,//查看的完成端口對象
  LPDWORD lpNumberOfBytes,,// 期望讀入的字節(jié)數(shù)
  PULONG_PTR lpCompletionKey,// 完成鍵,自設(shè)的數(shù)據(jù)結(jié)構(gòu)
  LPOVERLAPPED* lpOverlapped,// 重疊IO標(biāo)志,每次查詢時需事先清零復(fù)位
  DWORD dwMilliseconds) // 設(shè)置查詢超時時間

  4.自設(shè)完成鍵數(shù)據(jù)結(jié)構(gòu)如下,包含

  struct CMD_CDMA_LINK_INFO
  {   SOCKET m_hSocket;             // 通訊套接字SOCKET
 UINT m_uiCDMAId;             //無符號整型變量保存出租車終端ID
 CString m_strCDMAIP;         //字符串變量保存出租車終端IP地址
 bool  m_bCmdCDMALinkState;   //布爾型變量保存連接狀態(tài)
 int   m_nNumberOfPendlingIO; //整型變量保存掛起I/O數(shù)
 bool  m_bAlarm;    //布爾型變量保存報警標(biāo)志   
    CCriticalSection m_cmdCDMALinkInfoLock; };//臨界區(qū)變量,作線程同步

  客戶端的解壓實現(xiàn)

  客戶端也采用多個線程并行處理的模式,分別負(fù)責(zé)數(shù)據(jù)通訊、數(shù)據(jù)處理、解壓顯示和地圖刷新,MPEG-4的解碼主要采用XviD解壓庫。MPEG-4協(xié)議有非對稱性的特點,即壓縮運算量大,復(fù)雜性高,為保證視頻信息的實時性,視頻采集壓縮由硬件完成;而解壓運算量較小,可以借鑒XviD編解碼技術(shù)來實現(xiàn)。如前所述,XviD編解碼技術(shù)有很多突出的優(yōu)點。在解碼過程中解壓主函數(shù)實現(xiàn)如下
    int CDecThread::dec_main(BYTE* istream, BYTE* ostream,int istream_size,
    xvid_dec_stats_t * xvid_dec_stats)
    {int ret=XviD_ERR_FAIL; //默認(rèn)值-1
    /* Reset all structures */
    memset(&xvid_dec_frame, 0, sizeof(xvid_dec_frame_t)); 
     memset(xvid_dec_stats, 0, sizeof(xvid_dec_stats_t));         //初始化所有數(shù)據(jù)結(jié)構(gòu)
     /* Set version設(shè)置解壓版本*/
     xvid_dec_frame.version = XviD_VERSION; 
     xvid_dec_stats->version = XviD_VERSION;
     /* No general flags to set //設(shè)置主標(biāo)志位*/
     xvid_dec_frame.general          = 0;
     /* Input stream輸入解壓數(shù)據(jù)流*/
     xvid_dec_frame.bitstream        = istream; 
     xvid_dec_frame.length           = istream_size;
     /* Output frame structure輸出幀結(jié)構(gòu) */
     xvid_dec_frame.output.plane[0]  = ostream;
     xvid_dec_frame.output.stride[0] = m_nXDIM*m_nBPP;
     xvid_dec_frame.output.csp = m_nCSP;
     ret = xvid_decore(dec_handle, XviD_DEC_DECODE, &xvid_dec_frame, xvid_dec_stats);
     return(ret);


  
結(jié)語

  本文從MPEG-4數(shù)字視頻監(jiān)控的定制系統(tǒng)出發(fā),通過研究,提出了一般的實現(xiàn)方法。通過模塊化設(shè)計并使用COM封裝,使系統(tǒng)主體做到與前端硬件的低耦合度,易于維護(hù) 使用完成端口技術(shù)傳輸視頻,同時,客戶端軟件使用Xvid實現(xiàn)了解壓。本文所淪述的方法已經(jīng)在實際工程中得到應(yīng)用,取得了良好的效果。

 標(biāo)簽:
上一頁 1 2 3 
本文導(dǎo)航
推薦視頻會議廠商
廣告聯(lián)系:010-82755684 | 010-82755685 手機(jī)版:m.pjtime.com官方微博:weibo.com/pjtime官方微信:pjtime
Copyright (C) 2007 by PjTime.com,投影時代網(wǎng) 版權(quán)所有 關(guān)于投影時代 | 聯(lián)系我們 | 歡迎來稿 | 網(wǎng)站地圖
返回首頁 網(wǎng)友評論 返回頂部 建議反饋
快速評論
驗證碼: 看不清?點一下
發(fā)表評論