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