李成瀟,王康誼
(中北大學信息與通信工程學院,山西太原 030051)
隨著現代戰爭朝著信息化方向的快速發展,越來越多的武器型號都采用了電子信息化的設計方案,各個設備之間通過現場總線進行連接,形成一個完整的軍事裝備信息系統[1]。電子信息化使得軍事裝備的性能大大提高,同時也增加了信息數據的數量和種類,使得數據記錄的難度大大提高[2]。現有的記錄儀可以記錄車載系統中現場總線的數據信息[3],但不能記錄發射車導彈發射過程中的各種視頻數據[4],且現有的記錄儀在惡劣環境中存儲的數據出現過丟失情況,導致記錄的數據不完整,大大影響后期實驗過程中對車載系統中故障的排查與定位[5]。
該文車載數據記錄儀正是基于上述背景研究設計的,不僅可以記錄射手操作終端、導彈彈頭回傳的視頻數據,還通過雙盤冗余設計保證記錄儀在惡劣環境下對數據的可靠性存儲,同時存儲的視頻數據可以在發射車的操作終端中回放,實時分析導彈的飛行軌跡、射手的操作過程,對還原導彈發射過程、定位故障查找原因起到了關鍵作用。
如圖1 所示,根據車載記錄儀的實際需求對其進行總體設計。其中視頻輸入為一路導彈攝像頭回傳的PAL 視頻信號和兩路發射車射手操作終端的VGA 視頻信號。數據記錄儀由硬件和軟件兩部分組成,硬件部分與車載端機相連接,并在車載端機供電的情況上設計了掉電保護電路,可在突然斷電的情況下保證記錄儀正常運行15 s 左右,使記錄的數據得到完整保存;記錄儀軟件部分完成對輸入視頻數據的時標疊加、壓縮編碼、格式封裝等視頻處理過程[6]。視頻數據經處理之后存入固態硬盤,并且固態硬盤中的視頻數據可以根據操作人員的需求進行導出、回放等操作,實時還原發射車的工作流程。

圖1 總體設計圖
該文車載數據記錄儀的硬件原理如圖2 所示。掉電保護單元由掉電檢測電路和超級電容組成,檢測系統電源電壓,電源正常時監測信號為高電平,當系統掉電時,電壓下降,監測信號立即變為低電平,超級電容電路開始為系統提供短暫工作電源[7],保護記錄儀產生的文件不受損壞。視頻采集單元由兩路VGA 輸入、一路PAL 輸入和視頻采集芯片ADV7441組成,完成視頻輸入和視頻格式的轉化[8]。視頻處理單元主要由TMS320DM8168 芯片和NAND FLASH組成[9],TMS320DM8168 芯片是一款多通道高清視頻處理芯片,編解碼效率高,視頻處理速度快。它集成了4 個物理核:Cortex-A8、VPSS-M3、Video-M3 和DSP 核[10],4 個核上運行不同的操作系統,各個核作用不同、分工明確,共同完成對視頻數據的處理。NAND FLASH 擁有斷電保護機制,與記錄儀的可靠性要求相符合,并且其性能優秀,可以快速完成對信息讀寫,因此用來存放記錄儀的SQLite 數據庫[11],完成對硬盤數據文件的管理。數據存儲單元由兩塊固態硬盤構成,對視頻數據進行冗余存儲,并由數據庫實現兩盤數據同步,增加數據存儲可靠性。

