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

來(lái)源:電子產(chǎn)品世界 更新日期:2008-12-04 作者:佚名

概述

    出租車(chē)行業(yè)的發(fā)展給人們的出行帶來(lái)了極大的便利,伴隨租出車(chē)數(shù)量的增多一些針對(duì)出租車(chē)的強(qiáng)盜案件也逐年上升,出租車(chē)公司對(duì)車(chē)輛狀態(tài)的監(jiān)測(cè)也成為緊迫的需求。針對(duì)此種情況開(kāi)發(fā)了基于MPEG-4的出租車(chē)無(wú)線(xiàn)視頻監(jiān)控解決方案,本文主要介紹方案的軟件系統(tǒng)。本系統(tǒng)同已有的局域網(wǎng)監(jiān)控相比具有明顯的優(yōu)勢(shì)。不受地域、距離限制無(wú)須布線(xiàn),非常適合出租車(chē)分布范圍廣,移動(dòng)范圍大,終端數(shù)量多的特性。

  MPEG-4(ISO/IEC14496)通過(guò)幀重建技術(shù)來(lái)壓縮和傳輸數(shù)據(jù),以極少的數(shù)據(jù)量獲得了極佳的圖像效果,已成為目前市場(chǎng)上數(shù)字視頻編解碼技術(shù)的主流。

  本文結(jié)合出租車(chē)實(shí)際情況設(shè)計(jì)了整體架構(gòu),硬件電路,軟件框架和具體實(shí)現(xiàn)的整套解決方案。硬件設(shè)計(jì)劃分為基于TMS320DM270雙核處理器的視頻采集處理模塊、CDMA傳輸模塊和GPS接收模塊。軟件設(shè)計(jì)劃分為整體調(diào)度模塊、采用完IOCP技術(shù)的網(wǎng)絡(luò)傳輸模塊、采用XviD開(kāi)放源碼構(gòu)造的MPE-4視頻解壓播放模塊、基于MySQL的數(shù)據(jù)庫(kù)存儲(chǔ)模塊。整個(gè)系統(tǒng)模型具有很高的擴(kuò)展性,各部分功能方便重用和替換,經(jīng)測(cè)試是一套實(shí)用可靠的高效方案。

  系統(tǒng)總體結(jié)構(gòu)

  網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)

  網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖如圖1所示,整個(gè)系統(tǒng)分為3部分。

    每一臺(tái)出租車(chē)裝有一個(gè)嵌入式設(shè)備,包括CDMA通訊模塊、GPS采集模塊、視頻輸入輸出模塊和基于TMS320DM270的MPEG-4編碼、控制模塊,在出租車(chē)終端完成視頻信號(hào)的采集、轉(zhuǎn)換和壓縮。從CDMA內(nèi)網(wǎng)發(fā)起對(duì)服務(wù)器的連接,進(jìn)行通訊。

       ·CDMA網(wǎng)中的出租車(chē)終端

    ·服務(wù)器

  高性能服務(wù)器架設(shè)在公網(wǎng),通過(guò)出租車(chē)終端的IP和ID管理各個(gè)終端,所有監(jiān)控終端與出租車(chē)終端通訊的命令和請(qǐng)求也都通過(guò)服務(wù)器進(jìn)行轉(zhuǎn)發(fā),可以通過(guò)服務(wù)器設(shè)置不同監(jiān)控終端的訪(fǎng)問(wèn)權(quán)限,出租車(chē)報(bào)警后發(fā)送的視頻和圖片數(shù)據(jù)都在服務(wù)器備份,實(shí)時(shí)GPS數(shù)據(jù)通過(guò)數(shù)據(jù)庫(kù)保存。

  ·客戶(hù)端

  采用C/S模式,在普通PC機(jī)上安裝客戶(hù)端軟件,在Internet上的任意位置,使用經(jīng)過(guò)授權(quán)的用戶(hù)名及密碼可訪(fǎng)問(wèn)有固定IP地址的服務(wù)器實(shí)現(xiàn)實(shí)時(shí)監(jiān)控。

  ·軟件體系結(jié)構(gòu)

  軟件的體系結(jié)構(gòu)及各個(gè)部分之間的數(shù)據(jù)流和控制流的交互如圖2。

