白 杰, 孟令軍, 張慧慧
(中北大學 電子測試技術重點實驗室,儀器科學與動態測試教育部重點實驗室,太原 030051)
基于DSP的視頻處理及傳輸系統設計
白 杰, 孟令軍, 張慧慧
(中北大學 電子測試技術重點實驗室,儀器科學與動態測試教育部重點實驗室,太原 030051)

以數字信號處理(DSP)為硬件平臺,對嵌入式視頻軟件系統的設計與實現進行了研究。提出了采用DSP核+DSP/BIOS方案進行系統設計。在嵌入式實時操作系統DSP/BIOS的基礎上,通過達芬奇技術分別對系統中的視頻采集、H.264編/解碼器、網絡傳輸、顯示等各個軟件模塊進行設計。解決了低碼率高清晰度實時視頻處理及傳輸的問題。經過系統測試,實現功能需求。系統具有高性能低成本的特點,廣泛適用于各類監控、實時視頻傳輸場合。
數字信號處理; 視頻處理; 傳輸系統
在PAL制式、CIF分辨率格式(352×288)、幀率25 f/s、RGB24的彩色圖像的前提下,1 h內的視頻數據量可大致估計為25.49 GB。雖然當前的存儲設備的容量已經更新發展到TB的數量級,然而持續存儲的視頻數據將會是一個非常大的數據量。一般情況下,視頻監控通常僅僅保存最近2~3個月的記錄。估算可知,CIF的數據傳輸速率已經達到58 Mbit/s。盡管千兆光纖網已經非常普及,但是平常使用的2 MB帶寬的網絡已經無法滿足現階段進行實時傳輸的需求。而目前CIF正逐步退出歷史的舞臺,當前視頻的主流格式為D1(720×576,標清)、D3(1920×1080,高清)。通過簡單計算可知,D1分辨率及以上的視頻圖像在存儲和傳輸中,進行編碼壓縮是勢在必行。
如何進行高效的編碼與傳輸[1],以及海量視頻數據的存儲,現已成為視頻實時處理領域需要亟待解決的問題。
1.1 系統整體架構
系統使用高分辨率的CCD攝像頭,將采集到的視頻圖像經過預處理,并通過特定的視頻編碼算法[2-3]進行壓縮處理為低碼率的數據流[4],然后由以太網進行實時傳輸,只需將客戶端和服務器端連接到同一個交換機或路由器,并將服務器和客戶端設置為同一網段,此時客戶端可以觀看服務器端采集到的視頻數據,系統最大的特點就是允許多個客戶端同時登錄觀看服務器端采集的視頻數據。視頻處理及傳輸系統框圖如圖1所示。

圖1 視頻處理及傳輸系統
1.2 硬件平臺及軟件系統架構
采用TI公司的DSP(TMS320DM6437[5],該處理器工作主頻為600 MHz)。具有VelociTI.3(第3代超長指令集結構),內核為C64x+TM系列,指令數據的最高計算能力達5 600 MI/s;同時支持多種、多個數據位類型的并行乘加運算操作,所以,在視頻處理時可以實時的對多路視頻格式(CIF、D1)進行編、解碼[6]。
基于DSP核+DSP/BIOS下的軟件系統架構如圖2所示。

圖2 基于DSP核+DSP/BIOS下的軟件系統架構
2.1 視頻采集與顯示模塊
視頻采集與顯示模塊如圖3所示。視頻采集模塊主要包括攝像頭(CCD)、TVP5151、及VPFE三部分。在CCDC啟動前要先完成對TVP5151的配置;CCD攝像頭將采集的視頻數據傳輸給TVP5151,經TVP5151解碼為YCbCr422類型的視頻數據,同時它的輸出滿足ITU-RBT.656協議格式[7]。經上述一系列轉換之后再傳輸到視頻處理前端VPFE進行預處理,最終將數據幀緩存于DDR2中。

