李 偉,孫朝云,顏 鵬
(長安大學信息工程學院,陜西西安710064)
嵌入式系統因其具有體積小、價格低、性能高、穩定性好等優點,被廣泛地應用于各個領域[1]。數字化視頻系統可以通過充分利用計算機的快速處理能力對視頻數據進行壓縮、分析、存儲和顯示等處理。嵌入式數字視頻系統則能夠結合嵌入式系統與數字視頻系統兩者的優點。PXA270芯片是基于XScale處理器芯片,它配合嵌入式Linux或Wince操作系統,理論上支持任何媒體格式,并且可以通過軟件升級來支持未來媒體格式[2]。但是媒體播放對硬件有極高的要求,因此需要用多媒體加速芯片來配合PXA270芯片進行視頻加速與2D或3D加速。本文介紹了以PXA270芯片為核心配合SM502圖形加速顯卡芯片實現的嵌入式視頻采集系統[3]。
該系統由嵌入式端視頻圖像采集顯示與壓縮、壓縮視頻數據有線傳輸、PC端視頻數據的顯示與存儲3部分組成。系統采用PXA270核心芯片內裝有Microsoft Windows CE 5.0操作系統。系統首先通過Camera采集現場實時視頻信息,然后在嵌入式平臺上對視頻信息進行捕捉、顯示、壓縮。最后通過使用以太網線在嵌入式平臺與主機之間搭建一個有線局域網絡,壓縮的視頻數據可以通過該局域網絡可靠地傳輸到主機端,用戶可以通過流媒體播放程序在主機端對遠程視頻進行查看、存儲等處理。本文所設計的視頻采集系統總體結構如圖1所示。

圖1 視頻采集系統總體結構圖
系統硬件平臺選用了PXA270芯片作為核心芯片,PXA270芯片是基于XScale處理器的芯片。該芯片具有支持高分辨力顯示、低功耗、高可靠性以及較強的多媒體功能等特點。PXA270支持Microsoft Windows CE操作系統。本平臺采用SM5022D圖形加速顯卡芯片,支持的分辨力可達1 024×768,在多媒體處理能力方面比較有優勢。同時Video視頻接口(支持PAL制式的CVBS視頻信號輸入)和1個串口。可以在工業溫度范圍內穩定工作,特別適合工業控制、視頻監視、遠程監控、現場通信等領域的應用。硬件平臺系統如圖2所示。
平臺的核心是PXA270芯片,同時為了進行多媒體播放,SM502圖形芯片配合PXA270進行了視頻與2D加速。SM502圖形加速芯片連接了LCD接口進行視頻的顯示,同時它還連接到了模擬視頻處理模塊,模擬視頻處理模塊接收到CVBS模擬視頻信號后進行處理并其將轉換為數字信號傳入SM502芯片。音頻通過話筒等輸入設備進行采集后經過AC97編碼后輸入到PXA270中,同時音頻信號輸出時首先經過AC97解碼然后輸出到音響設備。10 M/100 M以太網控制器負責把嵌入式端的視頻音頻信號傳到PC端進行后續處理。通過COM口可以進行程序的調試下載,以及通信等功能。

圖2 基于PXA270嵌入式平臺的組成
嵌入式端程序使用eMbedded Visual C++4.0 with SP4開發,該程序運行平臺為安裝在基于PXA270芯片構成的硬件平臺的Windows CE 5.0平臺上。
PC端程序使用Visual C++6.0開發,該程序運行平臺為Windows平臺。
嵌入式端視頻捕獲函數庫由 Capture.h,Capture.lib,Capture.dll這3個文件組成。Capture.h為該庫頭文件;Capture.lib為靜態鏈接庫文件,在使用該函數庫編譯工程時,應鏈接上它;Capture.dll為動態連接庫文件,使用本函數庫編譯生成的應用程序需要該DLL文件才能正常運行。嵌入式端提供了視頻輸入接口,可以通過對視頻采集芯片的操作進行視頻采集編程。嵌入式端使用了顯卡芯片來加速圖像顯示,該顯卡還支持視頻輸入直接在顯卡上顯示,這樣就可以讓輸入的視頻不經CPU處理直接通過顯卡顯示,從而實現本地視頻實時顯示。并且,這種視頻顯示方式也不消耗CPU資源。本地視頻實時顯示的原理如圖3所示。

圖3 嵌入式端視頻實時顯示原理
嵌入式端視頻實時顯示總體流程為:首先,系統中使用的ACE-371攝像頭輸出PAL制式的CVBS信號。當攝像頭傳輸CVBS信號到嵌入式端時,在主板上對所傳入的數據進行處理。處理過程包括模擬視頻數字化、視頻顯示以及視頻壓縮。在處理視頻數據過程中用到的主要的函數有:啟動視頻捕獲函數void CAP_Start(void),停止視頻捕獲函數void CAPStop(void),設置視頻壓縮品質函數void APSetCompQuality(COMP_QUALITY quality),獲取捕獲視頻位圖信息頭函數,CAPGetBmpHead(BITMAPINFOHEADER*pbmHead)獲取捕獲視頻位圖數據函數原型LPVOID CAPGetBmpData(LPDWORD pdwSize),設置視頻顯示模式函數原型void CAPSetMode(int nMode)讀取壓縮后的視頻幀函數原型LPVOID CAPReadFrame(DWORD*pdwSize)。除以上函數之外,還有設置視頻捕獲的亮度、對比度、飽和度、顯示區域等函數。嵌入式端視頻采集界面如圖4所示。

