張紅林,馬永濤,劉開華
(天津大學電子信息工程學院,天津300072)
隨著信息技術在武器裝備領域的廣泛應用,武器裝備正朝著綜合化、高科技化的方向發展,這使得裝備技術保障正面臨著保障內容復雜、范圍廣、時效性強、要求高等難題。基于對裝備保障知識的需求,遠程支援技術在軍事領域一直受到高度重視[1-2]。遠程技術支援系統在組成要素上,主要包括前端數據采集及輔助維修系統、維修信息數據庫及管理系統、維修信息網絡支持系統、遠程維修診斷決策系統[3]。裝備現場的音視頻實時采集處理系統作為前端數據采集系統的重要組成部分,使得遠程維修與保障過程實現可視化,能有效提高遠程支援的效率。
目前,音視頻采集處理系統的軟件和硬件大都是由廠商預先定義并封裝的,這樣就限制了它們應用時的靈活性與兼容性。LabWindows/CVI是美國國家儀器公司推出的面向測控領域的軟件開發平臺,它將通用的C語言平臺與用于數據采集、分析和表達的測控專業工具有機結合起來,可以支持多種不同類型接口的設備,非常適用于遠程支援中數據采集處理系統開發[4]。
本系統分為硬件部分與基于LabWindows/CVI的軟件部分,其總體架構如圖1所示。硬件部分主要由自制的PCI視頻采集板卡和CCD模擬攝像設備、USB 2.0接口的CMOS數字攝像頭、傳聲器等音頻設備組成。軟件部分主要包括PCI,USB,MCI三種接口的驅動程序與音視頻數據的采集、壓縮和儲存應用程序。基于LabWindows/CVI軟件平臺的應用程序通過接口驅動程序與對應硬件設備進行數據交互。

圖1 系統總體結構框圖
在LabWindows/CVI平臺下可直接應用美國國家儀器(NI)公司的PCI采集板卡,但由于NI板卡價格昂貴并且只適用于工業開發,因此本系統采用自制的PCI視頻采集卡。該視頻采集卡由9位視頻解碼芯片SAA7115HL、PCI視頻解碼芯片CX25800、存儲器芯片AT88SC0104CA等組成。CCD攝像頭采集到的模擬視頻信號首先進入SAA7115HL解碼芯片進行9 bit A/D轉換,然后進行數字梳狀濾波、抗混疊濾波等信號處理[5],最后進入CX25800視頻解碼芯片進行像素轉換并由內部DMA控制通過PCI接口進行傳輸。AT88SC0104CA芯片用于存儲SAA7115HL與CX25800芯片的相關配置信息,以實現板卡上電初始化。
系統軟件設計是本文工作的重心,包括接口驅動程序與音視頻采集壓縮應用程序設計實現。在進行音視頻采集壓縮應用程序開發時,首先需要在LabWindows/CVI軟件平臺下采用ANSIC語言分別實現音頻與視頻數據編碼器;然后采用虛擬儀器多線程技術實現音視頻數據的實時采集與壓縮。本系統中采用開源的MPEG-4 AAC編碼標準對音頻數據進行壓縮,采用MPEG-4標準的Xvid編碼器對視頻數據進行壓縮。
在Windows平臺下應用程序可直接通過計算機系統的應用程序接口(API)函數與USB設備進行通信。因此在LabWindows/CVI軟件開發平臺下,可通過應用其中的Windows SDK導入庫,就可以將Windows API函數作為LabWindows/CVI的庫函數使用,從而可實現與USB接口的視頻設備進行交互[6]。本系統通過將SDK中的Vfw 32.lib靜態鏈接庫導入到LabWindows/CVI中,即可應用Windows VFW視頻功能函數與USB接口視頻設備進行交互。同理,通過將SDK中WinMM.lib庫導入到應用程序工程中,系統即可應用Windows WaveX API音頻功能函數與MCI接口的音頻設備進行交互。測試結果表明,SDK中的音視頻接口功能函數完全能滿足本系統中對應設備的需求,并且交互效果良好。
為了實現與PCI接口的視頻采集卡進行數據交互,首先采用WinDriver軟件平臺開發PCI設備驅動程序基本框架[7],然后在LabWindows/CVI軟件平臺下修改驅動程序并進行各類操作函數封裝,生成動態鏈接庫與對應的靜態導入庫,并將其添加到應用程序工程中,即可在應用程序中調用鏈接庫中的函數與PCI采集卡進行通信。
大量數據的網絡傳輸受網絡帶寬與誤碼率的限制,達不到遠程支援系統對實時性和準確性的要求,因此,需要對采集到的數據進行編碼壓縮。MPEG-4標準具有高壓縮比、可擴展性、可交互性等優點,逐漸成為現代視頻編碼領域的主流標準。相對于H.264標準,MPEG-4編碼標準比較簡單,軟編碼對CPU資源的占用率較低,并且能夠很好地移植到LabWindows/CVI平臺上。基于MPEG-4標準的實用編碼器主要有ISO MPEG-4編碼器,DivX和Xvid。其中,Xvid是目前世界上比較常用的視頻編解碼器(codec),被認為是當前比較快的MPEG-4編碼器,并且源代碼完全開放。Xvid編碼器的基本軟件實現過程如圖2所示。

圖2 Xvid編碼器軟件實現流程圖
MPEG-4 AAC作為一種重要的主流感知音頻編碼器,以其高壓縮比、多采樣率、音質好等顯著特點被廣泛應用,適用于虛擬儀器開發平臺。本系統對開源的MPEG-4 AAC源碼FAAC進行了相關的修改(主要是匯編重寫,C語言規范)與接口封裝,將其移植到LabWindows/CVI平臺中。MPEG-4 AAC編碼器軟件實現過程如圖3所示,特別注意程序中獲取到的音頻數據幀為char類型,而編碼器入口的數據類型為short類型,本系統中采用自定義的wav_read_short16函數進行數據匹配轉換。