圖3 采集與顯示模塊
視頻顯示模塊:主要包括VPBE及顯示設備,而VPBE由OSD(On-Screendisplay)與VENC(Vidio Encode)組成。其中,OSD負責從DDR2中獲取已經過處理的視頻數據,VENC接收來自于OSD的數據,并選擇不同的視頻格式輸出,然后通過液晶屏或LCD顯示器進行顯示。
2.2 視頻處理模塊
Codec Engine(簡稱CE框架)是一組用來配置和運行XDM算法的API接口。該框架提供了一系列VISA接口,與符合XDM標準的算法進行交互。
(1) 模塊的使用。命令xdc.useModule允許一個應用程序使用一個特定的模塊,本文需要使用的模塊如下所示:
Var osalGlobal = xdc.useModule
(′ti.sdo.ce.osal.Global′),操作系統抽象層;
Var H264ENC = xdc.useModule
(′ti.sdo.codecs.h264enc.ce.H264ENC′),H.264編碼;
Var H264DEC = xdc.useModule
(′ti.sdo.codecs.h264dec.ce.H264DEC′),H.264解碼;
Var Engine = xdc.useModule (′ti.sdo.ce.Engine′),Codec Engine模塊。
(2) 模塊參數設定。
osalGlobal.runtimeEnv = osalGlobal.DSPBIOS;
osalGlobal.defaultMemSegId =“DDR2”;
Var ver. = Engine. Create ("encdec", [{Name: "h264enc", mod: H264ENC, groupId: 0, local: true}, {Name: "h264dec", mod: H264DEC, groupId: 0, local: true},]);
在該CE框架下,DM6437提供了一組VISA接口,使用VISA接口調用H.264編、解碼庫。其CE引擎包括核心引擎APIs及VISA APIs兩部分,其中,核心引擎部分由以下模塊構成:①初始化(CERuntime_),位于ti.sdo.ce包的CERuntime.h中;②Codec引擎運行態(Engine_),位于ti.sdo.ce包的Engine.h中;③針對Memory的OS抽象層(Memory_),位于ti.sdo.ce.osal包的Memory.h中。
本文使用的核心接口函數:①Engine_open()。打開CE引擎,返回創建的引擎句柄;②Engine_close()。關閉打開的CE引擎。VISA類為編碼、解碼器提供了下列的APIs,此處的xxx代表VISA模塊前綴:①xxx_create():創建此類算法模型的例程;②xxx_process():使用此類算法例程中的“數據處理”方法;③xxx_control():執行此類算法例程中的“控制”方法;④xxx_delete():刪除此類算法特定的例程。使用CE框架調用VISA提供的函數接口實現H.264算法下的編、解碼如下。
H.264編碼部分:
(1) Engine_Handle *ce= Engine_open(h264encdec, NULL, NULL)。創建一個編解碼引擎對象,*ce代表新創建的編解碼引擎句柄。
(2) VIDENC_Handle *enc = VIDENC_create(*ce, encoderName, &vencParams)。encoderName代表編碼器的名稱h264enc,vencParams代表編碼器的靜態配置參數結構體,用作初始化及配置編碼器。該函數功能是在CE引擎的基礎上創建編碼器算法實例,初始化并分配H.264編碼器,程序運行的實際效果,隨該函數參數的不同而變化。
(3) VIDENC_Status encStatus=VIDENC_control(*enc,XDM_SETPARAMS,&encDynParams,&encStatus)。文中使用的是720×480的視頻圖像格式,其中encDynParams代表VIDENC_DynamicParams結構體,encStatus代表VIDENC_Status結構體。該函數的作用為配置圖像的寬和高、比特率、碼率、幀率、輸入視頻格式等,而且該函數還可以改變創建編碼器的效果。
(4) Int32 retVal= VIDENC_process(enc,&inBufDesc, &outBufDesc, &encInArgs, &encOutArgs)。其中inBufDesc、outBufDesc代表XDM_BufDesc結構體,encInArgs代表VIDENC_InArgs結構體,encOutArgs代表VIDENC_OutArgs結構體。該函數為視頻數據處理的核心部分,經編碼壓縮處理后的數據存放于outBufDesc中,同時outBufDesc中的數據是進行下一步視頻解碼的關鍵。
H.264解碼部分:
(1) VIDDEC_Handle *dec = VIDDEC_create(*ce, decoderName, &vdecParams)。decoderName代表H.264解碼器[8]的名稱h264dec,vdecParams代表H.264視頻解碼器的靜態參數結構體VIDDEC_Params,用于初始化及配置解碼器的參數。該函數功能是在CE引擎的基礎上創建解碼器算法實例,初始化并分配H.264解碼器,程序運行的實際效果,隨該函數參數的不同而變化。
(2) VIDDEC_Status decStatus=VIDDEC_control(*dec,XDM_SETPARAMS,&decDynParams,&decStatus)。其中,decDynParams代表VIDDEC_DynamicParams結構體,decStatus代表VIDDEC_Status結構體。該函數的作用為配置圖像的寬和高、幀率、碼率、輸入數據的大小端格式等。
(3) Int32 retVal= VIDDEC_process(dec, &inBufDesc, &outBufDesc, &decInArgs, &decOutArgs)。其中,inBufDesc、outBufDesc代表XDM_BufDesc結構體,decInArgs代表VIDDEC_InArgs結構體,decOutArgs代表VIDDEC_OutArgs結構體。該函數為視頻數據處理的核心部分,經解碼處理后的數據存放于outBufDesc中,同時outBufDesc中的數據可以進行視頻顯示。
2.3 網絡傳輸模塊
2.3.1 服務器端設計
服務器端的功能主要有:攝像頭采集的視頻數據傳輸給H.264編碼器進行編碼,壓縮編碼生成H.264碼流之后,通過網絡傳輸線程將H.264碼流發送給遠端的H.264解碼客戶端。
服務器端程序(見圖4):①通過調用socket()函數創建套接字,該函數中需要使用no-copy型的數據流式套接字類型(SOCK_STREAMNC)及IPPROTO_TCP(TCP協議[9]);②通過函數bind()實現IP和端口Port的綁定;③使用listen()函數對①中的套接字監聽;④在監聽套接字的基礎上,等待客戶端的連接請求,通過函數accept()實現;⑤假如監聽到有客戶端登入服務器,便向客戶端發送H.264碼流信息(大小和數據),通過函數send()實現;⑥發送完成后向編碼線程發送消息,此時網絡程序再度進入掛起狀態,等待下一次H.264碼流的到來。⑦若并未監聽到任何的連接請求或是新接入的套接字無效,則直接將其關閉,并終止網絡線程。

