基于DSP的H264數字視頻服務器設計
0 引言
本文引用地址:http://www.104case.com/article/201609/304161.htm隨著科技的日新月異,視頻監控應用得到了飛速發展。視頻監控以其直觀、方便、信息內容豐富而廣泛應用于許多場合。近年來,隨著互聯網的大范圍普及以及計算機網絡和圖像處理、信息傳輸技術的發展,視頻監控技術也有了長足的發展。視頻監控已經滲透到教育、政府、娛樂場合、醫院、酒店、運動場館、城市治安等多種領域。目前安防監控的要求對于設備提出了較高的要求:比如對于傳輸的實時性,畫面的質量的要求。本文實現一個基于DSP的H264視頻監控服務器的(DVS)設計,它具有較高的壓縮比,低誤碼率以及較低的失真對視頻進行編碼,由TCP/IP協議實現了視頻的網絡輸出,可以達到視頻傳輸的實時性。
1 系統設計
如圖1所示,本系統采用TI的DM6467處理器,DSP架構的硬件平臺系列,具有強大的計算能力,在低功耗的前提下可達到1.2GHz,以及包含了H26x的編解碼庫,可以滿足對視頻算法的需求,此外,此平臺支持多種外設,諸如PCI、LAN、以及各種視屏輸入,廣泛應用于視頻會議、監控系統、機頂設備。因此,此平臺可以用來設計H264的視頻服務器。

視頻服務器的系統構架主要包括視頻采集模塊、視屏編碼模塊以及網絡傳輸模塊。

在系統上電之后,加載程序編譯成功的.out文件,初始化DSP/BIOS系統,以及視頻編碼庫。視頻采集處理過程如下:攝像機的PAL視頻通過AD轉為數字信號,并且通過內部算法轉為YUV(4:2:2),然后通過接口EMIF把數據傳遞至存儲器EEPROM中,然后DSP采用視頻編碼庫中的H264算法對數據進行壓縮,通過TCP協議將壓縮后的視頻信號通過以太網LAN傳輸出去,從而構成了視頻服務器,而客戶端只需要按照TCP協議接收數據并解碼,就可以實時顯示圖像。
1.1 視頻采集模塊
圖3為視頻采集模塊的原理圖,CVBS為視頻輸入,可以將模擬視頻信號轉換為YUV分量,輸出為ITU—R BT.656,其中對該編碼器的配置是通過IIC總線將指令寫入內部寄存器,就可以正常采取視頻信號并把數據傳給存儲器做進一步的處理。

在此系統中,使用了ROM對視頻信號做緩存以及編碼處理(圖4),芯片通過CS、OE來控制芯片并對其做讀取操作。它和DSP的連接示意圖如圖4所示。

1.2 H264算法
H264具有壓縮率高以及失真率低的優點,其實現過程如下:1)把當前的圖像劃分成若干個子模塊,以子模塊作為編碼的基本單元;2)通過當前幀減去預測值經過變換、量化、重排、熵編碼,從而加強了壓縮率;3)采用了時域運動補償的方法,從而減少了冗余以及增強信道傳輸的容錯性。
DM64xx芯片本身具有H264編碼庫,在開發的時候只需加載h264enc.lib并調用函數int h264.enc即可,參數聲明如下:
Unsigned char*pic原始圖像首地址
Unsigned char*ostream編碼后輸出數據流緩沖地址
int channel對應的編碼通道號,不重疊的正整數
int *frametype幀類型
1.3 TCP協議以及IEEE802.3以太網
控制傳輸協議(TCP)是一種可靠的、基于字節流的傳輸層通信協議。高可靠性是通過發送數據前先建立連接,結束數據傳輸時關閉連接,在數據傳輸過程中進行超時重發、流量控制和數據確認,對亂序數據進行重排校驗等機制來實現的。利用協議網絡通信,通信進程間相互作用的主要模式是服務器,客戶機模式通信的具體編程由套接字來實現,套接字是網絡程序設計接口,分為流式套接字和用戶數據報,流式套接字提供一種面向連接的、可靠的雙向數據傳輸服務,實現數據無差錯無重復的發送,流式套接字內設流量控制,被傳輸的數據看做是無記錄邊界的字節流在協議族中,使用TCP協議實現字節流的傳輸,當要發送大批量數據或者對數據傳輸有較高的要求時,使用流套接字。
在本設計中,如圖5所示,首先創建Socket,綁定IP地址和端口值,協議設置為IPv4同時設定掩碼值,設定最大字節數目,然后創建連接請求,若連接成功則從緩存區讀取若干字節發送出去,否則的話將阻塞在該進程中。此外為了保證視頻的流暢性,在網絡情況不好的情況下進行丟幀處理,同時在緩存區設置標志位,當緩存區的數據全部被套接字處理之后,該標志位設置為有效,從而清理緩存區,從而加載新的視頻數據做進一步處理。

該處理器外設的以太網結構如圖6所示。在DSP處理器和EMAC控制器之間用設備總線相連,EMAC控制器可以使用DSP內存,并且控制中斷和復位,及內存使用的優先級。另外EMAC單元還可以提供網絡和處理器內核的接口,支持1 0、100Mpbs數據傳輸。MDIO可以查詢和控制以太網PHY,它可以配置以太網的參數,從而達到糾錯的目的,同時又可以獲取數據傳輸結果。
2 客戶端的實現
客戶端無論是Windows或者Linux系統都具有Socket API,可以實現TCP傳輸協議,首先創建Socket并連接服務器端,并讀取來buffer的數據,在接收到數據之后,需要通過解碼將視頻顯示出來,通過加載動態鏈接庫,調用視頻播放器的API接口函數即可。Windows程序加載DLL的流程如圖7所示,客戶端工作流程如圖8所示。


評論