<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 設(shè)計(jì)應(yīng)用 > 多路MPEG-4監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

          多路MPEG-4監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2007-03-09 來源:網(wǎng)絡(luò) 收藏
          摘要:介紹了一個(gè)基于PCI總線的多路MPEC-4數(shù)字監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。本系統(tǒng)將采集到的多路音、視頻數(shù)據(jù)以MPEG-4標(biāo)準(zhǔn)進(jìn)行壓縮編碼,將編碼后的數(shù)據(jù)碼流通過PCI總線傳送至計(jì)算機(jī),并進(jìn)行存儲(chǔ)、回放和檢索等處理。詳細(xì)介紹了整個(gè)系統(tǒng)的設(shè)計(jì)流程,同時(shí)介紹了板卡與主機(jī)之間實(shí)現(xiàn)高速數(shù)據(jù)傳輸?shù)臋C(jī)制。本系統(tǒng)可在單機(jī)上實(shí)現(xiàn)16-32路的音、視頻監(jiān)控,具有很高的性價(jià)比。關(guān)鍵詞:數(shù)字監(jiān)控系統(tǒng) MPEC-4 高速數(shù)據(jù)傳輸 視頻監(jiān)控系統(tǒng)的發(fā)展經(jīng)歷了模擬監(jiān)控和數(shù)字監(jiān)控兩個(gè)階段。與模擬監(jiān)控系統(tǒng)相比,數(shù)字監(jiān)控系統(tǒng)不僅可以利用計(jì)算機(jī)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)、分析和檢索等處理,而且還具有抗干擾能力強(qiáng)、傳輸距離遠(yuǎn)、圖像質(zhì)量高等優(yōu)點(diǎn)。數(shù)字監(jiān)控系統(tǒng)也可以和計(jì)算機(jī)網(wǎng)絡(luò)相結(jié)合來實(shí)現(xiàn)系 統(tǒng)的遠(yuǎn)程控制,易于維護(hù)和管理。因此,數(shù)字監(jiān)控系統(tǒng)正逐步取代模擬監(jiān)控系統(tǒng),具有良好的應(yīng)用前景。 目前國內(nèi)的數(shù)字視頻監(jiān)控系統(tǒng)中單機(jī)的監(jiān)控能力一般不超過16路,每路的圖像壓縮碼率的調(diào)節(jié)范圍較小,而且圖像格式主要以CIF為主[5~6]。本文介紹的系統(tǒng)在單機(jī)上最多可以達(dá)到32路的監(jiān)控能力,而且可以保證音、視頻的嚴(yán)格同步。同時(shí),本系統(tǒng)支持CIF和QCIF等多種圖像格式,壓縮碼率調(diào)節(jié)范圍較大,可以滿足多種場合的監(jiān)控需求。圖11 多路MPEG-4監(jiān)控系統(tǒng)結(jié)構(gòu) 本系統(tǒng)采用基于PCI總線板卡的架構(gòu),一塊板卡可以監(jiān)控4路音、視頻數(shù)據(jù)。系統(tǒng)視頻輸入支持NTSC和PAL制式,采用MPEG-4標(biāo)準(zhǔn)對(duì)輸入的多路音、視頻信息進(jìn)行壓縮編碼、解碼,并提供運(yùn)動(dòng)檢測等附加功能。在工控機(jī)上,利用軟件可以很方便地對(duì)采集到的音、視頻信息進(jìn)行存儲(chǔ)、檢索和回放。系統(tǒng)利用高速PCI總線與微機(jī)進(jìn)行通信,實(shí)現(xiàn)高速數(shù)據(jù)和控制碼流的傳輸。整個(gè)硬件系統(tǒng)由攝像和云臺(tái)模塊、電源模塊、視頻采集模塊、視頻預(yù)處理模塊、EPLD控制模塊、音頻編碼模塊、MPEG-4多媒體壓縮編碼模塊和PCI總線控制模塊組成,其連接框圖如圖1所示。 多路視頻采集模塊對(duì)輸入的視頻信號(hào)進(jìn)行模/數(shù)轉(zhuǎn)換。該模塊支持復(fù)合視頻輸入,經(jīng)過轉(zhuǎn)換后的輸出信號(hào)是符合ITU-656標(biāo)準(zhǔn)的4:2:2的數(shù)字視頻信號(hào)。同時(shí),該模塊能夠自動(dòng)識(shí)別輸入信號(hào)的制式。其支持的復(fù)合視頻制式有NTSC、PAL和SECAM三種。 視頻預(yù)處理模塊通過對(duì)模塊中芯片的內(nèi)部寄存器進(jìn)行設(shè)置來實(shí)現(xiàn)對(duì)視頻輸出的亮度、對(duì)比度和色度的調(diào)整,以及對(duì)視頻圖像尺寸、子圖的大小、位置等的控制。 EPLD控制模塊主要根據(jù)控制流信息將視頻預(yù)處理模塊輸出的ITU-656數(shù)字視頻進(jìn)行格式轉(zhuǎn)換,并輸出到MPEG-4壓縮編碼模塊中。同時(shí),它也提供行、場等同步信號(hào)。EPLD控制模塊還根據(jù)后向控制流為音頻編碼模塊提供多路幀同步信號(hào)。 音頻編碼模塊對(duì)輸入的音頻進(jìn)行μ律PCM編碼。MPEG-4多媒體壓縮編碼模塊完成音、視頻信號(hào)的MPEG-4壓縮編碼,并輸出到PCI總線控制模塊,同時(shí)提供運(yùn)動(dòng)檢測等附加信息。PCI總線控制模塊主要負(fù)責(zé)板卡與主機(jī)間的MPEG-4碼流和控制流信息的高速傳輸。 2 MPEG-4壓縮編碼模塊 MPEG-4壓縮編碼模塊采用的是INTIME公司的IME6400芯片。IME6400是一塊多通道實(shí)時(shí)數(shù)字音視頻MPEG-4/2/1壓縮芯片。它不僅可以支持原始的音、視頻信息,而且還支持PCM編碼的音頻信號(hào)等。IME6400具有多種輸出數(shù)據(jù)格式,這使得它在圖像數(shù)據(jù)存儲(chǔ)、傳輸?shù)确矫婢哂袕V泛的應(yīng)用。 IME6400是按照內(nèi)部的fireware工作的。在實(shí)現(xiàn)上,fireware軟件既可以存放在一個(gè)外掛的ROM中,也可以從外部主機(jī)通過IME6400的Host Interface(主機(jī)接口)下載到芯片中去[1]。本系統(tǒng)中采用外掛ROM的方法,這樣用戶可以選擇fireware的版本并定期進(jìn)行軟件更新。IME6400的原理框圖[1]如圖2所示。在本系統(tǒng)中,音頻編碼模塊和EPLD控制模塊的輸出與IME6400的音、視頻輸入模塊相連接,然后由IME6400完成音、視頻信號(hào)的MPEG-4壓縮編碼。IME6400利用主機(jī)接口和PCI總線控制模塊之間的相連,構(gòu)成數(shù)據(jù)和控制通道。同時(shí),外掛SDRAM用來存儲(chǔ)已編碼的碼流,而內(nèi)部1KByte的FIFO用來實(shí)現(xiàn)編碼碼流的快速傳輸。外部主機(jī)可以按照規(guī)定的流程對(duì)一些恰當(dāng)?shù)闹鳈C(jī)接口控制寄存器進(jìn)行讀或?qū)懖僮?,還可以完成直接寄存器讀寫、IME6400系統(tǒng)內(nèi)存的訪問、FIFO緩沖區(qū)的訪問和firmware軟件的下載等操作。 除了上述功能外,IME6400還可以根據(jù)主機(jī)自定義的運(yùn)動(dòng)檢測要求實(shí)現(xiàn)運(yùn)動(dòng)檢測,并將檢測到的信息以包的形式傳送給主機(jī)。 3 PCl 總線控制模塊 PCI總線控制模塊采用的是PHILIPS公司的SAA7146A PCI橋芯片。它具有三個(gè)視頻DMA通道和四個(gè)音頻DMA通道,同時(shí)集成了一些單元模塊,如MMU、BPS和HPS等。它還包含了眾多接口,可以和眾多的音、視頻處理芯片實(shí)現(xiàn)無縫連接,為多媒體數(shù)據(jù)的傳輸和處理提供比較廣泛的應(yīng)用。SAA7146A的原理框圖[2]如圖3所示。 數(shù)據(jù)擴(kuò)展總線接口(DEBl)為外圍設(shè)備提供了8/16位的數(shù)據(jù)傳輸和控制功能,支持立即傳輸和塊傳輸兩種方式。在系統(tǒng)中,SAA7l46A的DEBI跟MPEG-4壓縮編碼模塊相連接,實(shí)現(xiàn)MPEG-4壓縮碼流的接收。同時(shí),通過PCI總線接口模塊,利用DMA傳輸方式在計(jì)算機(jī)和硬件板卡間實(shí)現(xiàn)壓縮碼流的高速傳輸。SAA7146A具有I2C總線接口,可以很方便地對(duì)具有12C接口的外圍芯片進(jìn)行控制。 SAA7146A中的D1接口可以和視頻解碼芯片或視頻壓縮芯片相連接,利用HPS可以對(duì)視頻信號(hào)進(jìn)行定標(biāo)、縮放等處理,也可以利用BRS對(duì)視頻信號(hào)進(jìn)行CIF、QCIF或者QQCIF格式轉(zhuǎn)換。 除此之外,SAA7146A還提供了與音頻處理芯片連接的多個(gè)接口。 4 高速數(shù)據(jù)傳輸機(jī)制的設(shè)計(jì) 整個(gè)系統(tǒng)的軟件主要由兩部分組成。一是設(shè)備驅(qū)動(dòng)程序,主要負(fù)責(zé)硬件板卡和計(jì)算機(jī)之間的交互;二是上層應(yīng)用程序,用于實(shí)現(xiàn)系統(tǒng)的功能。由于多路監(jiān)控系統(tǒng)的數(shù)據(jù)傳輸量非常大,因此設(shè)計(jì)一個(gè)高效的驅(qū)動(dòng)程序以實(shí)現(xiàn)高速數(shù)據(jù)傳輸對(duì)整個(gè)系統(tǒng)的性能具有重要的影響。圖34.1 驅(qū)動(dòng)程序的設(shè)計(jì) 本系統(tǒng)的設(shè)備驅(qū)動(dòng)程序采用了Windows 2000下的Windows Driver Model(WDM)驅(qū)動(dòng)程序。在Windows2000中,系統(tǒng)有兩種命名設(shè)備的方法:一種是使用符號(hào)連接名,但它的安全陛不是很好[4];另一種是利用具有唯一性的GUID號(hào)表示設(shè)備接口。上層應(yīng)用程序可以通過上面兩種方法獲得有效的設(shè)備句柄,并利用這個(gè)設(shè)備句柄實(shí)現(xiàn)對(duì)設(shè)備驅(qū)動(dòng)程序的訪問。當(dāng)上層應(yīng)用程序調(diào)用WIN32AHI函數(shù)后,將由Win32子系統(tǒng)調(diào)用I/O服務(wù)接口,并傳送給內(nèi)核模式下的I/O系統(tǒng)服務(wù)模塊。接著,I/0管理器將檢查這個(gè)請求的參數(shù),然后創(chuàng)建一個(gè)合適的I/O請求包(1RP)。這個(gè)IRP經(jīng)過分層驅(qū)動(dòng)程序的處理傳送給一個(gè)合適的設(shè)備驅(qū)動(dòng)程序,并由這個(gè)程序通過硬件抽象層對(duì)硬件進(jìn)行操作,完成這個(gè)IRP請求。最后,I/O管理器把結(jié)果和數(shù)據(jù)還回給應(yīng)用程序[3]。 在本系統(tǒng)的Windows2000的WDM驅(qū)動(dòng)程序中,除了基本的功能模塊[3](如PNP模塊、Dispatch模塊、Power模塊等)外,可以把其余部分大概分為板卡初始化模塊、參數(shù)設(shè)置模塊、中斷服務(wù)模塊和DMA傳輸模塊等。 為了能夠使PCI總線控制模塊實(shí)時(shí)地從壓縮編碼模塊中讀取壓縮碼流,并及時(shí)地傳送給計(jì)算機(jī),本系統(tǒng)采用了中斷機(jī)制。當(dāng)壓縮編碼模塊中的FIFO滿時(shí),壓縮編碼模塊產(chǎn)生一個(gè)中斷信號(hào),通知PCI總線控制模塊啟動(dòng)DMA,利用塊傳輸方式讀取FIFO中的數(shù)據(jù)。同時(shí),IME6400將后面的編碼數(shù)據(jù)暫存在外掛的SDRAM中。 PHILIPS公司的SAA7146A是一片具有總線主控DMA控制器的PCI橋芯片,可以實(shí)現(xiàn)內(nèi)存和設(shè)備間快速的數(shù)據(jù)傳輸。本系統(tǒng)采用“基于包”的DMA傳輸方式;同時(shí),為了進(jìn)一步提高速度,使DMA將數(shù)據(jù)直接搬移到用戶應(yīng)用程序中所申請的循環(huán)緩存區(qū)中。DMA的流程如圖4所示。其中,Saa7l46Read例程的主要功能是進(jìn)行DMA的初始化操作,并啟動(dòng)編碼碼流輸出。AdapterCon-trol例程確保計(jì)算機(jī)處理器高速緩存中的內(nèi)容為當(dāng)前使用的內(nèi)存緩沖區(qū)中的內(nèi)容。DpcForIsr例程完成內(nèi)存物理地址和傳輸?shù)臄?shù)據(jù)長度的獲得,并把它們寫到DMA控制寄存器中,該例程還在合適的條件下與應(yīng)用程序利用事件進(jìn)行通信。 4.2 傳輸機(jī)制的設(shè)計(jì) 在數(shù)字監(jiān)控系統(tǒng)中,為了實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)傳輸,應(yīng)該仔細(xì)設(shè)計(jì)設(shè)備驅(qū)動(dòng)程序和上層應(yīng)用程序間的數(shù)據(jù)傳輸機(jī)制,來確保數(shù)據(jù)的完整性和實(shí)時(shí)性。 Windows2000操作系統(tǒng)把虛擬內(nèi)存地址空間分為用戶模式的虛擬地址空間和內(nèi)核模式的地址空間。一般來講,內(nèi)核模式驅(qū)動(dòng)程序幾乎不使用用戶模式的虛擬地址來訪問內(nèi)存。實(shí)際上,Windows2000操作系統(tǒng)為驅(qū)動(dòng)程序訪問用戶模式的數(shù)據(jù)緩沖區(qū)提供了一種方法:通過應(yīng)用程序調(diào)用DeviceIoControl、ReadFile和WriteFile等I函數(shù),傳遞給這些函數(shù)用戶模式的虛擬地址和數(shù)據(jù)長度等參數(shù),這樣就相當(dāng)于向I/O管理器提供了一個(gè)數(shù)據(jù)緩沖區(qū)。I/O管理器再根據(jù)設(shè)備驅(qū)動(dòng)程序中指定的三種不同機(jī)制[3](buffer方式、direct方式和neither方式)中的一種,利用不同的實(shí)現(xiàn)方法來實(shí)現(xiàn)用戶模式和內(nèi)核模式間數(shù)據(jù)的共享。圖4Buffer方式是一種在對(duì)速度要求不高的情況下常用的方法。在本系統(tǒng)的板卡初始化模塊和參數(shù)設(shè)置模塊中,由于對(duì)速度、數(shù)據(jù)量的要求都不是很高,所以采用了這種方式的共享方法。但是在DMA傳輸模塊中,為了能夠?qū)崿F(xiàn)大量的MPEG-4碼流的高速實(shí)時(shí)傳輸,本系統(tǒng)設(shè)法省去了數(shù)據(jù)傳輸中間的復(fù)制過程,將編碼碼流數(shù)據(jù)直接搬移到應(yīng)用程序的一個(gè)循環(huán)緩沖區(qū)中去。本系統(tǒng)采用的這種方法有點(diǎn)像neither方式,具體的實(shí)現(xiàn)方法如下:應(yīng)用程序申請并鎖定一塊循環(huán)緩沖區(qū),然后將得到的這塊內(nèi)存的用戶模式虛擬地址和長度傳送給內(nèi)核設(shè)備驅(qū)動(dòng)程序。在設(shè)備驅(qū)動(dòng)程序中,利用傳送下來的用戶模式地址和緩沖區(qū)長度為這塊用戶模式緩沖區(qū)創(chuàng)建MDL(內(nèi)存描述符),并將它映射到內(nèi)核模式地址空間,得到一個(gè)內(nèi)核模式的虛擬地址,這樣驅(qū)動(dòng)程序就可以通過這個(gè)地址直接訪問應(yīng)用程序申請的共享內(nèi)存塊。 除了上述的方法外,共享內(nèi)存塊也可以由內(nèi)核驅(qū)動(dòng)程序申請的系統(tǒng)緩沖區(qū)來充當(dāng),并通過轉(zhuǎn)換得到用戶模式的虛擬地址,應(yīng)用程序就可以通過這個(gè)地址直接訪問系統(tǒng)地址。 另外,為了實(shí)現(xiàn)應(yīng)用程序和驅(qū)動(dòng)程序的同步,采用了共享事件的方法[4]。在Windows2000中,應(yīng)用程序和內(nèi)核驅(qū)動(dòng)程序可以共享同一命名的事件,這個(gè)事件可以由任意一方創(chuàng)建。當(dāng)其中一方創(chuàng)建了一個(gè)事件后,就可以把這個(gè)事件的句柄傳送給另一方來實(shí)現(xiàn)事件的共享,然后通過一方捕獲事件信號(hào)態(tài)、另一方設(shè)置事件信號(hào)態(tài)的方法實(shí)現(xiàn)兩者間的通信。 在一臺(tái)CPU速度為1.8G、內(nèi)存為512M的工控機(jī)上,本系統(tǒng)可支持8塊壓縮板卡同時(shí)工作,從而提供對(duì)32路音視頻數(shù)據(jù)的監(jiān)控能力,系統(tǒng)的壓縮率在較寬的范圍內(nèi)可調(diào)。

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();