圖3 MPEG-4 AAC編碼器軟件實現流程圖
由于系統軟件功能較多,為保證音視頻數據采集的實時性,采用LabWindows/CVI平臺的多線程技術來實現軟件程序。這樣就可以在不同的線程中分別運行數據采集與處理任務,避免了單一線程中因響應用戶界面操作而導致其他任務阻塞,從而最大限度地提高CPU利用率以保證數據的實時性。LabWindows/CVI提供兩種機制來實現多線程:線程池與異步定時器。由于異步定時器機制一般適用于在固定的時間間隔內執行的任務,本系統運用線程池機制來實現多線程操作。具體過程為:首先應用U-tility Library庫中的CmtNewThreadPool函數創建線程池;然后在合理的時機應用CmtScheduleThreadPoolFunction函數創建并運行新線程;最后結束次線程函數,同時應用CmtReleaseThreadPoolFunctionID函數與CmtDiscardThread Pool函數釋放線程與線程池資源。
應用多線程技術的關鍵是對程序結構與次線程任務進行合理有效的規劃,既要防止某個線程任務過重而大量占用CPU,又要防止線程過多而導致全局控制混亂并需要經常進行線程切換。在使用多線程技術時特別注意線程之間的數據共享,避免某一時刻多個線程同時修改同一內存地址的數據,從而引起的數據混亂與線程死鎖[8]。LabWindows/CVI提供3種數據保護機制:線程鎖、線程安全變量和線程安全隊列。其中線程安全隊列是一種在線程間進行安全數組數據傳遞的先進先出隊列,可應用于本系統中音視頻數據采集線程與壓縮線程之間的大量數據共享。
按照系統軟件實現功能,把系統程序需要處理的任務分為對應接口的音視頻數據采集、顯示、壓縮和儲存,以及用戶界面相關控制操作。其中,音視頻數據采集任務與壓縮任務都會耗費較多的系統資源。為保證數據采集的實時性,軟件實現時將音視頻數據采集與壓縮任務分別分配在不同的次線程中,并以用戶界面為主線程完成主控制操作。系統軟件規劃為6個線程,主線程與次線程的具體實現過程如圖4所示,采集線程與壓縮線程采用TSQ進行數據共享。在所有并發線程中,數據采集線程的優先級僅次于用戶界面線程,而數據壓縮線程優先級僅次于采集線程。

圖4 音視頻實時采集壓縮應用程序流程圖
為測試本系統在遠程支援中的性能,在實驗室網絡環境下搭建測試平臺,應用LabWindows/CVI 9.0平臺中的TCP/IP協議函數庫與DataSocket技術構建C/S網絡模式[9],將系統軟件中的數據儲存任務轉換為網絡發送任務,進行音視頻數據的網絡傳輸測試。本測試系統采用LabWindows/CVI中的DataSocket通道進行音頻數據的傳輸,采用UDP協議函數進行視頻數據的傳輸,測試效果如圖5所示,其中音頻數據的采集碼率最高可達96 kbit/s,視頻采樣最高可支持25 f/s(幀/秒)。可知本系統在網絡傳輸測試中有著良好的效果,驗證了系統的有效性與可行性;同時音頻播放實時,視頻顯示流暢,表明系統音視頻數據實時性好,數據壓縮效率高,能完全適用于實驗室網絡帶寬要求的傳輸,即可直接應用于遠程支援系統。
本系統基于LabWindows/CVI軟件平臺,運用虛擬儀器多線程編程技術,有效保證了音視頻數據采集的實時性;通過友好的接口驅動程序支持兩種不同的視頻輸入,滿足不同裝備保障場合下的功能需求;運用MPEG-4標準的音視頻編碼器,有效去除數據的冗余性,使得本系統可直接應用遠程支援維修信息網絡進行數據傳輸。相比于傳統的音視頻采集處理系統,該系統數據采集方式靈活、實時性好、壓縮算法實現簡單、穩定性好。

圖5 系統運行主界面(截圖)
同時,基于LabWindows/CVI平臺的友好特性,可以根據用戶的定制要求,方便快捷地升級系統軟件,支持智能音頻識別與智能視頻監控追蹤,方便應用于家居、商場等場景的遠程監控,還可以通過虛擬儀器技術應用于工業制造現場的智能監控與管理。
[1]姚文增,吳超,安磊.飛機維修保障遠程技術支援系統建設方案初探[J].飛機設計,2012,32(4):74-80.
[2]王承孝,肖明清,茍新禹.面向服務的裝備遠程測試診斷[J].計算機工程,2007,33(15):230-231.
[3]李科,張軍冬,胡金華.海軍裝備維修遠程技術支持系統體系架構探討[J].艦船電子工程,2011,31(8):132-135.
[4]劉君華.虛擬儀器編程語言LabWindows/CVI教程[M].北京:電子工業出版社,2001.
[5]王德勝,康令州.基于FPGA的實時圖像采集與預處理[J].電視技術,2011,35(3):32-35.
[6]王建新.LabWindows/CVI虛擬儀器測試技術及工程應用[M].北京:化學工業出版社,2011.
[7]馮莉,葉超.利用WinDriver開發PCI設備驅動程序[J].自動化技術與應用,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網絡視頻監控系統設計與實現[J].電視技術,2012,36(17):166-168.