圖4 服務器端任務線程執行圖示
2.3.2 客戶端設計
客戶端的功能主要有:通過網絡接收線程接收來自于網絡的H.264碼流,然后由H.264解碼線程[10]進行解碼處理,解碼完成后進行LCD設備的顯示或在上位機軟件上顯示。
客戶端程序(見圖5):①首先進行網絡套接字的創建,通過調用socket()函數實現,該函數中需要使用no-copy型的數據流式套接字類型(SOCK_STREAMNC)及IPPROTO_TCP(TCP協議);②使用connect()函數向遠端服務器發送連接請求(請求的IP:192.168.1.120,Port:8000);③假如已經登錄到服務器中,此時便可以接受遠端服務器發送過來的H.264碼流信息,通過調用函數recv()[11]實現數據的接受;④網絡線程接收到數據之后便處于掛起狀態并向解碼線程發送消息,在解碼線程解碼完網路傳輸過來的H.264碼流之后,就可以在LCD上進行顯示,此時,解碼線程會向網絡線程發送解碼、顯示完成的消息;⑤假如網絡線程受到解碼線程發送來的消息則會繼續進行網絡數據的接收,而沒有收到解碼線程發送的消息的話,則會一直處于掛起狀態,直至接收到消息為止。

圖5 客戶端任務線程執行程序
2.4 多線程調度模塊設計
DSP需要完成的功能包括:采集、編碼、傳輸、接收、解碼、顯示以及NDK的初始化[7]等功能。各模塊所要完成的任務是相對獨立的,所以每個模塊,對應地建立一個線程負責功能的運作。本系統對于線程之間的同步機制使用的是郵箱傳遞消息的方法。共需要設置以下8個郵箱(通過在IPNC_Server_H264.tcf文件和IPNC_Client_H264.tcf中靜態創建郵箱對象)。
服務器端:
bios.MBX.create ("VIDEO2ENC"); bios.MBX.create ("ENC2VIDEO");
bios.MBX.create ("ENC2NET"); bios.MBX.create ("NET2ENC");
客戶端:
bios.MBX.create ("VIDEO2DEC"); bios.MBX.create ("DEC2VIDEO");
bios.MBX.create ("DEC2NET"); bios.MBX.create ("NET2DEC");
Msg結構體(全局數據[12])中包含數據幀緩沖、數據量大小兩部分。對于以上郵箱中消息的傳遞及接收,使用MBX_post()和MBX_pend()可以實現相關功能。例如:服務器端MBX_post(&VIDEO2ENC,&msg,SYS_FOREVER)代表視頻采集完成后,將采集到的視頻數據通過郵箱[13],將消息傳遞給H.264編碼器。該系統完成了一系列的初始化之后中,H.264編碼任務線是處于掛起狀態的,而該功能是通過MBX_pend(&VIDEO2ENC,&msg,SYS_FOREVER)這個函數實現的,當接收到來自于視頻采集任務發送過來的消息之后,便進行編碼操作;客戶端:網絡接收、視頻解碼、視頻顯示部分中涉及的4個郵箱及相關Msg消息的線程間數據同步與服務器端的視頻采集、視頻編碼、網絡發送是相同的。
在采集模塊程序中添加視頻文件寫入本地硬盤操作,將每次采集的視頻數據寫入*.yuv格式的文件中,然后使用Raw player軟件對文件進行查看。測試參數如表1所示,測試實例如圖6所示。

表1 512 Kb/s碼率下視頻數據編、解碼的測試參數

(a) CCD攝像頭采集的(Raw)圖像

