張紅林,馬永濤,劉開(kāi)華
(天津大學(xué)電子信息工程學(xué)院,天津300072)
隨著信息技術(shù)在武器裝備領(lǐng)域的廣泛應(yīng)用,武器裝備正朝著綜合化、高科技化的方向發(fā)展,這使得裝備技術(shù)保障正面臨著保障內(nèi)容復(fù)雜、范圍廣、時(shí)效性強(qiáng)、要求高等難題。基于對(duì)裝備保障知識(shí)的需求,遠(yuǎn)程支援技術(shù)在軍事領(lǐng)域一直受到高度重視[1-2]。遠(yuǎn)程技術(shù)支援系統(tǒng)在組成要素上,主要包括前端數(shù)據(jù)采集及輔助維修系統(tǒng)、維修信息數(shù)據(jù)庫(kù)及管理系統(tǒng)、維修信息網(wǎng)絡(luò)支持系統(tǒng)、遠(yuǎn)程維修診斷決策系統(tǒng)[3]。裝備現(xiàn)場(chǎng)的音視頻實(shí)時(shí)采集處理系統(tǒng)作為前端數(shù)據(jù)采集系統(tǒng)的重要組成部分,使得遠(yuǎn)程維修與保障過(guò)程實(shí)現(xiàn)可視化,能有效提高遠(yuǎn)程支援的效率。
目前,音視頻采集處理系統(tǒng)的軟件和硬件大都是由廠商預(yù)先定義并封裝的,這樣就限制了它們應(yīng)用時(shí)的靈活性與兼容性。LabWindows/CVI是美國(guó)國(guó)家儀器公司推出的面向測(cè)控領(lǐng)域的軟件開(kāi)發(fā)平臺(tái),它將通用的C語(yǔ)言平臺(tái)與用于數(shù)據(jù)采集、分析和表達(dá)的測(cè)控專業(yè)工具有機(jī)結(jié)合起來(lái),可以支持多種不同類型接口的設(shè)備,非常適用于遠(yuǎn)程支援中數(shù)據(jù)采集處理系統(tǒng)開(kāi)發(fā)[4]。
本系統(tǒng)分為硬件部分與基于LabWindows/CVI的軟件部分,其總體架構(gòu)如圖1所示。硬件部分主要由自制的PCI視頻采集板卡和CCD模擬攝像設(shè)備、USB 2.0接口的CMOS數(shù)字?jǐn)z像頭、傳聲器等音頻設(shè)備組成。軟件部分主要包括PCI,USB,MCI三種接口的驅(qū)動(dòng)程序與音視頻數(shù)據(jù)的采集、壓縮和儲(chǔ)存應(yīng)用程序?;贚abWindows/CVI軟件平臺(tái)的應(yīng)用程序通過(guò)接口驅(qū)動(dòng)程序與對(duì)應(yīng)硬件設(shè)備進(jìn)行數(shù)據(jù)交互。
圖1 系統(tǒng)總體結(jié)構(gòu)框圖
在LabWindows/CVI平臺(tái)下可直接應(yīng)用美國(guó)國(guó)家儀器(NI)公司的PCI采集板卡,但由于NI板卡價(jià)格昂貴并且只適用于工業(yè)開(kāi)發(fā),因此本系統(tǒng)采用自制的PCI視頻采集卡。該視頻采集卡由9位視頻解碼芯片SAA7115HL、PCI視頻解碼芯片CX25800、存儲(chǔ)器芯片AT88SC0104CA等組成。CCD攝像頭采集到的模擬視頻信號(hào)首先進(jìn)入SAA7115HL解碼芯片進(jìn)行9 bit A/D轉(zhuǎn)換,然后進(jìn)行數(shù)字梳狀濾波、抗混疊濾波等信號(hào)處理[5],最后進(jìn)入CX25800視頻解碼芯片進(jìn)行像素轉(zhuǎn)換并由內(nèi)部DMA控制通過(guò)PCI接口進(jìn)行傳輸。AT88SC0104CA芯片用于存儲(chǔ)SAA7115HL與CX25800芯片的相關(guān)配置信息,以實(shí)現(xiàn)板卡上電初始化。
系統(tǒng)軟件設(shè)計(jì)是本文工作的重心,包括接口驅(qū)動(dòng)程序與音視頻采集壓縮應(yīng)用程序設(shè)計(jì)實(shí)現(xiàn)。在進(jìn)行音視頻采集壓縮應(yīng)用程序開(kāi)發(fā)時(shí),首先需要在LabWindows/CVI軟件平臺(tái)下采用ANSIC語(yǔ)言分別實(shí)現(xiàn)音頻與視頻數(shù)據(jù)編碼器;然后采用虛擬儀器多線程技術(shù)實(shí)現(xiàn)音視頻數(shù)據(jù)的實(shí)時(shí)采集與壓縮。本系統(tǒng)中采用開(kāi)源的MPEG-4 AAC編碼標(biāo)準(zhǔn)對(duì)音頻數(shù)據(jù)進(jìn)行壓縮,采用MPEG-4標(biāo)準(zhǔn)的Xvid編碼器對(duì)視頻數(shù)據(jù)進(jìn)行壓縮。
在Windows平臺(tái)下應(yīng)用程序可直接通過(guò)計(jì)算機(jī)系統(tǒng)的應(yīng)用程序接口(API)函數(shù)與USB設(shè)備進(jìn)行通信。因此在LabWindows/CVI軟件開(kāi)發(fā)平臺(tái)下,可通過(guò)應(yīng)用其中的Windows SDK導(dǎo)入庫(kù),就可以將Windows API函數(shù)作為L(zhǎng)abWindows/CVI的庫(kù)函數(shù)使用,從而可實(shí)現(xiàn)與USB接口的視頻設(shè)備進(jìn)行交互[6]。本系統(tǒng)通過(guò)將SDK中的Vfw 32.lib靜態(tài)鏈接庫(kù)導(dǎo)入到LabWindows/CVI中,即可應(yīng)用Windows VFW視頻功能函數(shù)與USB接口視頻設(shè)備進(jìn)行交互。同理,通過(guò)將SDK中WinMM.lib庫(kù)導(dǎo)入到應(yīng)用程序工程中,系統(tǒng)即可應(yīng)用Windows WaveX API音頻功能函數(shù)與MCI接口的音頻設(shè)備進(jìn)行交互。測(cè)試結(jié)果表明,SDK中的音視頻接口功能函數(shù)完全能滿足本系統(tǒng)中對(duì)應(yīng)設(shè)備的需求,并且交互效果良好。
為了實(shí)現(xiàn)與PCI接口的視頻采集卡進(jìn)行數(shù)據(jù)交互,首先采用WinDriver軟件平臺(tái)開(kāi)發(fā)PCI設(shè)備驅(qū)動(dòng)程序基本框架[7],然后在LabWindows/CVI軟件平臺(tái)下修改驅(qū)動(dòng)程序并進(jìn)行各類操作函數(shù)封裝,生成動(dòng)態(tài)鏈接庫(kù)與對(duì)應(yīng)的靜態(tài)導(dǎo)入庫(kù),并將其添加到應(yīng)用程序工程中,即可在應(yīng)用程序中調(diào)用鏈接庫(kù)中的函數(shù)與PCI采集卡進(jìn)行通信。
大量數(shù)據(jù)的網(wǎng)絡(luò)傳輸受網(wǎng)絡(luò)帶寬與誤碼率的限制,達(dá)不到遠(yuǎn)程支援系統(tǒng)對(duì)實(shí)時(shí)性和準(zhǔn)確性的要求,因此,需要對(duì)采集到的數(shù)據(jù)進(jìn)行編碼壓縮。MPEG-4標(biāo)準(zhǔn)具有高壓縮比、可擴(kuò)展性、可交互性等優(yōu)點(diǎn),逐漸成為現(xiàn)代視頻編碼領(lǐng)域的主流標(biāo)準(zhǔn)。相對(duì)于H.264標(biāo)準(zhǔn),MPEG-4編碼標(biāo)準(zhǔn)比較簡(jiǎn)單,軟編碼對(duì)CPU資源的占用率較低,并且能夠很好地移植到LabWindows/CVI平臺(tái)上?;贛PEG-4標(biāo)準(zhǔn)的實(shí)用編碼器主要有ISO MPEG-4編碼器,DivX和Xvid。其中,Xvid是目前世界上比較常用的視頻編解碼器(codec),被認(rèn)為是當(dāng)前比較快的MPEG-4編碼器,并且源代碼完全開(kāi)放。Xvid編碼器的基本軟件實(shí)現(xiàn)過(guò)程如圖2所示。
圖2 Xvid編碼器軟件實(shí)現(xiàn)流程圖
MPEG-4 AAC作為一種重要的主流感知音頻編碼器,以其高壓縮比、多采樣率、音質(zhì)好等顯著特點(diǎn)被廣泛應(yīng)用,適用于虛擬儀器開(kāi)發(fā)平臺(tái)。本系統(tǒng)對(duì)開(kāi)源的MPEG-4 AAC源碼FAAC進(jìn)行了相關(guān)的修改(主要是匯編重寫(xiě),C語(yǔ)言規(guī)范)與接口封裝,將其移植到LabWindows/CVI平臺(tái)中。MPEG-4 AAC編碼器軟件實(shí)現(xiàn)過(guò)程如圖3所示,特別注意程序中獲取到的音頻數(shù)據(jù)幀為char類型,而編碼器入口的數(shù)據(jù)類型為short類型,本系統(tǒng)中采用自定義的wav_read_short16函數(shù)進(jìn)行數(shù)據(jù)匹配轉(zhuǎn)換。
圖3 MPEG-4 AAC編碼器軟件實(shí)現(xiàn)流程圖
由于系統(tǒng)軟件功能較多,為保證音視頻數(shù)據(jù)采集的實(shí)時(shí)性,采用LabWindows/CVI平臺(tái)的多線程技術(shù)來(lái)實(shí)現(xiàn)軟件程序。這樣就可以在不同的線程中分別運(yùn)行數(shù)據(jù)采集與處理任務(wù),避免了單一線程中因響應(yīng)用戶界面操作而導(dǎo)致其他任務(wù)阻塞,從而最大限度地提高CPU利用率以保證數(shù)據(jù)的實(shí)時(shí)性。LabWindows/CVI提供兩種機(jī)制來(lái)實(shí)現(xiàn)多線程:線程池與異步定時(shí)器。由于異步定時(shí)器機(jī)制一般適用于在固定的時(shí)間間隔內(nèi)執(zhí)行的任務(wù),本系統(tǒng)運(yùn)用線程池機(jī)制來(lái)實(shí)現(xiàn)多線程操作。具體過(guò)程為:首先應(yīng)用U-tility Library庫(kù)中的CmtNewThreadPool函數(shù)創(chuàng)建線程池;然后在合理的時(shí)機(jī)應(yīng)用CmtScheduleThreadPoolFunction函數(shù)創(chuàng)建并運(yùn)行新線程;最后結(jié)束次線程函數(shù),同時(shí)應(yīng)用CmtReleaseThreadPoolFunctionID函數(shù)與CmtDiscardThread Pool函數(shù)釋放線程與線程池資源。
應(yīng)用多線程技術(shù)的關(guān)鍵是對(duì)程序結(jié)構(gòu)與次線程任務(wù)進(jìn)行合理有效的規(guī)劃,既要防止某個(gè)線程任務(wù)過(guò)重而大量占用CPU,又要防止線程過(guò)多而導(dǎo)致全局控制混亂并需要經(jīng)常進(jìn)行線程切換。在使用多線程技術(shù)時(shí)特別注意線程之間的數(shù)據(jù)共享,避免某一時(shí)刻多個(gè)線程同時(shí)修改同一內(nèi)存地址的數(shù)據(jù),從而引起的數(shù)據(jù)混亂與線程死鎖[8]。LabWindows/CVI提供3種數(shù)據(jù)保護(hù)機(jī)制:線程鎖、線程安全變量和線程安全隊(duì)列。其中線程安全隊(duì)列是一種在線程間進(jìn)行安全數(shù)組數(shù)據(jù)傳遞的先進(jìn)先出隊(duì)列,可應(yīng)用于本系統(tǒng)中音視頻數(shù)據(jù)采集線程與壓縮線程之間的大量數(shù)據(jù)共享。
按照系統(tǒng)軟件實(shí)現(xiàn)功能,把系統(tǒng)程序需要處理的任務(wù)分為對(duì)應(yīng)接口的音視頻數(shù)據(jù)采集、顯示、壓縮和儲(chǔ)存,以及用戶界面相關(guān)控制操作。其中,音視頻數(shù)據(jù)采集任務(wù)與壓縮任務(wù)都會(huì)耗費(fèi)較多的系統(tǒng)資源。為保證數(shù)據(jù)采集的實(shí)時(shí)性,軟件實(shí)現(xiàn)時(shí)將音視頻數(shù)據(jù)采集與壓縮任務(wù)分別分配在不同的次線程中,并以用戶界面為主線程完成主控制操作。系統(tǒng)軟件規(guī)劃為6個(gè)線程,主線程與次線程的具體實(shí)現(xiàn)過(guò)程如圖4所示,采集線程與壓縮線程采用TSQ進(jìn)行數(shù)據(jù)共享。在所有并發(fā)線程中,數(shù)據(jù)采集線程的優(yōu)先級(jí)僅次于用戶界面線程,而數(shù)據(jù)壓縮線程優(yōu)先級(jí)僅次于采集線程。
圖4 音視頻實(shí)時(shí)采集壓縮應(yīng)用程序流程圖
為測(cè)試本系統(tǒng)在遠(yuǎn)程支援中的性能,在實(shí)驗(yàn)室網(wǎng)絡(luò)環(huán)境下搭建測(cè)試平臺(tái),應(yīng)用LabWindows/CVI 9.0平臺(tái)中的TCP/IP協(xié)議函數(shù)庫(kù)與DataSocket技術(shù)構(gòu)建C/S網(wǎng)絡(luò)模式[9],將系統(tǒng)軟件中的數(shù)據(jù)儲(chǔ)存任務(wù)轉(zhuǎn)換為網(wǎng)絡(luò)發(fā)送任務(wù),進(jìn)行音視頻數(shù)據(jù)的網(wǎng)絡(luò)傳輸測(cè)試。本測(cè)試系統(tǒng)采用LabWindows/CVI中的DataSocket通道進(jìn)行音頻數(shù)據(jù)的傳輸,采用UDP協(xié)議函數(shù)進(jìn)行視頻數(shù)據(jù)的傳輸,測(cè)試效果如圖5所示,其中音頻數(shù)據(jù)的采集碼率最高可達(dá)96 kbit/s,視頻采樣最高可支持25 f/s(幀/秒)。可知本系統(tǒng)在網(wǎng)絡(luò)傳輸測(cè)試中有著良好的效果,驗(yàn)證了系統(tǒng)的有效性與可行性;同時(shí)音頻播放實(shí)時(shí),視頻顯示流暢,表明系統(tǒng)音視頻數(shù)據(jù)實(shí)時(shí)性好,數(shù)據(jù)壓縮效率高,能完全適用于實(shí)驗(yàn)室網(wǎng)絡(luò)帶寬要求的傳輸,即可直接應(yīng)用于遠(yuǎn)程支援系統(tǒng)。
本系統(tǒng)基于LabWindows/CVI軟件平臺(tái),運(yùn)用虛擬儀器多線程編程技術(shù),有效保證了音視頻數(shù)據(jù)采集的實(shí)時(shí)性;通過(guò)友好的接口驅(qū)動(dòng)程序支持兩種不同的視頻輸入,滿足不同裝備保障場(chǎng)合下的功能需求;運(yùn)用MPEG-4標(biāo)準(zhǔn)的音視頻編碼器,有效去除數(shù)據(jù)的冗余性,使得本系統(tǒng)可直接應(yīng)用遠(yuǎn)程支援維修信息網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸。相比于傳統(tǒng)的音視頻采集處理系統(tǒng),該系統(tǒng)數(shù)據(jù)采集方式靈活、實(shí)時(shí)性好、壓縮算法實(shí)現(xiàn)簡(jiǎn)單、穩(wěn)定性好。
圖5 系統(tǒng)運(yùn)行主界面(截圖)
同時(shí),基于LabWindows/CVI平臺(tái)的友好特性,可以根據(jù)用戶的定制要求,方便快捷地升級(jí)系統(tǒng)軟件,支持智能音頻識(shí)別與智能視頻監(jiān)控追蹤,方便應(yīng)用于家居、商場(chǎng)等場(chǎng)景的遠(yuǎn)程監(jiān)控,還可以通過(guò)虛擬儀器技術(shù)應(yīng)用于工業(yè)制造現(xiàn)場(chǎng)的智能監(jiān)控與管理。
[1]姚文增,吳超,安磊.飛機(jī)維修保障遠(yuǎn)程技術(shù)支援系統(tǒng)建設(shè)方案初探[J].飛機(jī)設(shè)計(jì),2012,32(4):74-80.
[2]王承孝,肖明清,茍新禹.面向服務(wù)的裝備遠(yuǎn)程測(cè)試診斷[J].計(jì)算機(jī)工程,2007,33(15):230-231.
[3]李科,張軍冬,胡金華.海軍裝備維修遠(yuǎn)程技術(shù)支持系統(tǒng)體系架構(gòu)探討[J].艦船電子工程,2011,31(8):132-135.
[4]劉君華.虛擬儀器編程語(yǔ)言LabWindows/CVI教程[M].北京:電子工業(yè)出版社,2001.
[5]王德勝,康令州.基于FPGA的實(shí)時(shí)圖像采集與預(yù)處理[J].電視技術(shù),2011,35(3):32-35.
[6]王建新.LabWindows/CVI虛擬儀器測(cè)試技術(shù)及工程應(yīng)用[M].北京:化學(xué)工業(yè)出版社,2011.
[7]馮莉,葉超.利用WinDriver開(kāi)發(fā)PCI設(shè)備驅(qū)動(dòng)程序[J].自動(dòng)化技術(shù)與應(yīng)用,2007,26(11):119-120.
[8] LIN Xizhou,CHENG En,YUAN Fei.A data acquisition system for underwater acoustic communication system[C]//Proc.the Second International Conference on Computer and Communication Technologies in Agriculture Engineering(CCTAE 2010).[S.l.]:IEEE Press,2010:181-184.
[9]毛留俊,郭建新,張秋林,等.基于ARM11的IP網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2012,36(17):166-168.