摘 要: 針對構建高可靠性的多媒體數字監控系統提出了一種嵌入式網絡視頻服務器的設計方案,介紹了基于ADSP-BF532" title="ADSP-BF532">ADSP-BF532多媒體處理器的嵌入式" title="的嵌入式">的嵌入式網絡視頻服務器的軟、硬件設計,并結合該芯片的硬件指令特點進行程序優化。實驗結果表明方案可行,滿足監控系統的需求。
關鍵詞: 嵌入式網絡視頻服務器 ADSP-BF532 視頻壓縮 MPEG-4 視頻傳輸
目前,視音頻技術在各項工作和生活領域中得到了廣泛應用,還為人們提供了高效的傳輸平臺以及接入和處理手段。多媒體監控系統以其能夠實時、形象、真實地反映被監控對象的特性而逐漸成為現代化管理、檢測、控制的重要技術手段之一。而網絡視頻技術的一個主要熱點就是嵌入式數字視頻監控系統。在基于嵌入式遠程視頻監控系統的研究中,國外起步較早,并處于領先水平,已經有成熟的嵌入式網絡視頻服務產品,采用MPEG或者小波壓縮方法,其性能普遍比較好,但價格昂貴。國內在這方面的研究還處于剛剛起步的階段,隨著數字技術的發展,圖像數據壓縮編碼技術及標準的改進,芯片成本的不斷下降,從事研究的單位也就越來越多。本系統利用美國ADI公司2004年4月最新推出的ADSP-BF532 DSPCPU芯片實現嵌入式網絡視頻服務器,將其用于構建高可靠性的視頻監控系統。ADSP-BF532摒除了基于傳統架構的傳統DSP和RISC控制器不能滿足視頻應用的廣泛性、靈活性以及標準的多樣性的缺陷,利用ADI公司采用的全新的MSA架構技術,充分滿足了實時多媒體數字信號處理的要求。本文研究的嵌入式網絡視頻服務器的設計方案,與傳統的多媒體監控系統相比,具有體積小、成本低、穩定性高和實時性好等特點,有很強的實際應用價值。
1 嵌入式網絡視頻服務器的原理
嵌入式視頻服務器是一種提供網絡視頻傳輸和共享的嵌入式設備。它采用嵌入式一體化結構,以面向實時處理的軟件平臺,集成了多通道視頻、網絡傳輸等多種功能,將視頻和音頻信號進行采集、壓縮、復合后轉換為網絡IP包,采用合適的網絡協議實現了視頻和音頻壓縮數據流的實時網絡傳輸,使得用戶無論身在何處都能通過網絡獲得指定現場的實時圖像和聲音信息。此外,通過視頻服務器內置的一個嵌入式網絡服務器,還能實現對視頻服務器的遠程配置和其他附屬設備的遠程控制與狀態獲取。
由于把視頻壓縮和網絡功能集中到一個體積很小的設備內,可以直接連入局域網,達到即插即看,省掉多種復雜的電纜,安裝方便(僅需設置一個IP地址)。用戶也無需安裝任何硬件設備,僅用瀏覽器即可觀看,也可以在上端主機編制控制程序,通過人機界面進行瀏覽。
2 系統的硬件設計
基于ADSP-BF532的嵌入式網絡視頻服務器的主要硬件功能模塊為:視頻輸入模塊、核心的ADSP-BF532 CPU、視頻輸出模塊、外部存儲模塊、仿真調試接口(JTAG)模塊以及電源模塊。
圖1為該系統組成結構圖,具體設計如下:系統前端視頻采集由ADV7183實現,視頻數據" title="視頻數據">視頻數據采集格式為YUV422Planar,采集的數據經過ADSP-BF532的PPI接口直接存儲在SDRAM里,ADV7183在自己的時鐘控制下通過PPI接口自動向SDRAM單元送數據,當采集完一場數據時DMA產生中斷,在DMA的中斷服務程序里根據實際設定情況完成視頻處理;音頻采集由AD1836以及外圍相應的電路來實現,音頻采集格式為單聲道,8000Samples/s,每個采樣用16Bits量化,采集的數據經過ADSP-BF532的PPI接口直接存儲在SDRAM里,當設定存放音頻采集數據的緩存器滿時DMA產生中斷,在DMA的中斷服務程序里根據實際設定情況處理音頻數據; ADSP-BF532一方面把采集來的視頻音頻數據經SPI接口送入MPC860進行處理,通過MPC860的MII接口與物理網絡相連接,然后送到PC機上供實時監看和監聽;一方面實時處理采集的音視頻數據,壓縮編碼完成后的數據送到PC機,并存入硬盤。系統配置JTAG接口,運用于調試階段。本文主要研究嵌入式視頻服務器中的視頻數據的處理,對于音頻數據不予介紹。
3 系統的軟件設計與優化
系統在Blackfin系列的軟件開發環境Visual DSP++3.1下實現,主要分為視頻外設編程、視頻編碼編程、視頻傳輸編程以及系統優化部分。
3.1 系統外設軟件設計
視頻輸入設備ADV7183:ADSP-BF532通過I2C總線配置ADV7183采集圖像的亮度、對比度、色度和飽和度等。ADV7183的內部控制寄存器訪問通過I2C總線接口完成。
視頻輸入PPI接口:半雙工形式,最大16位數據傳輸,輸入時采用二維DMA方法,每采集一幀圖像進行一次處理。二維DMA程序如下:
本程序采用標準的ITU-656接收模式,接收視頻數據字節流:
X_COUNT=360; Y_COUNT=288;
X_MODIFY=4; Y_MODIY=4;
按以上設置執行二維DMA后,從首地址開始的內存數據排列:
0, 4, 8, …… 356
360, 360+4, 360+8, …… 360+356
2×360, 2×360+4, ?? 2×360+8 …… 2×360+356
…… …… …… …… ……
284×360,284×360+4,284×360+8,……284×360+356
視頻輸出UART接口:利用ADSP-BF532提供的UART口,加快調試過程。
串行SPI和網絡接口設備MPC860的編程:利用SPI接口,將ADSP-BF532作為傳輸數據的主設備,MPC860作為從設備,將數據傳送給MPC860處理,接收視頻數據并提供網絡接口。其中網口、SPI接口接收數據的流程如圖2所示。
3.2 視頻編碼
考慮到壓縮效率和碼率,視頻服務器的核心采用了MPEG-4 Simple Profile標準進行視頻壓縮編碼。只進行幀內編碼(I幀)和幀間預測編碼(P幀),而不進行雙向預測編碼(B幀),適合矩形視頻對象(Video Object)編碼。
其中的核心算法有DCT和IDCT,它采用2D 8×8 DCT,并且采用循環緩沖,充分利用了Blackfin DSP的優勢,減少了循環體內部的指令執行數;MPEG-4采用兩種方法確定量化步長,一是采用TM5速率控制方式,二是采用MPEG-4中定義的速率控制模型,它們都是通過碼流速率大小以及圖像質量的要求來改變量化系數。MPEG-4的直流系數量化采用非線性量化方式,交流系數既可以選擇H.263量化也可以使用MPEG量化,這里采用H.263模式。表1為MPEG-4量化操作表。
運動預測使用條塊SAD(當前的圖像與預測圖像的絕對差值和)最小搜索出最匹配的宏塊,而且Blackfin DSP提供了一條視頻專用指令SAA,大大提高了速度;最后用邊界填充(PADDING)減少在宏塊邊界上的運動誤差。
3.3 視頻網絡傳輸的實現
經過視頻采集、壓縮后的視頻數據通過網絡進行傳輸,其傳輸層用TCP傳輸協議" title="傳輸協議">傳輸協議傳輸信息包很小的操作控制命令,用UDP傳輸協議傳輸視頻圖像數據。因為TCP這種傳統的連接協議必須要求數據無誤地順序傳輸到客戶端的應用層,可以利用TCP傳輸協議傳輸網絡監控中的控制命令,保證服務器和客戶端正確接收到操作命令。UDP傳輸協議沒有提供網絡流量控制和數據包丟失、出錯處理,在高級壓縮算法如MPEG-4采用了幀間壓縮的方法,數據包丟失可能影響到連續幾幀視頻圖像。所以,基于UDP傳輸協議的應用程序必須靠設計解決可靠性問題。
上端軟件提供友好的用戶界面,用Visual C++6.0實現。根據用戶的需求,通過網絡從遠程終端接收視頻數據,包括MPEG-4的解碼過程、網絡傳輸控制和網絡命令編碼等。有兩種編寫方式,第一種需要專門寫一個服務器/客戶端軟件來發送和接收視頻圖像數據;第二種可以采用服務器/瀏覽器模式,即將客戶端軟件做成控件,嵌入到網頁中,做成基于WEB的數字視頻服務器。本文采用第一種方式。
網絡通訊模塊采用組播技術,提高程序的效率。系統IP網絡數據通信流程圖如圖3所示。本文為實現組播服務特別寫了一個類CMulticast,它是專門為視頻傳輸而封裝的類,用于服務器和客戶機兩端。下面對此類的公共訪問函數進行介紹。
class CMulticast : public Cobject
{
public:
void Close(); //關閉創建的套接字" title="套接字">套接字
BOOL IsConnect();
Static Void Unintilize(); //Winsock終止
Static Void Initilize(); //Winsock啟動
Int Receive(char* lpData, int size); //從指定組的指定端口讀取數據
Int Send(char* lpData, int size) //向目的地址發送消息
BOOL Create(Cstring lpstrAddr,unsigned short port,HWND HWND);//創建和綁發送或接收套接字并把該套接字加入組播組,并設置了消息回調機制
CMulticast();
Virtual ~CMulticast()
Public:
HWND m_hWnd; //用于消息傳遞的窗口句柄
SOCKET m_hSocket; //發送或接收用套接字
SOCKET m_hGroupSocket; //組套接字
BOOL m_bConnected; //是否已經加入到一個組
SOCKADDR_IN addr; //發送套接字地址
SOCKADDR_IN srcaddr; //接收或發送的目的地址
}
3.3 系統級優化
Blackfin軟件開發平臺的編譯系統支持ANSI C以及C++編譯,其系統還提供了大量的多媒體操作指令。在針對系統軟件開發時,可以根據硬件的特點研究和開發調試過程中的經驗,對代碼的編譯和具體任務的處理進行優化。另外為了獲得較好的壓縮圖像質量和較高的編碼效率,要對MEPG-4視頻編碼算法進行適當的優化,以及針對要縮短顯示模塊代碼執行時間而進行上端軟件的設計優化。
4 實驗結果
在該實驗的基礎上,經過對ADV7183采集的視頻序列(幀率為30fps,CIF格式)進行測試,結果表明:(1)DSP可通過SPI接口實時傳輸視頻圖像編碼數據,數據不丟失,不出錯;(2)在對MPEG-4視頻壓縮編碼測試時重建圖像質量保真度接近1;(3)在局域網上作模擬實驗,可以實時傳輸CIF尺寸視頻圖像,傳輸延遲控制在0.5s以內;(4)UART接口能夠完成本地視頻輸出。基于ADSP-BF532的嵌入式網絡視頻服務器的設計方案是可行的,但是某些技術指標仍然無法勝任實際的應用場合,需要進一步提高視頻壓縮的測試結果,增加大容量的硬盤存儲系統來存儲視頻數據。
參考文獻
1 ADSP-BF532 Blackfin DSP Hardware Reference.Analog De-vice,April 2003
2 Visual DSP++3.1 C/C++ Compiler and Library Manual for Blackfin Processors. Analog Device,April 2003
3 劉富強. 數字視頻監控系統開發及應用.北京:機械工業出版社,2003
4 鐘玉琢, 王 琪, 賀玉文. 基于對象的多媒體數據壓縮編碼國際標準——MPEG-4及其校驗模型.北京:科學出版社, 2000