(b) H.264解碼后的視頻數據512 Kbps碼率
以上為視頻處理及傳輸系統的綜合演示實例,連接點有:①服務器;②客戶端;③PC機。三者處于同一網段,并通過D-Link交換機進行連接,其中服務器端IP地址為:192.168.1.120,客戶端IP地址為:192.168.1.226,PC機端IP地址為:192.168.1.110。
通過實際測試,攝像頭采集數據后通過H.264編碼器進行處理,待處理完成后,將數據通過網絡發送給客戶端,其中客戶端文中使用上位機或開發板客戶端均可接受H.264碼流,接收到數據之后開始進行H.264解碼,解碼完成后便可以進行顯示。該系統在H.264 Baseline Profile編碼下30幀/s、512 Kb/s碼率下,DSP的負載在43%左右,視頻效果非常好。
本文在達芬奇技術的基礎上進行視頻處理及傳輸系統的軟件設計與實現,以DM6437為硬件設計平臺,嵌入式實時操作系統DSP/BIOS[14]為基礎,以及在網絡開發工具包NDK的協同配合下,設計出具備H.264編/解碼功能的視頻傳輸系統。該系統實現了低碼率、高清晰度的視頻處理與傳輸。可廣泛應用于實時性要求高,帶寬限制的視頻監控與傳輸等領域。
[1] 路錦正.MPEG-4/H.264視頻編解碼工程實踐[M].北京:電子工業出版社.2011.
[2] Koli S M,Purandare R G,Kshirsagar S P,etal.Improved compression performance of H.264/MPEG4-AVC for digital video using DVDP[J].Wireless Personal Communications: An Internaional Journal, 2014, 77(3):1659-1675.
[3] Kim IL-Koo, Lee Sunil, Piao Yinji,etal.Coding efficiency comparison of new video coding standards: HEVC vs VP9 vs AVS2 video[C]//2014 IEEE International Conference on Multimedia and Expo Workshops: 2014 IEEE International Conference on Multimedia and Expo Workshops (ICMEW 2014), July 14-18 2014, Chengdu, China.2014:1-6.
[4] Grois Dan, Marpe Detlev, Mulayoff Amit,etal.Performance comparison of H.265/MPEG-HEVC, VP9, and H.264/MPEG-AVC encoders[C]//2013 Picture Coding Symposium: 2013 Picture Coding Symposium (PCS 2013), December 8-11 2013, San Jose, California, USA, 2013:394-397.
[5] 孫雪松.基于DM6437的視頻壓縮系統設計與實現[D].西安:西安電子科技大學,2014.
[6] 張慧強.基于DM6437的H.264編碼器研究與實現[D].太原:太原理工大學,2011.
[7] 周恒國,黃 方.基于NDK的DSP網絡設計[J].微型機與應用,2013,32(2):54-56.
[8] 杜欣慧,蔡春花.基于NDK的DSP網絡通信的設計與實現[J].電子世界,2014(21):105-106.
[9] 賈 浩.基于TMS320DM6437平臺視頻系統的研究與設計[D].北京:清華大學,2010.
[10] 鄧 博.基于DM6437的網絡智能監控系統研究和設計[D].鄭州:鄭州大學,2013.
[11] 臧 博,吳裕斌,曹丹華,等.基于GIO/FVID的DSP視頻處理驅動程序[J].單片機與嵌入式系統應用,2006(8):27-29, 42.
[12] 王 聰.基于NDK的網絡開發研究[J].艦船電子對抗,2012,35(4):86-88.
[13] 鄭樹滿.基于DM6437的網絡視頻監控系統的設計與實現[D].成都:電子科技大學,2007.
[14] 吳 皓,朱 沛.基于TMS320DM642實現網絡通信功能的研究[J].火控雷達技術,2010,39(4):87-90.
堅持傳授知識、培養能力、提高素質協調發展,注重對學生探索精神、科學思維、實踐能力和創新能力的培養。
——摘自《教高[2005]8號文件》
Design of Video Processing and Transmission System Based on DSP
BAIJie,MENGLingjun,ZHANGHuihui
(Science and Technology on Electronic Test and Measurement Laboratory; Key Lab of Instrumentation Science & Dynamic Measurement, North University of China, Taiyuan 030051, China)
Using DSP as the hardware platform, software design and implementation of embedded video system were studied. The scheme of DSP core+DSP/BIOS program was proposed. Based on embedded real-time operating system DSP/BIOS, the DaVinci technology was used to design respectively video capture, H.264 encoding/decoding devices, network transmission, display and other software modules. The design solved the problem of video processing and real-time transmission with low bit rate and high-definition. After testing, all functions were realized. The system has high-performance and low-cost, can be widely applied in monitoring and real-time video transmission.
digital signal processing (DSP); video processing; transmission system
2016-07-20
國家自然科學基金資助項目(61274103)
白 杰(1990-),男,山西呂梁人,碩士生,主要從事測試計量技術與儀器方向的研究。
Tel.:18734920678;E-mail:18734920678@qq.com
孟令軍(1969-),男,山東青島人,博士,副教授,主要研究方向:動態測試,圖像處理。
TP 393.09
A
1006-7167(2017)03-0111-05