王雪萍,唐林波,趙保軍
(北京理工大學(xué)信息與電子學(xué)院,北京 100081)
遠程屏幕傳輸是指將一臺計算機上的屏幕信息通過計算機網(wǎng)絡(luò)實時傳輸?shù)搅硪慌_計算機上并重新顯示出來,在計算機遠程控制和監(jiān)控中有廣泛應(yīng)用。傳統(tǒng)的視頻監(jiān)控存在實時性差和圖像清晰度不高的缺點[1]。本文設(shè)計了一種基于DSP+FPGA的遠程圖像傳輸系統(tǒng),實現(xiàn)主機屏幕圖像截取、壓縮和傳輸。采用TCP/IP協(xié)議,通過網(wǎng)絡(luò)接口傳輸給局域網(wǎng)上其他計算機,在其他計算機上進行實時解壓縮顯示。局域網(wǎng)上任何一臺計算機上均可看到本機屏幕上的內(nèi)容,對計算機進行實時監(jiān)視。
本文采用兩種方案實現(xiàn)遠程屏幕傳輸,提出了系統(tǒng)的總體實現(xiàn)結(jié)構(gòu),并給出系統(tǒng)不同模塊的具體設(shè)計。
圖1是遠程屏幕傳輸系統(tǒng)的結(jié)構(gòu)框圖。使用兩種方案進行截屏,主要是截屏數(shù)據(jù)源和FPGA的處理數(shù)據(jù)工作不一樣,DSP進行數(shù)據(jù)壓縮的功能是相同的。方案一是上位機讀取計算機內(nèi)存中的數(shù)據(jù)通過PCI接口將數(shù)據(jù)發(fā)送給FPGA,F(xiàn)PGA進行數(shù)據(jù)格式的調(diào)整,存儲到DPRAM中。再將DPRAM中的數(shù)據(jù)發(fā)送給DSP。同時,從DPRAM中以符合VGA顯示的時序讀取數(shù)據(jù)并再次轉(zhuǎn)換數(shù)據(jù)格式,進行實時的VGA截屏顯示。方案二是電腦VGA接口輸出模擬RGB信號經(jīng)過視頻AD轉(zhuǎn)換成數(shù)字信號,F(xiàn)PGA對圖像原點和大小根據(jù)需要進行改變。兩種方案中DSP的作用都是對傳輸圖像數(shù)據(jù)進行H.264壓縮后使用以太網(wǎng)傳輸。其中數(shù)據(jù)壓縮部分調(diào)用DSP內(nèi)嵌硬件模塊進行H.264壓縮。DSP內(nèi)嵌的ARM處理器將數(shù)據(jù)打包后通過以太網(wǎng)傳輸,在截取圖像大小為576×384×30 f/s時,采用2 Mbit/s碼率能獲得比較清晰的圖像。最后,接收端使用H.264解碼軟件實時播放傳輸過來的壓縮圖像。
圖1 系統(tǒng)結(jié)構(gòu)框圖
上位機主要實現(xiàn)方案切換和方案一中的計算機截屏。方案切換是通過上位機發(fā)送控制信號傳遞給FPGA實現(xiàn)的。方案一中的截屏數(shù)據(jù)是計算機顯存中的數(shù)據(jù),每個像素點是以R、G、B數(shù)據(jù)格式存儲的,每個色彩通道為8 bit。因此一幀圖像以原始數(shù)據(jù)大小傳輸給FPGA,傳輸圖像數(shù)據(jù)較大。獲取屏幕圖像的上位機軟件界面采用VS2003或 VS2010 編寫[2],經(jīng)實測,在 Visual Studio 2010平臺上用C#編寫截圖類函數(shù),程序中的截屏部分調(diào)用dotnet4.0中執(zhí)行效率較高的工具集,比VS2003效率提高30%以上。為了提高資源利用率,程序采用線程截圖的方式進行主機屏幕截屏。同時,還可以進行單幀截屏圖像的保存,保存為BMP文件格式。計算機的PCI驅(qū)動由Windriver軟件生成。軟件操作簡便、人機交互良好,界面如圖2所示。
圖2 上位機操作界面(截圖)
FPGA主要實現(xiàn)PCI總線接口、SDRAM數(shù)據(jù)存儲、I2C總線配置芯片、方案一圖像數(shù)據(jù)格式轉(zhuǎn)換功能和方案二圖像大小裁剪的功能。FPGA選用ALTERA公司生產(chǎn)的EP3C55F484。有327個I/O用戶引腳和55856 個邏輯單元。片上具有260個256×36 bit的RAM存儲塊。FPGA外接雙口DPRAM緩存數(shù)據(jù),選用IDT70T3339芯片,存儲容量為512 kbyte×18 bit。視頻DA選用ADV7123是一款單芯片、3 通道、10 bit高速數(shù)模轉(zhuǎn)換器[3]。
與上位機的數(shù)據(jù)通信采用CPCI接口。CPCI是PICMG提出的一種工業(yè)接口標(biāo)準(zhǔn),采用PCI總線技術(shù),在此基礎(chǔ)上改善了機械結(jié)構(gòu),支持熱插拔,可靠性高。本系統(tǒng)PCI接口是在FPGA中利用Altera公司提供的PCI IP核來完成。PCI Compiler提供了使用Altera器件實現(xiàn)PCI接口設(shè)計的完全解決方案。PCI IP核的功能即是將復(fù)雜的PCI總線轉(zhuǎn)換為相對簡單易操作的PCI本地總線,它從PCI總線側(cè)獲得傳輸命令和讀寫數(shù)據(jù)的地址后,一方面對這個操作命令做出反應(yīng),將其傳達給LOCAL總線,另一方面將PCI總線傳送過來的數(shù)據(jù)地址映射為LOCAL總線可識別的地址。當(dāng)LOCAL總線準(zhǔn)備好后,PCI IP核會收到LOCAL側(cè)做出的響應(yīng)信號。然后根據(jù)讀/寫命令的不同執(zhí)行相應(yīng)的時序。在上電啟動時它為FPGA申請空間,操作FPGA時它將PC機給出的地址轉(zhuǎn)換為FPGA可以識別的地址[4]。本系統(tǒng)通過PCI接口與PC機傳輸圖像數(shù)據(jù),由上位機應(yīng)用程序控制系統(tǒng)工作,F(xiàn)PGA每幀中斷通知上位機截取圖像,故系統(tǒng)工作于32 bit主/從模式。PCI的BAR0預(yù)留2 Mbyte的存儲空間,基地址 BAR1預(yù)留256 byte I/O空間。由于PCI總線上地址線和數(shù)據(jù)線復(fù)用,所以還需要地址/數(shù)據(jù)控制模塊來實現(xiàn)對地址數(shù)據(jù)傳輸?shù)目刂?。PCI接口本地端邏輯設(shè)計應(yīng)當(dāng)完成地址譯碼、命令譯碼以及中斷控制功能。PCI接口邏輯設(shè)計中,調(diào)用Altera在SOPC Builder中提供的PCI IP核,與自行設(shè)計的譯碼邏輯相連接,完成PCI總線功能[5]。上位機截屏的圖像數(shù)據(jù)存放在計算機內(nèi)存中。單周期的訪問速度太慢,不適合做批量數(shù)據(jù)傳輸。因此PCI內(nèi)部設(shè)置了專門用于批量傳送的DMA控制器將數(shù)據(jù)傳送給FPGA。通過NOIS中的程序向DMA控制器配置傳輸首址、傳輸長度和使能DMA位等參數(shù)啟動。
本系統(tǒng)設(shè)計最高支持1024 ×1024 大小圖像截屏傳輸,從上位機獲取的一幀圖像的原始數(shù)據(jù)量是1024 ×1024 ×3=3 Mbyte,數(shù)據(jù)量大。采用SDRAM作為存儲器外設(shè)。在FPGA內(nèi)部產(chǎn)生SDRAM控制器來完成SDRAM的初始化、自動定時刷新、存儲單元地址管理,讀寫模式配置等功能。設(shè)計中調(diào)用Altera在SOPC Builder中提供的基于Avalon總線的SDRAM控制器核來實現(xiàn)該功能。芯片選用MT48LC2M32B,容量為2 Mbyte×32 bit。
本系統(tǒng)中VGA輸出視頻信號采用XGA(1024 ×768)視頻格式,60 f/s,選用 TI公司的視頻 ADC芯片TVP70025I完成該高清模擬視頻的模數(shù)轉(zhuǎn)換,采樣精度及方式選取為8 byte,4∶2∶2(Y∶Cb∶Cr) 采樣。TVP70025I輸出數(shù)字化視頻分量(Y、Cb和Cr)、數(shù)據(jù)時鐘(DATACLK)、場同步(VSOUT)和行同步(HSOUT)信號給FPGA。FPGA通過I2C總線[6]對TVP70025I內(nèi)部寄存器進行初始化設(shè)置,并啟動模數(shù)轉(zhuǎn)換過程。
方案一中上位機傳輸?shù)紽PGA的圖像數(shù)據(jù)處理過程:FPGA中斷接收上位機截屏數(shù)據(jù)緩存SDRAM中,然后將RGB格式轉(zhuǎn)換成YUV422格式。首先轉(zhuǎn)換成YUV444格式,產(chǎn)生寫片外雙口的寫使能、寫地址,以YUV422格式存儲圖像數(shù)據(jù),最后以30 f/s讀出傳輸給DSP。按顯示時序讀取片外雙口中數(shù)據(jù),并產(chǎn)生VGA顯示時序。經(jīng)過視頻DA芯片后實時顯示截屏圖像。
方案二中上位機VGA口輸出給視頻AD芯片的圖像是XGA格式,大小固定,幀頻為60 Hz。需要在FPGA內(nèi)部裁剪成需要的以圖像上任意坐標(biāo)為原點的,大小可改變的圖像。并通過DPRAM緩存數(shù)據(jù)改變傳輸速度。通過上位機PCI接口可以獲得上位機設(shè)定的圖像原點坐標(biāo)值。
FPGA傳輸給DSP的是一幀的YUV422格式的圖像數(shù)據(jù),使用以太網(wǎng)傳輸,短時間內(nèi)處理如此大的數(shù)據(jù)量對存儲容量、信道的帶寬和數(shù)據(jù)的處理速度來說都是很大的困難,因此有必要在存儲和傳輸圖像數(shù)據(jù)時進行壓縮。H.264在同樣的視頻清晰度下,編碼效率比MPEG-4提高50%,壓縮比更高,而且提供友好的網(wǎng)絡(luò)接口,有利于在網(wǎng)絡(luò)中的視頻傳輸[7]。
TI推出的DM368集成了ARM處理器,應(yīng)用程序的開發(fā)需要搭建交叉編譯環(huán)境,需要宿主機和目標(biāo)機,宿主機需要安裝TFTP服務(wù)器為完成目標(biāo)機的主要映像文件的下載工作。宿主機還需要配置NFS文件系統(tǒng),宿主機編譯的文件可以通過NFS利用網(wǎng)絡(luò)直接加載到目標(biāo)機的RAM中運行。圖3是DM368的硬件設(shè)計方案框圖。
圖3 DM368的硬件設(shè)計方案框圖
DM368有一套完整的基于LINUX操作系統(tǒng)的解決方案。系統(tǒng)的軟件框架分為3個應(yīng)用層:應(yīng)用層,信號處理層和I/O層。信號處理層負(fù)責(zé)硬件H.264編碼,算法采用XDM封裝,ARM下的應(yīng)用程序可以調(diào)用符合XDM應(yīng)用程序接口的API函數(shù)[8]。
在LINUX系統(tǒng)下實現(xiàn)H.264壓縮視頻編碼的應(yīng)用程序需要多個線程來對多個外圍設(shè)備進行操作。分為thread線程、video線程、顯示線程、捕獲線程和寫線程。在video線程中,video線程從capture線程接收數(shù)據(jù),調(diào)用硬件編碼器對其進行編碼,將編碼后的數(shù)據(jù)送到write線程,write線程將數(shù)據(jù)寫到Linux的文件系統(tǒng)中。使用專用的I/O和capture線程來最大限度地發(fā)揮ARM和DSP核的作用。
本系統(tǒng)的實時視頻傳輸功能是采用RTP協(xié)議來實現(xiàn)的,實時傳輸協(xié)議(Real-time Transport Protocol,RTP)是用于互聯(lián)網(wǎng)上針對多媒體數(shù)據(jù)流傳輸?shù)囊环N協(xié)議[9]。video線程將視頻流進行H.264編碼,編碼后的視頻流即為一個NALU單元。RTP封包按照RFC3984標(biāo)準(zhǔn)規(guī)定的格式將NALU單元封裝為標(biāo)準(zhǔn)的RTP包,然后再發(fā)送給客戶端,這些功能是通過RTP thread完成。
FPGA程序使用QUARTUSⅡ軟件,Verilog語言編寫,并使用MODELSIM軟件仿真。DSP程序使用CCS3.3軟件,C語言編寫。本系統(tǒng)兩種方案均成功截取屏幕圖像,并在解碼端顯示。圖4是遠程屏幕傳輸系統(tǒng)板卡6U CPCI版型實物圖。在上位機開始線程截圖時同時記截圖的幀數(shù)N,終止截屏后,彈出對話框顯示從開始截屏到結(jié)束截屏的時間T。通過N/T可以計算出發(fā)送的幀頻,測試在截取576×384大小計算機屏幕時,經(jīng)反復(fù)測試,達到30 f/s的傳輸速度。在截取1024 ×1024 大小計算機屏幕時,傳輸速度是15 f/s??梢姰?dāng)截取屏幕越大時,截屏速度會相應(yīng)的降低,傳輸時間也會變長。通過網(wǎng)線連接發(fā)送板卡和接收端,在接收端的主機上使用H.264解碼軟件顯示。使用MATLAB軟件計算方案一上位機截取原始圖像和接收端解壓縮后圖像(圖5所示)的PSNR值為64.0291 。方案二接收端解壓縮后圖像(圖6所示)的PSNR值為40.1564 。方案一接收到的圖像質(zhì)量比方案二的效果更好一些。
方案一是直接截取現(xiàn)存中的數(shù)字圖形缺點是要占用25%左右的CPU資源(對于雙核CPU)。另一種方案是對上位機的VGA信號進行AD變換,然后截取AD變換之后的圖像。這種方案的優(yōu)點是不占用CPU資源,缺點是截取圖像AD轉(zhuǎn)換圖像時,像素點數(shù)值會產(chǎn)生一定的誤差,圖像會比第一種模糊。是由于截取圖像是從VGA口經(jīng)過AD轉(zhuǎn)換,在壓縮圖像前就產(chǎn)生了一定的誤差。但從直觀視覺上,兩種方案都可以達到較好的顯示效果,可長時間穩(wěn)定工作。
本文設(shè)計并實現(xiàn)了一種基于DSP+FPGA的遠程屏幕傳輸系統(tǒng),采用兩種方案實現(xiàn)計算機屏幕截屏,實際應(yīng)用時可根據(jù)需要通過上位機選擇方案截屏圖像傳輸,使用靈活。調(diào)用DM368硬件編碼模塊,實現(xiàn)H.264壓縮格式的實時視頻壓縮編碼,克服遠程屏幕傳輸系統(tǒng)中普遍存在的實時性差、穩(wěn)定性差的缺點。同時,截取屏幕原點和大小均可改變,具有靈活性。
[1]董祖雄,謝捷生.遠程屏幕傳輸及其數(shù)據(jù)壓縮的實現(xiàn)方案[J].微型機與應(yīng)用,2001,10(9):55-56.
[2]吳棟淦.兩種屏幕圖像獲取方案的比較[J].機電技術(shù),2007,9(3):9-11.
[3]Altera Corporation.EP2S90 data sheet[EB/OL].[2012 -06 -06].http://wenku.baidu.com/view/3d78d7eab8f67c1cfad6b893.html.
[4]王宏斌.PCI總線IPCORE的FPGA實現(xiàn)[D].西安:西安電子科技大學(xué),2006.
[5]秦珍.基于IP核的PCI卡在圖像采集系統(tǒng)中的應(yīng)用[D].西安:西安電子科技大學(xué),2010.
[6]戴立新,王澤勇,王黎,等.I2C總線的接口及應(yīng)用[J].現(xiàn)代電子技術(shù),2009(2):132-134.
[7]劉衛(wèi)亮.基于H.264的無線視頻傳輸平臺的設(shè)計與硬件實現(xiàn)[D].西安:西安電子科技大學(xué),2010.
[8]彭啟宗.達芬奇技術(shù)[M].北京:電子工業(yè)出版社,2008.
[9]夏朋浩.非制冷熱成像信號處理與壓縮技術(shù)研究[D].南京:南京理工大學(xué),2012.