常娟
摘 要:本設(shè)計(jì)基于OMAP3530處理器的開發(fā)平臺(tái)設(shè)計(jì)視頻監(jiān)控客戶端。該客戶端通過SIP協(xié)議和服務(wù)器端通信。視頻監(jiān)控客戶端在OMAP3530開發(fā)板實(shí)現(xiàn),其ARM端完成客戶端呼叫,建立與視頻服務(wù)器連接,音視頻數(shù)據(jù)流接收、播放和存儲(chǔ)等功能,其DSP端完成解碼器實(shí)時(shí)實(shí)現(xiàn)。設(shè)計(jì)重點(diǎn)為客戶端oRTP和eXosip庫的移植、監(jiān)控界面的設(shè)計(jì)和H.264解碼器實(shí)時(shí)實(shí)現(xiàn)。
關(guān)鍵詞:OMAP3530;視頻監(jiān)控;SIP;達(dá)芬奇技術(shù)
1 引言
OMAP3530開平臺(tái)能夠提供最優(yōu)級(jí)別的視頻圖像圖形處理,它包含有MPU子系統(tǒng),IVA2.2子系統(tǒng),片內(nèi)內(nèi)存,外部存儲(chǔ)器接口,DMA控制器,多媒體加速系統(tǒng),安全系統(tǒng),綜合的電源管理系統(tǒng),以及豐富的外設(shè),能夠充分的滿足處理視頻流,2D/3D移動(dòng)游戲,視頻會(huì)議,高清圖像,視頻捕捉的需求,支持高級(jí)嵌入式操作系統(tǒng)如WindowsCE,Linux等系統(tǒng)[1]。本設(shè)計(jì)基于OMAP3530開發(fā)平臺(tái)實(shí)現(xiàn),通過SIP協(xié)議和服務(wù)器端通信,接收到視頻流后進(jìn)行解碼輸出到監(jiān)視器端顯示。
2 監(jiān)控系統(tǒng)整體實(shí)現(xiàn)方案
整個(gè)視頻監(jiān)控系統(tǒng)包括服務(wù)器端和客戶端,服務(wù)器端采用達(dá)芬奇開發(fā)平臺(tái)TMS320DM6446,其功能實(shí)現(xiàn)視頻采集、壓縮和傳輸?shù)裙δ?;客戶端OMAP3530平臺(tái)完成音視頻數(shù)據(jù)的解碼、存儲(chǔ)、回放、檢索等功能。
達(dá)芬奇服務(wù)器端功能模塊包含:ARM端系統(tǒng)控制模塊,DSP端編碼模塊,SIP信令控制模塊和RTP/RTCP實(shí)時(shí)數(shù)據(jù)傳輸控制模塊??蛻舳斯δ苣K包含:ARM端系統(tǒng)控制模塊,SIP信令控制模塊,RTP/RTCP接收模塊,DSP端解碼模塊和播放顯示模塊。
3 監(jiān)控客戶端設(shè)計(jì)
本監(jiān)控系統(tǒng)中,雙向TCP控制通道使用SIP協(xié)議,UDP流的封裝使用RTP協(xié)議。服務(wù)器和客戶端相互交互采用SIP協(xié)議完成,具體使用SIP協(xié)議的UAS模塊。RTP實(shí)現(xiàn)通過調(diào)用ORTP庫,服務(wù)器端需要使用RTP發(fā)送功能,將服務(wù)器端DSP編碼數(shù)據(jù)打包處理后發(fā)送到網(wǎng)絡(luò);客戶端需要使用RTP接收功能,將接收到的數(shù)據(jù)傳給OMAP3530 DSP端解碼顯示。
3.1 SIP實(shí)現(xiàn)
SIP會(huì)話協(xié)議主要包含以下四個(gè)主要組件:SIP用戶代理組件、SIP注冊(cè)服務(wù)器組件、SIP代理服務(wù)器組件和SIP重定向服務(wù)器組件[2]。
SIP的實(shí)現(xiàn)主要通過鏈接oSip庫實(shí)現(xiàn)。oSip庫實(shí)現(xiàn)效率高,主要功能是對(duì)SIP/SDP消息的API和事務(wù)處理的狀態(tài)機(jī)進(jìn)行解析,高層的SIP會(huì)話控制API通過調(diào)用底層API實(shí)現(xiàn)。SIP對(duì)于客戶端處理事件包含以下三種情況:EXOSIP_REGISTRATION_SUCCESS事件、EXOSIP_CALL_CLOSED事件、EXOSIP_CALL_ANSWERED事件。EXOSIP_REGISTRATION_SUCCESS為表明用戶是否注冊(cè)成功; EXOSIP_CALL_CLOSED表明會(huì)話關(guān)閉,置picked、calling為假,呼叫結(jié)束;EXOSIP_CALL_ANSWERED用于獲取UAS的SDP消息,并開始接受RTP包,將RTP包解包后,傳輸?shù)絆MAP3530 DSP端使其解碼顯示。
3.2 RTP實(shí)現(xiàn)
RTP用來網(wǎng)絡(luò)上傳輸音頻、視頻、模擬數(shù)據(jù)等實(shí)時(shí)數(shù)據(jù)的傳輸協(xié)議[3]。本系統(tǒng)由RTP和UDP協(xié)議共同完成視頻數(shù)據(jù)傳輸。
OMAP3530客戶端實(shí)現(xiàn):(1)初始化RTP協(xié)議,相關(guān)參數(shù)設(shè)置;(2)打開端口,RTP數(shù)據(jù)包開始接收;(3)RTP包接收成功后,解析RTP包頭,解析得到多媒體數(shù)據(jù);(4)RTP包接收結(jié)束,釋放RTP信息。在這里不用考慮RTCP的信息接收與發(fā)送,通過調(diào)用ORTP庫來完成。
3.3 解碼器的實(shí)時(shí)實(shí)現(xiàn)
本系統(tǒng)采用的視頻編碼標(biāo)準(zhǔn)為H.264,H.264與以往的視頻編碼標(biāo)準(zhǔn)相比具有更好的壓縮性能。H.264 具有優(yōu)秀的壓縮性能是多種新技術(shù)所產(chǎn)生效果的積累所致[4]。這些新技術(shù)包括:多模式幀內(nèi)預(yù)測、可變尺寸塊的運(yùn)動(dòng)補(bǔ)償、多參考幀的運(yùn)動(dòng)補(bǔ)償、4×4整數(shù)變換、高效的熵編碼、環(huán)路濾波等。這些新技術(shù)大大增加了解碼器實(shí)時(shí)實(shí)現(xiàn)的復(fù)雜度。為了解碼器在OMAP3530 DSP端實(shí)時(shí)實(shí)現(xiàn),結(jié)合OMAP3530 DSP硬件特性,本文主要使用Cache優(yōu)化,EDMA傳輸和匯編及指令優(yōu)化技術(shù)完成H.264解碼器實(shí)時(shí)實(shí)現(xiàn)。
Cache優(yōu)化最主要方法是盡可能提高Cache lines的重復(fù)使用效率,一般通過合理安排數(shù)據(jù)和代碼內(nèi)存位置,以及調(diào)整CPU的內(nèi)存訪問順序來達(dá)到此目的,盡量減少Cache miss,增加Cache的命中率。Cache的優(yōu)化包括程序Cache優(yōu)化和數(shù)據(jù)Cache優(yōu)化[5]。
H.264整個(gè)解碼算法代碼總結(jié)起來可以分成兩部分:關(guān)鍵執(zhí)行代碼和生僻事件代碼。代碼進(jìn)行Cache優(yōu)化時(shí),安排頻繁調(diào)用的代碼只包括關(guān)鍵執(zhí)行代碼,去除其中的生僻事件,從而減小動(dòng)態(tài)存儲(chǔ)區(qū)域的大小,減小L1P的沖突失效。對(duì)H.264解碼的關(guān)鍵執(zhí)行函數(shù)進(jìn)行分析,調(diào)整其執(zhí)行順序,將調(diào)用頻繁的代碼放置在一起,可以使代碼分配在連續(xù)的存儲(chǔ)空間,從而提高指令Cache的命中率。對(duì)于比較大的函數(shù)代碼段,可以通過將其分成幾個(gè)大小適合程序Cache尺寸的小段來消除L1P中的容量失效。
DSP端內(nèi)部存儲(chǔ)器存儲(chǔ)速度快,但容量太小,外部存儲(chǔ)器容量大,但存儲(chǔ)速度慢。解決辦法是根據(jù)程序特性合理分配內(nèi)存空間。數(shù)據(jù)分配的一個(gè)原則是盡量將數(shù)據(jù)放入片內(nèi)存儲(chǔ)器,由于圖像分辨率很大,無法將數(shù)據(jù)全部放入片內(nèi)存儲(chǔ)器,但可以想辦法保證當(dāng)DSP需要數(shù)據(jù)時(shí)這部分?jǐn)?shù)據(jù)已經(jīng)存放在內(nèi)部存儲(chǔ)器中[6]。借助DMA的后臺(tái)運(yùn)行能力可以實(shí)現(xiàn)此目標(biāo)。編碼器的編碼過程是固定的,其數(shù)據(jù)處理按一定順序流程,因此可以通過操作DMA控制器完成內(nèi)存和DDR2存儲(chǔ)器的數(shù)據(jù)交換,大大提高了處理效率。本系統(tǒng)幀內(nèi)預(yù)測和幀間預(yù)測使用DMA技術(shù)將需要的宏塊數(shù)據(jù)提前放到內(nèi)部存儲(chǔ)器中。
對(duì)于比較耗時(shí)的H.264解碼器模塊采用DSP匯編指令進(jìn)行優(yōu)化。本文使用超長指令字(VLIW)[7]和打包數(shù)據(jù)處理技術(shù)[8]。(1)幀內(nèi)預(yù)測殘差模塊:因當(dāng)前數(shù)據(jù)和預(yù)測數(shù)據(jù)均為8位的無符號(hào)數(shù)需要使用UNPKHU4和UNPKLU4擴(kuò)展為16為無符號(hào)數(shù);然后采用打包數(shù)據(jù)處理指令SUB2一次完成兩個(gè)數(shù)據(jù)相減。每取一次數(shù)據(jù)有五個(gè)指令周期延遲,故取數(shù)據(jù)是比較耗時(shí)部分,C64x+打包數(shù)據(jù)處理指令支持雙字操作,故采用LDDW雙字取數(shù)據(jù)指令,一次完成讀取4個(gè)需處理數(shù)據(jù)。C64+有兩個(gè)可進(jìn)行數(shù)據(jù)處理的數(shù)據(jù)通路A和B,兩個(gè)數(shù)據(jù)通路A和B完全可以并行執(zhí)行,故一次取8個(gè)需處理數(shù)據(jù),完成對(duì)一行數(shù)據(jù)的處理,分八次循環(huán)完成。(2)模式選擇代價(jià)值計(jì)算:因預(yù)測數(shù)據(jù)未必滿足32位字對(duì)齊的要求,故不能使用LDDW雙字取值指令,使用LDNDW指令,當(dāng)前塊數(shù)據(jù)滿足32位字對(duì)齊的要求,使用LDDW雙字取值。利用SUBABS4指令一次完成4個(gè)打包的8位值間的差的絕對(duì)值。為了計(jì)算絕對(duì)值求和,構(gòu)造常數(shù)0x01010101,利用DOTPU4指令一次將SUBABS4所求結(jié)果與0x01010101相乘,然后把4個(gè)乘積相加得到絕對(duì)值求和結(jié)果。由于C64x+ DSP中有兩組寄存器A和B,兩條數(shù)據(jù)通道,兩組寄存器可以完全并行的執(zhí)行,使A、B兩組寄存器分別處理一行數(shù)據(jù)。
本文利用以上優(yōu)化技術(shù)完成CIF分辨率H.264實(shí)時(shí)解碼顯示。
4 結(jié)論
本設(shè)計(jì)在OMAP3530開發(fā)板端實(shí)現(xiàn)視頻監(jiān)控客戶端,其ARM端完成客戶端呼叫,建立與視頻服務(wù)器連接,音視頻數(shù)據(jù)流接收、播放和存儲(chǔ)等功能,其DSP端完成解碼器實(shí)時(shí)實(shí)現(xiàn)。該客戶端可以隨時(shí)訪問服務(wù)器和監(jiān)控設(shè)備,界面友好,軟件運(yùn)行流暢穩(wěn)定,該系統(tǒng)能夠在局域網(wǎng)和廣域網(wǎng)范圍內(nèi)運(yùn)行。
[參考文獻(xiàn)]
[1]Texas Instruments Incorporated.OMAP3530(SPRS504B)[Z],2010.
[2]劉勇,陳延雄.SIP協(xié)議的研究及呼叫控制實(shí)現(xiàn)[J].微處理器,2008(3):54-56.
[3]任泰明.TCP/IP協(xié)議與網(wǎng)絡(luò)編程[M].西安電子科技大學(xué)出版社,2004.4.
[4]Richardson E G.H.264 and MPEG-4 Video Compression:Video Coding for Next Generation Multimedia [M].John Wiley & Sons, 12 August,2003.
[5]Texas Instruments Incorporated.TMS320C64x+ DSP Cache Users Guide (SPRU862).2006.10.
[6]Texas Instruments Incorporated.TMS320DM644x DMSoC DDR2 Memory Controller User's Guide(SPRUE22C).2007.11.
[7]Texas Instruments Incorporated.TMS320C64x+ DSP Megamodule Reference Guide(SPRU871K)[Z],2010.
[8]Texas Instruments Incorporated.TMS320C64x/C64x+ DSP CPU and Instruction Set Reference Guide(SPRU732J)[Z],2010.