圖4 嵌入式端視頻采集界面(截圖)
運行嵌入式端程序后會顯示圖4所示界面,點擊Start開始視頻的顯示,點擊Stop則停止,點擊Snap進行圖像抓取。嵌入式端在局域網中作為客戶端,傳遞視頻數據時只需要在界面中設置好Server IP然后點擊Connect按鈕。此時要注意PC的IP地址要與嵌入式端的IP設置在同一網段內。
TCP/IP協議是在網絡編程中被廣泛采用的一種協議。它是一套把因特網上的各種系統互連起來的協議組,目前TCP/IP協議已成為最常用的網絡標準之一[4]。在本系統中數據傳輸部分采用TCP/IP協議進行視頻數據傳輸。
在整個嵌入式視頻采集系統中,嵌入式端作為客戶端運行WINCE5.0操作系統。在該操作系統上運行的是客戶端軟件。局域網絡中的PC機作為服務器,服務器端可以運行各種操作系統。本系統中服務器上運行的是Windows操作系統,在該操作系統上運行服務器軟件。
套接字是支持TCP/IP網絡通信的基本單元。套接字有3種不同的類型:流式套接字、原始套接字和數據報套接字。其中流式套接字和數據報套接字是最常用的,兩者的區別在于它們各自使用不同的協議。數據報套接字使用的UDP協議,UDP協議是無連接的,數據包以獨立包形式發送,不能保證數據無錯傳輸,同時不能保證數據的有序傳輸[5]。流式套接字使用TCP協議,TCP協議是面向連接,保證數據不丟失、無差錯、不重復地傳到接收方,同時保證數據的有序傳輸[6]。本系統中視頻數據的網絡傳輸部分軟件的編寫采用流套接字編程技術。首先在服務器端和客戶端分別創建本地套接字對象,然后通過調用套接字對象的方法進行建立連接、發送和接收數據和關閉連接等操作。圖5展示了流式套接字編程的流程:首先TCP服務器端創建本地流式套接字對象,然后使用套接字對象的Bind方法綁定本地IP與端口號,接著套接字對象的Listen方法開始監聽客戶端連接請求,當服務器監聽到客戶端連接請求時,服務器端的套接字對象將調用Accept方法接受客戶端連接請求的同時對客戶端進行應答,建立連接。此時服務器端獲得一個全新的與該客戶端通信的套接字。客戶端的編程首先建立客戶端的本地流式套接字對象,然后調用套接字對象的Connect方法向服務器端提出建立連接的請求,服務器進行應答后建立連接。然后服務器與客戶端進行視頻數據的傳輸。

圖5 面向連接的TCP套接字編程流程圖
PC端視頻捕獲函數庫由 TeleeVideo.h,TeleeVideo.lib和TeleeVideo.dll這3個文件組成。TeleeVideo.h為該庫頭文件;TeleeVideo.lib為靜態鏈接庫文件,在使用該函數庫編譯工程時,應鏈接上它;TeleeVideo.dll為動態連接庫文件,使用本函數庫編譯生成的應用程序需要該DLL文件才能正常運行。Xscale處理器支持WMMX指令,該指令具有較強的多媒體數據處理能力,因此可以通過使用該指令對視頻數據進行實時壓縮,并經由以太網發送到遠程主機上再解碼顯示,這樣便能實現遠程視頻監視。在VC++6.0中編程時用到的主要函數有用于獲取由下位機程序壓縮的視頻幀的有關信息函數CAPGetFrameInfo(CAP_FRAMEIN*pFrameInfo,void*pStream,DWORD dwSize)和用于對下位機壓縮的視頻幀進行解碼。PC端視頻的捕獲與顯示的總體流程如圖6所示。

圖6 PC端視頻捕獲與顯示的總體流程
攝像機采集到的視頻信息傳入嵌入式端,嵌入式端進行視頻信號的數字化后進行壓縮,壓縮后通過以太網線發送到PC端。PC端捕獲到視頻數據后對視頻數據進行解碼,然后進行顯示視頻、保存視頻,以及截取圖像等處理。PC端視頻顯示程序界面如圖7所示。
運行PC端程序,點擊Start啟動視頻顯示功能,同時界面中會顯示客戶端IP信息以及傳輸的視頻壓縮幀率信息。點擊Recording會啟動錄制視頻功能,點擊Snap進行截圖。
該系統基于由PXA270芯片構成的嵌入式平臺和WINCE5.0操作系統,通過攝像頭采集現場實時視頻信息,并對其進行壓縮。然后使用實時流式傳輸方式將視頻數據在由嵌入式平臺與PC機之間構建的有線局域網絡之間進行傳輸。該系統具有高可靠性、高穩定性、安裝容易等優點。該系統可以應用于工業控制、遠程監控、視頻會議等領域。

圖7 PC端視頻顯示程序界面(截圖)
[1]全青松,余厚全.嵌入式視頻監控終端的設計與實現[J].光電技術應用,2010,25(6):53-55.
[2]劉宇.基于ARM9的嵌入式可視電話終端的設計與實現[D].大連:大連理工大學,2006.
[3]汪慶.基于Blackfin DSP的嵌入式數字家庭系統平臺的研究與實現[D].武漢:武漢科技大學,2007.
[4]胡健生,臧曉昱.嵌入式多路視頻采集顯示系統設計[J].液晶與顯示,2010,25(6):831-835.
[5]曲宏明.基于嵌入式Linux的數字視頻監控系統研究[D].大連:大連海事大學,2008.
[6]羅翊.基于ARM平臺的嵌入式實時網絡視頻監控系統[J].中國科技信息,2010,22(45):103-105.
[7]李岸,許雪梅,郭巧云,等.基于ARM11的視頻實時傳輸系統[J].計算機系統應用,2010,19(11):15-18.