引言 隨著視頻壓縮技術的日益成熟,嵌入式視頻監控成為當今視頻監控的主流。目前新的視頻編碼標準H.264的成熟和嵌入式技術的廣泛應用,推動了視頻監控系統向多領域延伸。本文介紹了一種基于H.264的嵌入式技視頻監控結構和系統工作原理。客戶端實現時,針對H.264標準解碼中存在的問題,采用SIMD(Single Instruction,Multiple Data)技術,實現了宏塊內插過程的優化。最后在實際環境中進行了測試,整個系統的運行比較穩定。 1 嵌入式視頻監控系統設計 1.1系統的體系結構 本文提出的基于H.264的嵌入式視頻監控系統由以下4部分組成,如圖1所示 ![]() 圖1監控系統的結構 (1)視頻監控前端(DVS):完成現場視頻數據的采集,利用H.264壓縮技術完成兩種不同分辨率和幀率視頻流的編碼。通常情況下,將低碼率的視頻流通過互聯網或GPRS、CDMA網絡傳輸到中心管理服務器。(2)客戶端(Client):接收從中心管理服務器轉發過來的數據,進行實時瀏覽或向中心管理服務器請求歷史數據或通過中心管理服務器配置和控制云臺。(3)中心管理服務器(CMS):管理DVS、Client和媒體服務器,記錄三者的相關信息(ID號、IP地址、端口號Port、圖像分辨率、壓縮格式等參數);向DVS請求視頻流;向Client發送視頻流;向媒體服務器發送視頻流或檢索視頻流。(4)媒體服務器(MS):存儲不同類型的視頻流;向CMS提供歷史文件。 1.2系統的工作原理 ![]() 圖2系統的工作原理 圖2所示CMS是視頻監控系統的核心。當DVS接入Internet后,會將本地攝像機的ID、IP和端口號向CMS注冊,以便CMS的管理。CMS會把DVS提供的信息寫入本地監控前端數據表(DVS Table)。這樣,Client可以通過DVS的ID號進行遠程訪問。同樣MS和Client也用同樣的方式向CMS注冊,CMS會把相關系信息寫入客戶端表(Client Table)。然后,遠端用戶通過Client輸入要訪問DVS的ID號并發向CMS,CMS會跟據DVS的ID號查詢DVS Table,得到DVS的lP地址和端口Port,向DVS發送連接請求,當會話建立成功后,DVS開啟編碼器開始采集編碼,通常情況下它會把低分辨率的視頻流發向CMS,再由CMS轉發向不同的客戶端。最后,客戶端對接到的視頻流進行解碼顯示,從而完成監控任務。 DVS在采集編碼時,會把數據流編成兩種具有不同分辨率和幀率的獨立視頻流,如Dl和CIF或HDI或CIF等,為了節省有效帶寬.它把其中一種低分辨率的視頻流發往CMS,另一種高分辨率的視頻流存于本地磁盤。而CMS接收到視頻流后會根據當前的網絡狀況和客戶端處理能力調整視頻流的格式進行轉發,最后把接收到不同格式的視頻流存儲于不同的MS。只有當網絡負載比較輕的情況下。CMS會向DVS請求高分辨率的視頻流。可見,CMS不僅充當了管理員的角色,而且也充了變換編碼的角色。 另外,當Client需要回放遠端視頻流時,會向CMS發出歷史數據請求。其中包括DVS的ID號、圖像格式和時間等信息。CMS根據請求檢索Media Table,查到符合要求的數據時,會向MS請求,收到Client要求的媒體流后,進行轉發。 2 H.264解碼優化 H.264是圍際上最新的視頻編碼標準,它不僅采納了現有視頻標準的優點,而且推出一些新的技術如多模式、多參考幀、運動估計、自適應二進制算數編碼等新技術,大大提高了視頻編碼的效率。但是H.264性能上的改進也帶來了復雜度的明顯提升。其中運動補償是H.264算法解碼最耗時的部分,所以客戶端實現中除了采用通用的方法(像素內插、調整數據結構、刪除冗余代碼)優化H.264解碼器外,還利用了SIMD技術,重點對運動補償中的宏塊進行優化。 在H.264解碼器中,用一個6抽頭濾波器可以實現1/4像素內插,并且固定的濾波器系數可以預先存儲,內插過程在濾波器系數和圖像數據問產生結果,所以用一個SSE(Streaming SIMD Extensions)指令PMADDWD(Packed Muhiplv and Add)很容易實現這一過程,如圖3所示為指令PMADDWD工作過程: ![]() 圖3 PMADDWD指令 圖3中所示有兩個128位SSE寄存器操作數,操作數中每個數據單元是16位整數。指令先對它們對應的兩個16位整數相乘.相乘直接相加,最后把結果存入一個SSE寄存器中,其中每個數據單元是32位整數。那么,用一條PMADDWD指令在兩個128位SSE寄存器里就可以完乘法和加法計算,然后在結果寄存里對這4個32位數據相加得到最終結果。但是,當計算一個新的像素值時,每次都需裝入不同圖像的數據。那么對于一維中的一個塊來說,向量數據必需裝入64次。所以為了避免重復裝入相同的數據,我們采用了水平內插法。實現過程如圖4所示: ![]() 圖4 子像素內插實現過程 水平內插,先把6+8—1=13個相關像素裝入一個長度為128比特的寄存器中。然后把它們拆分。并分別移入兩個長度為16比特的SSE寄存器中(RI和R2)。由于濾波器系數(1,-5,20,20,-5,1)必須水平移動,所以我們必須裝入4種具有不同平移的濾波器系數,然后在R1上對這4個濾波器系數執行PMADDWD指令,得到前4個內插像素值。需要注意的是,在計算第4個內插象素值時,由于第5個濾波器系數c5=1不能裝入第4個系數寄存器,因此需要單獨地在x(i+6)上進行一次額外的運算才能得出第4個內插像素值。同理,可以在R2上計算出另外4個內插像素值。這種方法避免了反復加載不對稱數據帶來的損失,減少了數據裝入的負載,所以H.264算法解碼速度得到提高。 當然對于垂直內插,可以通過簡單拆分、移位和加法完成這一過程。如濾波器系數可以用簡單的移位和加法實現。因此6行數據可以先裝入6個128位的寄存器中,接下來通過移位和加法計算出最后的結果。由于SSE寄存器可以裝載8個16位數據,所以可以在一行上計算出8個內插像素值。在這一模中,計算塊大小的內插像素值比塊節省計算時間,提高了解碼速度,可看最后實驗結果。 3 客戶端的實現 (1)CH264Dec模塊,是H.264壓縮碼流的解碼類。負責H.264壓縮碼流的解碼,供顯示模塊調用。該模塊的實現不僅采用上小節提出的優化方法,還采用了研究者已經提出的其它優化方法。 (2)CDirectDraw模塊,是圖像顯示類。采用微軟DirectX中的DirectDraw技術,主要完成客戶端主界面的初如化和調用CH264Dec模塊器模塊完成圖像顯示工作。 (3)CFileSave模塊,是文件存儲類。對文件進行初始化(文件名、大小、存儲時間、存儲路徑等),完成存儲。 (4) CCIielltSocket模塊,是網絡傳輸類。初始化套接字、連接CMS、從網絡接收數據、向CMS發送數據請求和云臺控制請求等。 (5) CPlayBaek模塊,是圖像顯示類。回放窗口的初始化及歷史文件的播放顯示,調用解碼器類。 4 實驗結果 為了驗證本文中采用SIMD技術對JMl2.4參考軟件中解碼部分優化的有效性,我們給出的測試結果如表l所示。主要測試解碼模塊中亮度運動補償的解碼速度。解碼平臺使用普通的PC機。奔騰四代2.4GHz CPU,512M的內存,Windows XP操作系統。測試序列中只有I幀和P幀。 表1解碼優化的測試結果 ![]() 測試結果如表1所示,我們采用SIMD技術對參考軟件進行優化后的解碼速度比優化前快1-3倍左右。但對于高位率視頻流(小步長的視頻流),僅采用SIMD技術很難達到比較快的優化速度,這是因為熵解碼過程對解碼速度影響較大。對此,我們采用不同的優化算法對影響解碼速度的所有模塊進行優化,在實際環境中進行測試,實驗結果如圖5所示。結果表明解碼速度會受編碼時的目標碼率和GOP值的影響。在目標碼率相同的情況下,GOP值越小,解碼速度越慢,反之則越快,但影響不太明顯;在GOP相同的情況下,目標碼率越小,解碼速度越快。反之則越慢,而且影響比較明顯。所以本系統在實際應用中,我們采用100Kbit/8的目標碼率進行編碼,以實現解碼端平均25fps左右的解碼速度,這樣可以正常完成I監控系任務。 ![]() 圖5系統的測試結果 5 結論 本文介紹了一種基于H.264的嵌入式視頻I監控系統結構和系統工作原理,接著分析了PMADDWD工作過程和H.264解碼中宏塊的內插過程,然后根據PMADDWD指令特點,提出了一種針對H.264解碼中宏塊的內插過程優化方法。最后給出的實驗結果證明它的有效性。另外,本文實現了監控客戶端,并應用有實際環境中運行良好。 本文作者創新點:根據多媒體擴展架構指令集中PMADDWD指令特點,針對H.264解碼中宏塊的內插過程,提出了一種優化方法,實驗證明,優化后亮度運動補償部分的解碼比優化前快1-3倍。 項目經濟效益:18萬元。 作者:張朝偉,周兵 來源:《微計算機信息》(嵌入式與SOC)2009年第3-2期 |