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