圖2 硬件原理圖
文中車載數據記錄儀的軟件設計基于DM8168的McFW 軟件框架[12]。McFW 軟件框架將DM8168中四個物理核的功能封裝成不同的Links 提供給設計者,設計者可以根據這些Links 接口,自定義一條Link 數據鏈路去實現自己的設計需求,而不需要理解DM8168 的底層是如何實現的,這給軟件端的設計帶來了極大的便利。
不同的Links 之間可能處于不同的物理核中,比如一條處理視頻的自定義數據鏈路所包含的Links可能同時存在于4 個物理核中,這就需要采取有效快速的通信方式減少數據在核間傳遞的時間。DM8168 主要采用Syslink、IPC 兩種方式來實現各物理核間的通信,提高數據傳遞效率。
Syslink 實現的通信協議包括Notify、MessageQ、SharedRegion 以及ListMP 等[13],多種通信方式可以保證Links 在DM8168 4 個核間進行高效的數據傳輸,其中最重要的是Notify 和ListMP 協議。Notify 將硬件中斷注冊成邏輯信號,并迅速發送帶32 bit 信息的事件通知給其他物理核,其他物理核中通過信號響應函數完成對信號的處理,Notify 由Host-A8 核管理,有效提高了Host-A8 對于其他3 個物理核的調度能力。ListMP 負責管理共享內存區,使數據流的存儲傳輸過程中,不同核物理核處理數據時可以訪問同一塊內存空間,使整個數據處理效率提高兩倍以上。
IPC 通信方式使用了管道(pipe)和內存映射(mmap)的方式[14]。pipe 管道是“半雙工”的,即是單向的,采用先進先出的原則將復雜的處理流程分解成獨立的子任務,從而快速完成每個子任務,主要用于DSP 核和VPSS-M3 核、Video-M3 核之間任務處理通信。此外,Video-M3 核與視頻協處理器HDVICP2之間的通信也采用管道的方式;內存映射機制通過將共享資源映射到內存中來減少對共享資源的拷貝,使得物理核對數據處理過程中可能發生的兩次拷貝降低為一次,有效降低了數據拷貝時間。
記錄儀上電后,創建視頻記錄線程,視頻數字化芯片ADV7441 芯片將輸入的VGA、PAL 視頻信號轉換成YUV 格式的視頻信號[15]。DM8168 芯片接收YUV 格式的視頻信號之后,通過用戶自定義的數據鏈路對視頻數據進行時標疊加、壓縮編碼、組幀等操作。當記錄儀收到視頻停止錄制的指令后,關閉視頻記錄的線程,保存視頻文件。
DM8168 芯片中的視頻記錄自定義數據鏈路設計如下:
1)VPSS-M3 核的Capture Link 捕獲YUV 格式視頻數據流并發送給DSP 核進行處理。
2)DSP 核中的DSP_OSD Link 對YUV 格式的數據流進行時標疊加,并將時標疊加完成后的數據流又傳輸給VPSS-M3 核。
3)VPSS-M3 核中OSP_DUP Link 將一路視頻流復制成兩路視頻流,將其中一路視頻流通過傳遞視頻數據流指針的方式,通過VGA 接口顯示在操作終端上,實現視頻的實時預覽。并將另一路視頻流傳輸給Video-M3 核。
4)Video-M3 核中的Encode Link 對視頻流進行H.264 格式的視頻編碼,獲得H.264 格式的數據流,在完成視頻編碼后發送給Cortex-A8 核。
5)Cortex-A8 核中的IPC_BITS_IN Link 接收編碼后的H.264流數據,對H.264視頻流進行MP4格式的封裝,獲得MP4格式的視頻數據,方便視頻數據的存儲。
以上5 步完成了對視頻數據的記錄,數據鏈路如圖3 所示。

圖3 視頻記錄數據鏈路
記錄儀的冗余存儲設計由數據庫設計和硬盤管理設計兩部分組成。傳統單盤存儲的車載記錄儀將數據庫和視頻數據放在一個固態硬盤中,當數據庫和固態硬盤中任何一個發生故障時都會導致存儲數據的損壞。采用冗余存儲設計時,數據庫獨立存放在NAND FLASH 中,保證當任意一個硬盤出現損壞時,數據庫還能正常運行并能對另一個盤的文件數據進行操作。
3.3.1 數據庫設計
記錄儀上電后,NAND FLASH 中的SQLite 數據庫進行初始化,由視頻數據記錄過程可知,視頻數據是MP4 格式,數據庫根據MP4 文件參數制作數據參數表。MP4 文件參數如下:

SQLite 數據庫制作的數據參數表如圖4 所示,數據庫用數據參數表完成對兩個固態硬盤中文件的管理。

