摘 要: 達(dá)芬奇技術(shù)是一種專門針對數(shù)字視頻應(yīng)用和信號處理的解決方案,,它把算法處理和應(yīng)用層相分離,大大簡化了程序編寫,。介紹了一種基于達(dá)芬奇技術(shù)的網(wǎng)絡(luò)攝像機(jī)設(shè)計方案,,詳細(xì)闡述了該系統(tǒng)的視頻采集,、H.264編碼實現(xiàn)、RTSP服務(wù)器調(diào)度和RTP發(fā)送,。
關(guān)鍵詞: 達(dá)芬奇技術(shù),;H.264;RTSP服務(wù)器,;RTP
隨著多媒體技術(shù)和網(wǎng)絡(luò)技術(shù)的發(fā)展,,網(wǎng)絡(luò)攝像機(jī)已經(jīng)廣泛運用于網(wǎng)絡(luò)監(jiān)控和視頻會議領(lǐng)域中。網(wǎng)絡(luò)攝像機(jī)的發(fā)展趨勢集視頻采集,、視頻壓縮,、視頻發(fā)送為一體,并且按照需求添加相應(yīng)圖像識別,、圖像疊加,、運動偵測、云臺控制和報警等功能,。因此要求處理芯片具有強(qiáng)大的控制能力和數(shù)據(jù)處理能力,。TI公司推出了達(dá)芬奇技術(shù),專門應(yīng)用于多媒體系統(tǒng),,它把圖像處理的編碼算法封裝成標(biāo)準(zhǔn)API,,應(yīng)用程序調(diào)用這些API函數(shù)即可實現(xiàn)圖像的編碼處理。
TMS320DM368芯片是基于達(dá)芬奇技術(shù)的音視頻數(shù)字媒體片上系統(tǒng)(DMSoC)[1],,它以ARM926EJ-STM為內(nèi)核,,擁有兩個視頻圖像協(xié)處理器(HDVICP和MJCP),廣泛運用于中低端音視頻處理系統(tǒng),。本系統(tǒng)采用DM368來構(gòu)建網(wǎng)絡(luò)攝像機(jī)視頻服務(wù)器,,通過訪問服務(wù)器可實時查看監(jiān)控視頻。
1 系統(tǒng)總體方案設(shè)計
TMS320DM368只有一個ARM內(nèi)核,,通過嵌入Linux系統(tǒng)來實現(xiàn)圖像的采集處理和網(wǎng)絡(luò)通信,。系統(tǒng)總體框圖如圖1所示,CMOS圖像采集模塊把采集的數(shù)字圖像發(fā)送給TMS320DM368主芯片,,然后調(diào)用算法API函數(shù)實現(xiàn)H.264編碼,。UDP接收負(fù)責(zé)接收參數(shù)控制命令,經(jīng)過命令解析把參數(shù)傳遞給對應(yīng)模塊,。RTSP負(fù)責(zé)等待客戶端訪問,,然后創(chuàng)建用于RTP數(shù)據(jù)包發(fā)送的套接字。
為了實現(xiàn)系統(tǒng)功能,,應(yīng)用程序主要分為以下幾個線程:CMOS視頻采集線程,、視頻編碼線程、RTSP任務(wù)調(diào)度線程、RTP視頻數(shù)據(jù)發(fā)送線程,、UDP命令接收線程和命令解析線程,。CMOS視頻采集線程負(fù)責(zé)按要求初始化CMOS芯片,采集視頻圖像,;視頻編碼線程調(diào)用算法API接口,,實現(xiàn)數(shù)據(jù)圖像的編碼壓縮;RTSP任務(wù)調(diào)度線程創(chuàng)建TCP套接字,,等待客戶端的訪問連接,,然后把所訪問客戶端的地址信息存放在調(diào)度任務(wù)中;RTP視頻數(shù)據(jù)發(fā)送線程把視頻數(shù)據(jù)通過RTP協(xié)議發(fā)送給指定客戶端,;UDP命令接收線程負(fù)責(zé)接收客戶端發(fā)送的控制命令,,然后發(fā)送給命令解析線程;命令解析線程把接收到的命令解析處理,,把參數(shù)傳遞給對應(yīng)模塊,。
2 視頻采集和編碼
2.1 視頻采集模塊
視頻采集選用MT9P031型CMOS數(shù)字圖像傳感器芯片,感光面為1/2.5英寸,,最大像素為2592×1944,。該芯片利用像素跳躍和像素混合技術(shù),在不改變視場的情況下減少輸出圖像分辨率,。它還提供I2C接口,,主控器可以通過I2C接口設(shè)置CMOS輸出圖像的屬性,并且還集成了ADC轉(zhuǎn)換器,,直接輸出12 bit數(shù)字圖像數(shù)據(jù),,在時鐘和行場同步信號作用下輸出每一幀圖像,如圖2所示,。每一個場同步信號FV有效(高)表示一幀圖像,,每一個場同步信號LV有效(高)表示該幀的一行,在行場同步都有效時每一個像素時鐘脈沖的Dout輸出就是對應(yīng)像素的RGB值,。若輸出一幀720 p的圖像,,像素大小為1280×720,,每一個FV高電平區(qū)間就有720個LV高電平,,在每一個LV高電平區(qū)間又有1 280個PCLK時鐘脈沖。
TMS320DM368有一個ISIF接口,,專門用于接收數(shù)字的視頻數(shù)據(jù),,芯片內(nèi)部集成了ISIF圖像接收模塊,每接收到一幀完整的數(shù)據(jù),,芯片就會產(chǎn)生一個ISIF_INT中斷信號,,在中斷響應(yīng)程序里面可以把數(shù)據(jù)存放到指定地址。MT9P031和TMS320DM368的連接如圖3所示。MT9P031芯片的時鐘源由DM368GIO37引腳輸出提供,,頻率為24 MHz,,GIO91和GIO93引腳分別接復(fù)位和使能端。
2.2 H.264編碼模塊
對所采集的視頻數(shù)據(jù)進(jìn)行編碼是通過調(diào)用Codec Engine算法包來實現(xiàn)的[2],。Codecs Engine是一組用來調(diào)用xDAIS算法的API,,不管是在ARM端還是在DSP端,不管操作系統(tǒng)的差異,,調(diào)用的API函數(shù)都是一致的,。用戶只需要配置相應(yīng)的*.cfg文件即可指定需要調(diào)用的算法,然后在應(yīng)用程序中即可調(diào)用API函數(shù)進(jìn)行算法編解碼,。
H.264是一種高性能的視頻編解碼標(biāo)準(zhǔn),,繼承了H.263和MPEG1/2/4視頻編碼器的優(yōu)點。H.264標(biāo)準(zhǔn)中定義了兩個層次:視頻編碼層(VCL)和網(wǎng)絡(luò)抽象層(NAL),,VCL負(fù)責(zé)高效的數(shù)字視頻數(shù)據(jù)壓縮,,NAL提供適當(dāng)?shù)慕涌趯?shù)據(jù)進(jìn)行打包和傳送。
為了得到H.264格式的視頻流,,本系統(tǒng)采用的H.264算法為TI發(fā)布的Codec Engine,,配置alg_server.cfg文件來實現(xiàn)對已經(jīng)編譯算法的接口聲明,文件配置如下:
var H264ENC=xdc.useModule
('ti.sdo.codecs.h264enc.ce.H264ENC'); //指定調(diào)用的算法
var myEngine=Engine.create("alg_server", [{name: "h264enc",
mod: H264ENC, local: true, groupId: 1}]);
其中,,name為調(diào)用算法的名字,;mod用來標(biāo)識實際的算法實現(xiàn)模塊;loacl指定算法運行在ARM端(true)或者DSP端(false),。
在應(yīng)用程序中調(diào)用的接口函數(shù)有:VIDENC1_create,、VIDENC1_control、VIDENC1_process和VIDENC1_delete,。
3 視頻服務(wù)器的建立
3.1 搭建RTSP服務(wù)器
RTSP(Real Time Streaming Protocol)實時流協(xié)議是為了建立并控制一個或幾個時間同步的連續(xù)流媒體[3],,它本身不發(fā)送連續(xù)媒體流,只充當(dāng)多媒體服務(wù)器的網(wǎng)絡(luò)遠(yuǎn)程控制,。
RTSP服務(wù)器需要預(yù)定義的方法有OPTION,、DESCRIBE、SETUP,、PLAY和TEARDOWN,,在OPTION響應(yīng)中需要實現(xiàn)服務(wù)器基本信息描述,DESCRIBE響應(yīng)中需要向客戶端發(fā)送視頻的SDP信息,,SETUP響應(yīng)需要根據(jù)客戶端端口信息建立RTP(實時傳輸協(xié)議)視頻發(fā)送套接字,,PLAY響應(yīng)實現(xiàn)由RTP向客戶端發(fā)送視頻數(shù)據(jù),TEAREOWN響應(yīng)關(guān)閉對應(yīng)RTP套接字,,并且釋放對應(yīng)的系統(tǒng)資源,,流程如圖4所示。
3.2 RTP發(fā)送H.264視頻流
RTP(Real-Time Transport Protocol)實時傳輸協(xié)議是在多點傳送或單點傳送的網(wǎng)絡(luò)服務(wù)上提供端對端的網(wǎng)絡(luò)傳輸功能,適用于實時數(shù)據(jù)傳輸?shù)膱龊蟍4],。RTP固定報頭格式如圖5所示,。
定義報頭的數(shù)據(jù)格式如下:
typedef struct
{
unsigned char u4CSrcLen:4;//CC
unsigned char u1Externsion:1;//X
unsigned char u1Padding:1;//P
unsigned char u2Version:2;//V
unsigned char u7Payload:7;//PT
unsigned char u1Marker:1;//M
unsigned short u16SeqNum;//SN
unsigned long u32TimeStamp;//時間戳
unsigned long u32SSrc;//SSRC
}RtpHdr;
經(jīng)編碼模塊輸出的H.264視頻流由一系列NAL單元(NALU)構(gòu)成,每個NALU由起始碼前綴(0x00000001)分隔開來[5],,所以RTP發(fā)送線程可以在輸出編碼流中提取出每個NALU,,經(jīng)過RTP協(xié)議轉(zhuǎn)換發(fā)送給客戶端。從編碼流中提取NALU單元流程如圖6所示,。
經(jīng)過驗證,,對于720 p的H.264編碼輸出NALU負(fù)載長度不一,最大達(dá)到幾十字節(jié),,從網(wǎng)絡(luò)性能方面考慮,,不宜發(fā)送過大的RTP數(shù)據(jù)包,為此采用RFC3984標(biāo)準(zhǔn)的FU-A方法對NALU進(jìn)行分割,,設(shè)置每個RTP包最大長度為1 400 B,。于是對于不同負(fù)載長度的NALU,RTP發(fā)送的數(shù)據(jù)包格式如表1所示,。
定義結(jié)構(gòu)體:
typedef struct
{
unsigned char u5Type:5;
unsigned char u2Nri:2;
unsigned char u1F:1;
}NaluHdr, FuIndic;
typedef struct
{
unsigned char u5Type:5;
unsigned char u1R:1;
unsigned char u1E:1;
unsigned char u1S:1;
}FuHdr;
其中,,參數(shù)NaluHdr和FuIndic由NALU第一個字節(jié)決定,參數(shù)FuHdr用于設(shè)置分片發(fā)送的起始和結(jié)束RTP包,。
本文研究了基于達(dá)芬奇技術(shù)的網(wǎng)絡(luò)攝像機(jī)系統(tǒng),,著重介紹了視頻采集、H.264算法的調(diào)用,、RTSP視頻服務(wù)器以及利用RTP數(shù)據(jù)報發(fā)送,。系統(tǒng)的應(yīng)用程序采用多線程技術(shù),提高了資源利用率和綜合性能,。搭建的服務(wù)器專門用于H.264格式的視頻流發(fā)送,,執(zhí)行效率高,便于維護(hù),,對類似系統(tǒng)有很大的參考價值,。基于TMS320DM368的網(wǎng)絡(luò)攝像機(jī)投入成本低,,開發(fā)周期短,,可以廣泛運用于各種監(jiān)控系統(tǒng)。
參考文獻(xiàn)
[1] Texas Instruments Incorporated.TMS320DM368 Digital Media System-on-Chip(DMSoC)[EB/OL].[2011-06-30]. http://www.ti.com/lit/gpn/tms320dm368.
[2] Texas Instruments Incorporated.Codec Engine Application Developer User s Guide[A].http://www.ti.com/lit/ug/sprue67d/sprue67d.pdf.
[3] SCHULZRINNE H,,RAO A,,LANPHIER R.Real time streaming protocol(RTSP)[S].RFC 2326,,1998.
[4] SCHULZRINNE H,,CASNER S,F(xiàn)REDERICK R.RTP:A
transport protocolfor real-time applications[S].RFC 3550,2003.
[5] 張多英.嵌入式視頻監(jiān)控傳輸系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機(jī)工程與設(shè)計,,2010,,31(4):724-728.