摘要: 隨著視頻壓縮技術(shù)的不斷發(fā)展,單路1080p@60Hz分辨率的視頻可以壓縮到幾兆進行傳輸,一個百兆網(wǎng)口可以傳輸多達10多路的IP視頻信號。目前的服務(wù)器單純依靠CPU進行軟解碼已經(jīng)顯得非常吃力[1];匹配高性能的服務(wù)器或者配置多臺服務(wù)器卻有存在高成本的壓力。針對這些現(xiàn)狀,本文設(shè)計了一個基于TI的DaVinci?平臺的網(wǎng)絡(luò)視頻解碼系統(tǒng)。驗證結(jié)果顯示,采樣該網(wǎng)絡(luò)視頻解碼系統(tǒng),可以使得單臺服務(wù)器增加上百路的IP視頻解碼,同時不影響服務(wù)器的其它性能,性能可靠且成本有很大優(yōu)勢。 1 TI 816X平臺簡介 DM816x DaVinci?視頻處理器[2]是高度集成、可編程平臺,其具有強大的視頻處理能力,具備1080p@60Hz的H.264編解碼能力。該平臺在視頻領(lǐng)域的應(yīng)用范圍非常廣泛,涉及領(lǐng)域包含:視頻編碼、解碼、轉(zhuǎn)碼和速率轉(zhuǎn)換、視頻安全、視頻會議、視頻基礎(chǔ)設(shè)施、媒體服務(wù)器和數(shù)字標牌。 DM816xDaVinci?視頻處理器包含了3個高分辨率視頻和成像協(xié)處理器(HDVICP2)。每個協(xié)處理器能夠執(zhí)行一個1080P@60Hz的H.264編碼或解碼或者多個較低分辨率或幀速率的編碼和解碼。另外,也可完成多通道HD至HD或HD至SD代碼轉(zhuǎn)換以及多重編碼。同時,其具備了一個數(shù)字視頻輸出口、一個數(shù)字視頻輸入口、還有一個數(shù)字視頻輸入輸出復(fù)用口,其單個輸出輸入口還具備了多路視頻同時分時輸出、輸入功能。芯片內(nèi)部集成了Cortex?-A8 32位RISC處理器處理器和DSP內(nèi)核,同時還集成了3D圖象引擎SGX530。DM816x DaVinci?視頻處理器提供了豐富的外設(shè)。視頻接口有同步HD和SD模擬視頻的輸出和雙HD視頻輸入;網(wǎng)絡(luò)接口包含了2個具有GMII和MDIO接口的千兆位以太網(wǎng),兩路千兆網(wǎng)提供了多路IP視頻接入的傳輸通道。豐富的外設(shè)集提供了控制外圍設(shè)備以及與外部處理器進行通信的功能。 2 系統(tǒng)結(jié)構(gòu)和工作原理 該網(wǎng)絡(luò)視頻解碼系統(tǒng)采用DM816X和FPGA的方案,具體功能框圖如圖1。前端網(wǎng)絡(luò)采用千兆網(wǎng)絡(luò)PHY芯片,速率為10M/100M/1000M自適應(yīng)。一般來說,網(wǎng)絡(luò)IP視頻從異地過來,均是通過一個路由進入到系統(tǒng)的前端網(wǎng)絡(luò)采集模塊;不通的路由支持支持的速率不通,同時線路的連接方式也相異,因此,我們這里采用了速率自適應(yīng)和線路自適應(yīng)的PHY芯片。在PHY片的另外一側(cè)是MAC口,對應(yīng)的是解碼芯片的MAC口,采用的是千兆通信方式,網(wǎng)絡(luò)時鐘的速率是125MHz。從帶寬上來看,前端網(wǎng)絡(luò)可以支持高達幾百路的D1視頻接入,從而保證了海量視頻數(shù)據(jù)接入的可能。 IP視頻解碼部分是采用TI的DM816X芯片為核心,外掛DDR和Flash等設(shè)備組成。在DM816x芯片上嵌入Linux操作系統(tǒng),作為整個單板的主控系統(tǒng),管理各種外設(shè),包括網(wǎng)口、DDR、可調(diào)電源模塊和Flash等,還可通過對FPGA模塊進行寄存器讀寫來管控后端的視頻處理環(huán)節(jié)。目前網(wǎng)絡(luò)視頻大部分帶有數(shù)據(jù)打包協(xié)議,我們這個系統(tǒng)可以支持標準的RTSP協(xié)議,同時也支持非標準的數(shù)據(jù)包,只有給出前端打包協(xié)議,就可以自定義解網(wǎng)絡(luò)數(shù)據(jù)包。網(wǎng)絡(luò)解包后,得到H.264碼流后,便送入到816x內(nèi)置的解碼器(HDVICP2)進行解碼;解碼后的數(shù)據(jù)可以利用816x的視頻處理系統(tǒng)進行裁剪、縮放和疊加。經(jīng)過一系列處理后,將圖像通過816x的2路視頻數(shù)據(jù)輸出通道進行輸出。雖然在物理通道上只有2路視頻輸出口,但是,通過軟件編程,可以采用Tri Stream 656的方式,分時輸出6路1080p@30Hz的視頻信號到視頻緩沖和顯示處理模塊。 視頻緩沖和顯示處理模塊主要由FPGA芯片和位于服務(wù)器上的顯卡組成。經(jīng)過解碼芯片處理后的視頻數(shù)據(jù)進入到FPGA后,還不能直接進入到顯卡。首先,邏輯芯片需要對視頻數(shù)據(jù)進行幀緩存,把數(shù)據(jù)先放進DDR2中,在DDR2中建立3幀圖像存放空間,通過控制讀取視頻幀的速度達到幀率調(diào)整的目的。邏輯內(nèi)部的PCI-E設(shè)備傳輸數(shù)據(jù)是采用串行傳輸,而從緩沖區(qū)出來的是并行視頻數(shù)據(jù),這個時候需要對視頻數(shù)據(jù)進行并串轉(zhuǎn)換。在服務(wù)器端的顯卡,通過驅(qū)動軟件可以開辟出一塊顯存區(qū)域用于存放并顯示視頻數(shù)據(jù)。一般和PC系統(tǒng)進行數(shù)據(jù)交互采用DMA方式是最為高效直接的,因此,我們將開辟處理的顯存區(qū)域映射到PCI-E設(shè)備中,通過邏輯程序把視頻數(shù)據(jù)通過DMA方式放入到映射區(qū)域。這樣,就相當于直接把視頻數(shù)據(jù)放入到顯卡中進行顯示。 整個視頻平臺工作上電后,816X首先從Flash中加載相關(guān)程序,并將Linux文件系統(tǒng)解壓出來在DDR中運行。IP視頻信號經(jīng)過解碼后形成6路并行YCbCr信號(每3路共用一個輸出通道),加上像素時鐘(DCLK)、數(shù)據(jù)有效位(DE)、行同步信號(HS)、場同步信號(VS)輸給后端FPGA進行處理。邏輯芯片接收到并行視頻信號后,先根據(jù)預(yù)定好的分時傳輸協(xié)議中解出6路單獨的視頻信號,分別放置在DDR的不同區(qū)域中;完成6路視頻的緩存和仲裁后,根據(jù)系統(tǒng)的需求對視頻數(shù)據(jù)進行DMA操縱,通過PCI-E設(shè)備把視頻數(shù)據(jù)送入系統(tǒng)進行顯示。 3 硬件設(shè)計 DM816X模塊的硬件電路主要由主芯片816X、4片DDR3、Fash、網(wǎng)絡(luò)PHY片和電源模塊組成組成。網(wǎng)絡(luò)PHY芯片采用Mirel的KSZ9031,該芯片體積小、功能全、支持速率自適應(yīng)、雙絞/直連線調(diào)節(jié)功能。該芯片和DM816X的EMAC(Ethernet Media Access Controller)口直接連接,把網(wǎng)絡(luò)數(shù)據(jù)接入到DM816X。主芯片外部掛有4片DDR3,主要用做816X的內(nèi)存映射空間和視頻處理的緩沖區(qū)域,可以在軟件小系統(tǒng)中進行自由配置。同時,主芯片外部還帶一個Nand Flash,用于存儲引用程序和系統(tǒng)文件。在芯片外圍,根據(jù)應(yīng)用需要放置硬件配置電路,把系統(tǒng)配置成網(wǎng)絡(luò)啟動。因為芯片對電源的精度和上電時序均有嚴格要求,因此專門針對該芯片設(shè)計了上電時序電路和AVS可調(diào)電源。芯片的上電時序要求為3.3V>1V AVS>1V Constant>1.8V>1.5V>0.9V,為此,采用了專用時序控制芯片LM3881MM對上電時序進行了控制。主芯片因為采用了先進的制造工藝,其核心電壓1V AVS對應(yīng)每個芯片均有一個精準值,在芯片運行過程中,也會因為工作狀態(tài)而調(diào)整核心電壓,所以針對該電壓也設(shè)計了專門的可調(diào)電源供電電路[4],具體電路模塊見圖2。圖2中,電源芯片采用TPS40400,其輸出端通過反饋電路送回反饋管腳,芯片帶有IIC的Slave模塊,連接到816x主芯片。在上電開始后,主芯片會讀取相關(guān)寄存器,反饋給電源芯片具體的電源調(diào)整精準值;在系統(tǒng)運行過程中,如果同時開啟了3個解碼核,會使得芯片功耗需求增加,主芯片也可以通過IIC通訊通知電源芯片調(diào)整電源輸出。 FPGA硬件電路模塊實現(xiàn)相對簡單,主要包括了PCI-E接口的FPGA芯片、DDR2、存儲Flash、JTAG接口和電源模塊。邏輯芯片采用ALTER的A7系統(tǒng)芯片,采用SPI加載邏輯的方式進行加載,外掛4片DDR2使用兩個控制器對視頻數(shù)據(jù)進行緩存。JTAG接口主要用于邏輯程序調(diào)試。操作系統(tǒng)端連接采用PCI-E接口,由邏輯芯片內(nèi)存自帶的PCI-E硬核實現(xiàn)。 4 DM816X軟件設(shè)計 為了便于軟件功能的移植、替換、添加和刪除,整個軟件采用層次式和模塊化的軟件結(jié)構(gòu)。縱向分布由5個層次組成,從下向上,分別是硬件層、OS層、平臺層、業(yè)務(wù)層、接口層。橫向分布由3個子系統(tǒng)構(gòu)成,從左至右,依次是A8核子系統(tǒng)、HDVPSS M3核子系統(tǒng)、Video M3核子系統(tǒng),具體結(jié)構(gòu)見圖3。 硬件層是軟件系統(tǒng)運行的硬件平臺,其核心是TMS320數(shù)字多媒體處理器,由A8、HDVPSS M3、Video M3、DSP 4個核構(gòu)成,其中HDVPSS M3、Video M3核是M3核。本軟件沒有使用到DSP核,所以硬件層由A8、HDVPSS M3、Video M3 3個核構(gòu)成。 OS層是硬件層上的操作系統(tǒng)層,由Linux、BIOS 6兩個操作系統(tǒng)構(gòu)成。Linux運行A8核上,BIOS 6運行在M3核[5]。 平臺層運行在操作系統(tǒng)層上,屏蔽軟硬件復(fù)雜性,抽象業(yè)務(wù)層所需要的功能接口,向上支撐業(yè)務(wù)層。基于A8核的平臺層由調(diào)試打印、第三方庫、設(shè)備抽象、utility、OS/Posix Lib、Comm以及MCFW多通道框架接口構(gòu)成。MCFW是TI提供的一套用來處理多媒體視頻的接口。A8核端由Syslink/IPC、Link Bitstream、Link API、MCFW API組成。VPSS M3核端由Syslink/IPC、HDVPSS Drivers、Links Capture/Display/SW Mosaic組成。Video M3核由Syslink/IPC、Decode/Encode、Links Decode/Encode組成。核與核之間的數(shù)據(jù)交互由Syslink/IPC實現(xiàn)。816X是一個多核SOC設(shè)備,各個核之間的通信需要通過軟件設(shè)計來實現(xiàn)。芯片的主處理器是A8,A8核端的Link API用來創(chuàng)建、控制、連接Links。通常由該處理器引導(dǎo)加載各個從處理器,包括了Video-Media Controller,VPSS-Media Controller等。其中解碼核實由Video-Media Controller負責(zé)管理的。引導(dǎo)加載過程包括從處理器的電源管理,復(fù)位控制,在合適的寄存器中寫入從處理器執(zhí)行的入口點。為了有效地實現(xiàn)多核通信,軟件還充分利用了郵箱中斷和自旋鎖功能實現(xiàn)。Mailbox為處理器通過寫寄存器,向其他處理發(fā)送中斷機制。A8,Media Controller等之間通過系統(tǒng)級的Mailbox進行通信。3個HD VICP2S的IP模塊有各自獨立的郵箱。SOC通過自旋鎖[6](SpinLock)方便實現(xiàn)了系統(tǒng)共享資源的互斥。 業(yè)務(wù)層由系統(tǒng)管理、在線升級、配置管理、stream、在線調(diào)試、告警/事件、codec_hdvpss幾個模塊組成。管理/配置總線用來實現(xiàn)業(yè)務(wù)層模塊間的通信,共享內(nèi)存(高速數(shù)據(jù)通道)用來實現(xiàn)stream模塊與codec_hdvpss模塊之間的高速數(shù)據(jù)傳遞。系統(tǒng)管理模塊是A8軟件子系統(tǒng)首先執(zhí)行的一個模塊,實現(xiàn)初始化系統(tǒng)資源、創(chuàng)建運行其他的模塊,最后監(jiān)聽其他模塊的運行狀態(tài)以及喂狗、控制運行狀態(tài)。升級模塊是一個較為獨立的模塊,不會與其他模塊有數(shù)據(jù)交互。實現(xiàn)3個核的軟件程序文件的在線升級。配置管理是業(yè)務(wù)層的中控模塊,接收主控板發(fā)過來的配置信息,控制、協(xié)調(diào)其他幾個模塊的運行。Stream模塊與網(wǎng)絡(luò)交互,獲取網(wǎng)絡(luò)發(fā)過來的碼流數(shù)據(jù),經(jīng)共享內(nèi)存(高速數(shù)據(jù)通道)傳遞到模塊做進一步處理。在線調(diào)試模塊是一個較為獨立的模塊,不會與其他模塊有數(shù)據(jù)交互,實現(xiàn)軟件的在線查看運行狀態(tài)等功能。告警/事件模塊向主控發(fā)送本軟件的告警/事件信息。Codec_hdvpss模塊從共享內(nèi)存(高速數(shù)據(jù)通道)獲取碼流數(shù)據(jù),進行codec以及視頻處理輸出。 接口層有三個部分,分別是板間/外交互、PHY、信號交換模塊。板間/外交互是指解碼板與主機的交互,接收主控板的配置管理消息,處理并返回。PHY模塊是指解碼板與網(wǎng)絡(luò)的交互,獲取H.264的碼流。信號交換模塊是指解碼板輸出視頻數(shù)據(jù)到邏輯芯片的數(shù)據(jù)交換模塊。 軟件系統(tǒng)的主要功能是最大支持同解6路1080P@30 H.264碼流,解碼延時小于50毫秒(Codec模塊收到碼流數(shù)據(jù)到解碼輸出到FPGA的延時);同時還具備啟動、監(jiān)聽其他任務(wù),監(jiān)控單板硬件狀態(tài),管理系統(tǒng)硬件狗、運行燈,接收主控的配置信息,對軟件系統(tǒng)以及硬件系統(tǒng)進行配置,檢測到有異常或某些重要事件發(fā)生等功能。 5 總結(jié) 本文根據(jù)目前一些網(wǎng)絡(luò)視頻解碼應(yīng)用現(xiàn)狀限制,提出了一種帶PCI-E接口的網(wǎng)絡(luò)視頻解碼系統(tǒng)。該系統(tǒng)采用了目前TI強大的視頻編解碼平臺DM816X并和FPGA邏輯芯片聯(lián)合應(yīng)用,實現(xiàn)了單板6路1080P@30Hz/32路D1的網(wǎng)絡(luò)視頻解碼;在單臺服務(wù)器中可以插入多張該單板,從而實現(xiàn)上百路網(wǎng)絡(luò)視頻解碼,同時不會降低服務(wù)器的性能。該設(shè)計系統(tǒng)在筆者設(shè)計的視頻解碼平臺中得到實際應(yīng)用和驗證,運行效果良好,并大大降低了單路視頻解碼的成本,具有很高的實用價值。 參考文獻: [1]齊兵,王群生,楊春玲.H.264解碼芯片的比較與研究.電視技術(shù),2006(9) [2]代健美,耿華芳,劉作學(xué).基于DaVinci技術(shù)的H.264解碼系統(tǒng),兵工自動化:2012(4) [3]周立國,梁淮寧,謝冬冬,等.基于PCI Express總線的數(shù)據(jù)傳輸卡的設(shè)計與實現(xiàn)[J].電子測量技術(shù);2007(11) [4]胡桂陽,盧月瓊,李昌禧.用單片機制作的直流穩(wěn)壓可調(diào)電源.電子世界:2005(12) [5]李宗海,陳蜀宇,李海偉.嵌入式Linux系統(tǒng)在ARM平臺上的構(gòu)建.計算機系統(tǒng)應(yīng)用,2010(10) [6]casevison.Dm8168 多核通信[R/OL].(2012-5-9). |