圖4 數據庫數據參數表
3.3.2 硬盤管理設計
記錄儀上電后進行自檢,檢查兩個固態硬盤sda、sdb 是否正常掛載。若兩個盤都掛載失敗時,自檢報錯誤,不能進行數據記錄。若只有一個盤掛載成功時,自檢報故障,但可進行數據記錄。
記錄儀上電自檢成功、數據庫初始化完成后,數據庫開始管理固態硬盤中的文件,其步驟可總結如下:
1)數據庫根據數據參數表逐項檢索兩個硬盤中的數據,若有一個硬盤缺少文件,數據庫將從正常硬盤拷貝這個文件到缺少文件的硬盤完成數據同步。若有一個硬盤中數據全部丟失,記錄儀將格式化這個空盤,之后數據庫將正常硬盤中的數據全部拷貝至空盤完成數據同步;
2)記錄儀收到開始視頻錄制指令,在緩存區創建新的文件夾,用database_insert 函數向數據庫插入一條記錄,同時數據庫用sata_write_video 函數將文件信息同時寫入兩個固態硬盤中,完成數據文件的寫入和冗余存儲。
記錄儀對硬盤的管理流程如圖5 所示。

圖5 硬盤管理流程
視頻回放需要先完成視頻的解碼,由視頻數據記錄過程可知,視頻數據是以MP4 的格式存儲在兩個固態硬盤中,而DM8168 芯片的Video-M3 核中的解碼器需要H.264 格式的數據流,因此需要先將固態硬盤中的視頻源進行MP4 文件解封裝[16],獲得H.264 格式的數據流,才能在DM8168 芯片中進行數據鏈路設計,實現視頻回放功能。
3.4.1 MP4文件解封裝
該設計選擇調用Linux中開源的庫函數MP4V2[17]對固態硬盤中的MP4 文件進行解封裝。MP4V2 庫函數獲取硬盤中MP4 文件的信息過程如下:首先用MP4Read()函數打開文件,并賦值給自定義的文件句柄m_handle。再通過這個文件句柄利用庫函數分別獲取視頻時長、采樣頻率和視頻軌道個數。具體函數如下:
打開文件:m_handle=MP4Read(Video_file)
視頻總長:MP4GetDuration(m_handle)
采樣頻率:MP4GetTimeScale(m_handle)
軌道數:MP4GetNumberTracks(m_handle)
打開文件之后,獲得軌道數,車載記錄儀在錄制的視頻時只用一個視頻軌道,所以軌道數為1,再獲取視頻軌道的信息,視頻軌道中最重要的參數是序列參數集(SPS)、圖像參數集(PPS)、附加增強信息(SEI)[18],這3 個分別 是H.264 碼流前3 個NALU。有了這3 個信息就能拼接出一個H.264 數據頭,將數據頭放入數據包中就是一個完整的H.264 格式的數據流。
3.4.2 視頻回放鏈路設計
DM8168 芯片中的視頻回放自定義數據鏈路設計如下:
1)Cortex-A8 核中運行Bitsstream_read Link 讀取Linux 網絡文件系統目錄/home/root/encoder/dm8168下的H.264 高清碼流文件,發送給Video-M3 核。
2)Video-M3 核的DEC Link 上,將接收的H.264碼流解碼,解碼完成后,IPC_OUT Link 將獲得的視頻數據流發送給VPSS-M3 核。
3)VPSS-M3 核的IPC_IN Link 接收H.264 碼流,并用DIS Link 完成視頻的顯示。
以上3 步完成了對視頻數據的回放,數據鏈路如圖6 所示。

圖6 視頻回放數據鏈路
根據記錄儀調試需求,設計了一個QT 操作界面。手動選擇記錄射手1 視頻,進行視頻記錄功能測試,視頻記錄完成后,選擇剛剛錄制的000006 編號的視頻進行視頻回放功能測試,如圖7 所示。實驗結果表明視頻記錄與回放功能正常。

圖7 視頻回放界面
用FTP 服務登錄記錄儀板卡,兩個固態硬盤分別為sda 和sdb,對比兩個固態硬盤中的文件信息,結果顯示兩個固態硬盤數據一致,冗余存儲功能正常。

圖8 兩盤文件對比圖
該文設計的基于冗余存儲的車載數據記錄儀,采用自定義的數據鏈路完成視頻的記錄與實時回放,采用冗余存儲設計提高記錄儀數據存儲的可靠性[19-20]。該記錄儀在連續工作實驗與高低溫實驗中運行穩定,記錄、回放與冗余存儲功能正常,并且該記錄儀已經開始使用,對發射車整車實驗具有重要意義。