關鍵詞: arm , 視頻監控
視頻監控系統在工業、軍事、民用領域有著廣泛的應用,為這些行業的安全防范和環境監控起到了不可忽視的作用。視頻監控系統正逐步由模擬化走向數字化,隨著半導體技術的飛速發展和多媒體視頻編解碼技術的日益成熟,高性能、復雜的視頻流壓縮算法在嵌入式系統中的應用成為了現實。如今監控系統多采用專用處理器或RISC嵌入式處理器與DSP相結合的方法實現,本文探討的是用ARM處理器與軟件壓縮相結合的辦法實現。
視頻臨控系統總體設計
首先需要對系統進行總體規劃,將系統劃分成幾個功能模塊,確定各個模塊的實現方法。整個視頻監控系統采用C/S結構,從主體上分為兩部分:服務器端和客戶端。服務器端主要包括S3C2410平臺上運行的采集、壓縮、傳輸程序,客戶端是PC機上運行的接收、解壓、回放程序。視頻監控終端從現場的攝像頭捕獲實時的視頻信息,壓縮之后通過以太網傳輸到視頻監控服務器上。
如系統結構圖(圖1)所示,視頻圖像采集和打包發送在服務器端完成,圖像的接收解包和回放將在客戶端完成。
系統的硬件設計
系統采用模塊化設計方案,主要包括以下幾個模塊:主控制器模塊、儲存電路模塊、外圍接口電路模塊、電源和復位電路,如圖2所示。
S3C2410主控器模塊
主控器模塊是整個系統的核心,采用的S3C2410處理器是Samsung公司基于ARM920T處理器核的16/32位微控制器,該處理器最高運行頻率可達到203MHz,它的低功耗、精簡和全靜態設計特別適合于對成本和功耗敏感的應用。S3C2410提供了豐富的片內資源,支持Linux,是本系統的合適選擇。它能完成整個系統的調度工作,在系統上電時配置所有需工作的芯片的功能寄存器,完成視頻流的編碼,并通過以太網控制器控制物理層芯片發送視頻碼流。
系統存儲電路模塊
主控器還需一些外圍存儲單元如Nand Flash,和SDRAM。Nand Flash 中包含Linux 的Bootloader、系統內核、文件系統、應用程序以及環境變量和系統配置文件等;SDRAM讀寫速度快,系統運行時把它作為內存單元使用。設計采用了64M的Nand Flash和64M的SDRAM。
外圍電路模塊
本設計用到的外設有USB接口,網卡接口,RS232接口和JTAG接口。
視頻監控終端的USB主控制器模塊通過專用的USB集線器與多個USB攝像頭相連。在實時監控狀態下,各個攝像頭上捕獲的圖像數據通過USB集線器傳輸到視頻監控終端的USB主控制器模塊上,然后再由USB主控制器模塊交由S3C2410處理器集中處理。S3C2410對采集到的圖像進行實時編碼壓縮,編碼之后的碼流直接傳輸到發送緩沖區中,等候發送。
本設計采用CS8900A擴展網絡接口,它是CIRRUSLOGIC公司生產的16位以太網控制器,通過內部寄存器的設置來適應不同的應用環境。S3C2410通過地址、數據、控制線以及片選信號線對CS8900A網絡芯片進行控制和通信。CS8900A與S3C2410的連接如圖3所示,CS8900A由S3C2410的nGCS3信號選通,CS8900A的INTRQ0端用來產生中斷信號,與S3C2410的16位數據總線相連,地址線使用了A[24:0]。
CS8900A以太網控制芯片通過DMA通道進行數據的傳輸。首先設置好傳輸控制和傳輸地址寄存器的參數,依次從指定的數據存儲區域讀取數據,送入內部發送緩沖器中,用MAC對數據進行封裝發送。一組數據發送完后,請求DMA中斷,由S3C2410進行處理。
RS-232接口與PC機串行總線相連,通過PC機對嵌入式系統進行相關信息顯示和控制。而JTAG接口主要是對系統進行調試,還可將程序燒寫到Flash中。
系統的軟件設計
視頻監控終端的軟件設計主要完成兩方面的工作:
(1)在硬件上搭建一個軟件平臺,搭建嵌入式Linux軟件開發平臺需要完成UBOOT移植、嵌入式Linux操作系統內核移植以及嵌入式Linux操作系統的設備驅動程序的開發等工作。
(2)在軟件平臺的基礎上,開發系統的應用程序。借助交叉編譯工具,開發視頻監控終端上運行的采集、壓縮、傳輸程序。
構建基于S3C2410的Linux平臺
Linux具有許多優點,如開放源碼;功能強大的內核,支持多用戶、多線程、多進程、實時性好、功能強大穩定;大小功能可定制;支持多種體系結構。
構建嵌入式Linux開發平臺需要先構建交叉編譯環境,如圖4所示。一套完整的交叉編譯環境包括主機和目標機。在開發中主機是一臺裝有紅帽公司的FedoreCore 2操作系統的PC機,目標機是基于S3C2410的視頻監控終端。選用的交叉編譯器是GCC3.3.4 for ARM版,嵌入式Linux內核源代碼包版本號為2.6.8RC。
2.6.8RC版的Linux內核源代碼包中包含了所有的功能模塊。系統中只用到了其中的一部分。因此,編譯內核之前首先要配置內核,裁減掉冗余的功能模塊,經過定制的內核才符合系統設計。具體步驟如下:
(1)鍵入命令makemenuconfig,對內核進行配置,選擇YAFFS文件系統,支持NFS啟動,系統使用的是USB接口的攝像頭,故要啟用USB設備支持模塊,包括USB設備文件支持模塊、USB主控制器驅動模塊等。此外,USB攝像頭屬于視頻設備,為了使應用程序能夠訪問它,還需要啟用Video4Linux模塊。
(2)用make dep命令生成內核程序間依賴關系。
(3)make zImage命令生成內核映像文件。
(4)make modules和make modules_install命令生成系統可加載模塊。
這樣就生成了zImage內核映像文件,把它下載到目標平臺的Flash中。
本設計采用USB外置攝像頭,在內核配置時要求以模塊形式加載。首先要完成驅動程序,驅動中需要提供基本的I/O操作接口函數open、read、write、close的實現,對中斷的處理實現,內存映射功能以及對I/O通道的控制接口函數ioctl等,并把他們定義在structfile_operations中。這樣當應用程序對設備文件進行諸如open、close、read、write等,系統調用操作時,嵌入式Linux內核將通過file_operations結構訪問驅動程序提供的函數。接著把USB驅動程序編譯成可以動態加載的模塊,這樣攝像頭就可正常工作了。
視頻監控終端軟件的設計
視頻監控終端軟件按功能分為三部分:視頻采集、壓縮、傳輸。這個軟件的開發都是基于先前配置好的嵌入式內核。
(1)視頻采集部分
使用Video4Linux接口函數訪問USB攝像頭設備,捕獲實時的視頻流。首先完成v4l_struct數據結構的定義,如設備基本信息,圖像屬性,各個信號源屬性等;采集模塊一方面通過USB集線器采集USB攝像頭中的圖像,另一方面啟動多個采集線程,分別在不同的端口上監聽,一旦有請求連接,采集線程立即從設備緩沖區中把視頻流數據讀出,放入到視頻處理緩沖區中進行下一步的處理。
(2)視頻數據的壓縮部分
在視頻監控系統中,大量的數據需要通過網絡傳輸,為了保證傳輸質量和傳輸實時性,就需要在傳輸之前進行編碼壓縮以減少數據量,本文采用MPEG-4編碼標準進行數據壓縮。在網絡上可以下載到開源的xvidcore軟件作為視頻壓縮的核心算法,xvidcore是一個高效的、移植性很強的多媒體編碼軟件,將它在PC機上進行交叉編譯,生成的文件拷貝到目標系統下。
(3) 視頻數據傳輸部分
傳輸模塊的作用在于把壓縮之后的視頻流傳送到遠程的PC機客戶上,視頻流數據的傳輸是基于TCP/IP協議。視頻傳輸采用了標準的RTP傳輸協議。RTP是目前解決流媒體實時傳輸問題的最好辦法,在Linux平臺上進行實時流媒體編程,需要使用一些開放源代碼的RTP庫,如LIBRTP、JRTPLIB等。定義一種較為簡單的握手協議:PC機端的采集程序不停地發請求數據包到采集終端,采集終端把已經捕獲的圖像打包返回給主機。每個RTP信息包被封裝在UDP消息段中,然后再封裝在IP數據包中發送出去。接收方自動組裝接收到的數據幀,還原成視頻數據。
結束語
本文介紹了一種基于ARM的視頻監控系統的設計方案,采用軟壓縮算法,討論了系統的硬件和軟件設計。本系統和市場上其它視頻監控系統相比,開發周期短,價格低廉,適用于對視頻圖像要求不太高的場合。
評論
查看更多