服務(wù)器端主要有5個(gè)模塊

 服務(wù)器端主要有5個(gè)模塊


  1)服務(wù)器主控制模塊:完成整個(gè)服務(wù)器系統(tǒng)的初始化,解析網(wǎng)絡(luò)模塊接收到的數(shù)據(jù)和命令,調(diào)用其他模塊進(jìn)行相應(yīng)的處理,實(shí)現(xiàn)具體功能

  2)網(wǎng)絡(luò)傳輸模塊:所有的數(shù)據(jù)流和控制命令都通過(guò)調(diào)用網(wǎng)絡(luò)傳輸模塊的接收和發(fā)送功能來(lái)實(shí)現(xiàn)。

  3)用戶(hù)管理模塊:對(duì)登錄到服務(wù)器的用戶(hù)進(jìn)行身份和權(quán)限認(rèn)證。根據(jù)設(shè)定的權(quán)限和分組規(guī)則,為用戶(hù)提供對(duì)應(yīng)的服務(wù)?尚薷墓芾韱T和個(gè)人用戶(hù)密碼。保證系統(tǒng)的安全性和保密要求。

  4)文件操作模塊:增加、刪除、修改、查詢(xún)文件。對(duì)接收到需要保存的圖片和圖像數(shù)據(jù)寫(xiě)文件保存,為客戶(hù)端的請(qǐng)求提供文件。

  5)數(shù)據(jù)庫(kù)模塊:增加、修改、查詢(xún)和刪除,GPS信息、錯(cuò)誤記錄和日志記錄。

  客戶(hù)端有3個(gè)模塊

  1)視頻顯示模塊:調(diào)用sPlayer.ocx解壓顯示圖像。

  2)地圖顯示模塊:通過(guò)對(duì)sinomaps的地圖控件二次開(kāi)發(fā)生成mapspeed.ocx,實(shí)時(shí)顯示出租車(chē)的位置。

  3)文件操作模塊和網(wǎng)絡(luò)模塊與服務(wù)器端的功能基本相同。

  系統(tǒng)主要技術(shù)

  MPEG-4視頻壓縮技術(shù)

  MPEG-4標(biāo)準(zhǔn)稱(chēng)為甚低比特率視音頻編碼標(biāo)準(zhǔn)(Very low bit rate audio visual coding) ,正式編號(hào)是ISO/IEC14496。MPEG一4標(biāo)準(zhǔn)是一個(gè)基于對(duì)象內(nèi)容的視音頻編碼壓縮標(biāo)準(zhǔn).其目標(biāo)是利用最少的數(shù)據(jù)獲得最佳自勺圖像質(zhì)量和聲音質(zhì)量,它是一種多媒體數(shù)據(jù)框架和格式的定義,而不只是具體算法.它將眾多的多媒體應(yīng)用集成于一個(gè)完整的標(biāo)準(zhǔn)框架內(nèi)。為視音頻多媒體數(shù)據(jù)提供通用、靈活、高效、開(kāi)放的編碼算法工具皮編碼方案。建立起能夠被多媒體傳輸、存取、檢索等不同應(yīng)用普遍采用的統(tǒng)一數(shù)據(jù)格式。

  測(cè)試表明,MPEG-4視音頻全同步時(shí)數(shù)據(jù)流量為36Kb~336Kb,僅為MJPG或MPEG1的1/10,畫(huà)面質(zhì)量可以達(dá)到近似DVD的效果。

  XviD編解碼技術(shù)

  ·多種編碼模式

  除了最原始單重估定碼流壓縮(1一passCBR)之外,XviD提供了包括:?jiǎn)沃刭|(zhì)量模式動(dòng)態(tài)碼流壓縮、單重量化(Quantization)模式動(dòng)態(tài)碼流壓縮、和包括外部控制和內(nèi)部控制的兩種雙重(2一pass)動(dòng)態(tài)碼流壓縮模式。XviD顯然是目前PC上的MPEG4編碼內(nèi)核中,可選模式最多的視頻編碼。

  ·量化方式和范圍控制

  XviD不僅提供了標(biāo)準(zhǔn)的MPEG量化方式,還特地提供了更適合低碼流壓縮的H.263量化方式。并且XviD還可以在雙重(2-pass)運(yùn)算時(shí),根據(jù)對(duì)畫(huà)面信息的綜合分析,動(dòng)態(tài)的決定某段場(chǎng)景的畫(huà)面量化方式。除了量化方式選擇,XviD還提供了強(qiáng)大的對(duì)壓縮過(guò)程中的量化幅度的范圍控制。

運(yùn)動(dòng)偵測(cè)和曲線(xiàn)平衡分配

  

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

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

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

  ·人類(lèi)視覺(jué)系統(tǒng)HVS(Human Visual System)

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

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

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

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

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

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

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

  服務(wù)器通過(guò)UI線(xiàn)程和Worker線(xiàn)程池(Threads Poo1)來(lái)確保服務(wù)器對(duì)多個(gè)客戶(hù)端的并發(fā)控制和通訊。服務(wù)器通訊功能主要實(shí)現(xiàn)簡(jiǎn)述如下:

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

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

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

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

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

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

  客戶(hù)端的解壓實(shí)現(xiàn)

  客戶(hù)端也采用多個(gè)線(xiàn)程并行處理的模式,分別負(fù)責(zé)數(shù)據(jù)通訊、數(shù)據(jù)處理、解壓顯示和地圖刷新,MPEG-4的解碼主要采用XviD解壓庫(kù)。MPEG-4協(xié)議有非對(duì)稱(chēng)性的特點(diǎn),即壓縮運(yùn)算量大,復(fù)雜性高,為保證視頻信息的實(shí)時(shí)性,視頻采集壓縮由硬件完成;而解壓運(yùn)算量較小,可以借鑒XviD編解碼技術(shù)來(lái)實(shí)現(xiàn)。如前所述,XviD編解碼技術(shù)有很多突出的優(yōu)點(diǎn)。在解碼過(guò)程中解壓主函數(shù)實(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é)語(yǔ)

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

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