[摘要]根據(jù)實(shí)際需求,針對(duì)網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)數(shù)據(jù)量大、實(shí)時(shí)性要求高等特點(diǎn),文章提出基于MPEG一4格式的遠(yuǎn)程視頻監(jiān)控系統(tǒng)的體系結(jié)構(gòu)和邏輯模型,并詳細(xì)闡述利用Http協(xié)議實(shí)現(xiàn)流媒體播放的控制方法和利用RTP協(xié)議實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)牟呗?,并在VC6.0環(huán)境下運(yùn)用DirectShow框架實(shí)現(xiàn)一個(gè)基于Pc的視頻監(jiān)控系統(tǒng)。該解決方案是基于軟件編碼方式,具有良好的可重用性和可擴(kuò)展性。
[關(guān)鍵詞]RTP;MPEG4標(biāo)準(zhǔn);DirectShow;視頻監(jiān)控系統(tǒng)
[作者介紹]李思,西安電子科技大學(xué)電子工程學(xué)院研究生,研究方向:系統(tǒng)仿真,陜西西安,710071;李麗,西安電子科技大學(xué)電子工程學(xué)院研究生,研究方向:系統(tǒng)仿真,陜西西安,710071
[中圖分類號(hào)]TP393 [文獻(xiàn)標(biāo)識(shí)碼]A [文章編號(hào)]1007—7723(2008)12—0016—0003
一、引言
隨著因特網(wǎng)和多媒體技術(shù)的迅速發(fā)展,網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)廣泛應(yīng)用于銀行、小區(qū)、賓館、油田等安防系統(tǒng)。實(shí)時(shí)監(jiān)控系統(tǒng)要求有較好的實(shí)時(shí)性,然而目前使用的監(jiān)控系統(tǒng)大多采用TCP/IP協(xié)議傳輸實(shí)時(shí)視頻數(shù)據(jù),實(shí)時(shí)效果較差。傳統(tǒng)的TCP/IP協(xié)議由于采用面向連接的重傳機(jī)制,已不能滿足多媒體視頻數(shù)據(jù)的實(shí)時(shí)傳輸。而其擁塞控制機(jī)制,容易造成網(wǎng)絡(luò)擁塞,不利于大數(shù)據(jù)量的多媒體視頻數(shù)據(jù)傳輸。而UDP協(xié)議雖然對(duì)傳輸?shù)臄?shù)據(jù)盡量交付采用的方式,但它沒有提供擁塞控制。
實(shí)時(shí)傳輸協(xié)議RTP(ReaI-time Transport Proto-col)是專門為多媒體數(shù)據(jù)的實(shí)時(shí)傳輸而設(shè)計(jì)的傳輸協(xié)議。其配套的傳輸控制協(xié)議RTCP(Real-timeControl Protoc01)為RTP傳輸提供控制功能,在實(shí)時(shí)視頻監(jiān)控系統(tǒng)中得到廣泛應(yīng)用。網(wǎng)絡(luò)視頻傳輸涉及到傳輸協(xié)議、視頻壓縮、流媒體傳輸?shù)燃夹g(shù)。流媒體在播放前不用下載整個(gè)文件,數(shù)據(jù)流隨時(shí)傳送、隨時(shí)播放,流式傳輸是流媒體實(shí)現(xiàn)的關(guān)鍵技術(shù)。文章描述基于RTP協(xié)議和DirectShow技術(shù)實(shí)現(xiàn)的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng),實(shí)現(xiàn)了對(duì)MPEG4壓縮格式視頻流的傳輸與播放控制。
二、基本原理
(一)MPEG4標(biāo)準(zhǔn)
MPEG4是基于對(duì)象的多媒體數(shù)據(jù)壓縮標(biāo)準(zhǔn),以高壓縮率、高質(zhì)量、低傳輸率成為網(wǎng)絡(luò)多媒體傳輸?shù)闹饕袷胶蜆?biāo)準(zhǔn)。MPEG4在網(wǎng)絡(luò)傳輸中可以設(shè)定的流速率、清晰度也可在一定的范圍內(nèi)作相應(yīng)的變化,而且當(dāng)在傳輸有誤碼或丟包現(xiàn)象時(shí),MPEC4能迅速恢復(fù)。這些特性使得它更適于遠(yuǎn)程網(wǎng)絡(luò)視頻監(jiān)控應(yīng)用。本文描述的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)使用了MPEG4標(biāo)準(zhǔn)格式視頻數(shù)據(jù)。
(二)RTP/RCTP協(xié)議
RTP協(xié)議負(fù)責(zé)對(duì)流媒體數(shù)據(jù)進(jìn)行封包并實(shí)現(xiàn)流媒體的實(shí)時(shí)傳輸,即它按照RTP數(shù)據(jù)包格式來封裝流媒體數(shù)據(jù),并利用與它綁定的協(xié)議進(jìn)行數(shù)據(jù)包的傳輸。RTP本身只保證實(shí)時(shí)數(shù)據(jù)的傳輸,并不能為按順序傳送數(shù)據(jù)包提供可靠的傳送機(jī)制,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務(wù)。
RTP根據(jù)應(yīng)用程序的要求將流媒體數(shù)據(jù)包封裝成RTP數(shù)據(jù)包并進(jìn)行發(fā)送,它靠上層的調(diào)用以及依賴網(wǎng)絡(luò)層發(fā)送來實(shí)現(xiàn)。工作時(shí),RTP協(xié)議從上層接收流媒體信息碼流,裝配成RTP數(shù)據(jù)包發(fā)送給下層,下層協(xié)議提供RTP和RTCP的分流。如在UDP中,RTP使用一個(gè)偶數(shù)號(hào)端口,則相應(yīng)地RTCP使用其后的奇數(shù)號(hào)端口。RTP數(shù)據(jù)包沒有長(zhǎng)度限制,它的最大包長(zhǎng)只受下層協(xié)議的限制。
RTP協(xié)議具有以下特點(diǎn):
1 輕型的傳輸協(xié)議:RTP提供端到端的實(shí)時(shí)媒體傳輸功能,但并不提供機(jī)制來確保實(shí)時(shí)傳輸和服務(wù)質(zhì)量保證,協(xié)議本身相對(duì)輕型、快捷。由于RTP沒有像TCP那樣完整的體系框架,只是一個(gè)輕型的傳輸協(xié)議,主要與具體應(yīng)用結(jié)合在一起來實(shí)現(xiàn)。
2 靈活性:體現(xiàn)在把協(xié)議機(jī)制與控制策略的具體算法分開,協(xié)議本身只提供完成實(shí)時(shí)傳輸?shù)臋C(jī)制,對(duì)控制策略的算法實(shí)現(xiàn)不作具體規(guī)定,開發(fā)者可以根據(jù)不同的應(yīng)用環(huán)境,選擇實(shí)現(xiàn)效率較高的算法與合適的控制策略。
3 協(xié)議獨(dú)立性:RTP協(xié)議與下層協(xié)議無關(guān),可以在UDP/IP、IPM、ATM的ALL層上實(shí)現(xiàn)。
4 擴(kuò)展性:既支持傳統(tǒng)的單播Unicastl應(yīng)用又支持新出現(xiàn)的組播Multicastl應(yīng)用。
5 安全性:RTP協(xié)議在設(shè)計(jì)上考慮到安全功能。支持對(duì)數(shù)據(jù)加密和身份鑒別認(rèn)證功能。
RTCP原理是向會(huì)話中的所有成員周期性地發(fā)送控制包來實(shí)現(xiàn)的,應(yīng)用程序通過接收這些控制數(shù)據(jù)包,從中獲取會(huì)話參與者的相關(guān)資料,以及網(wǎng)絡(luò)狀況、分組丟失概率等反饋信息,從而能夠?qū)Ψ?wù)質(zhì)量進(jìn)行控制或者對(duì)網(wǎng)絡(luò)狀況進(jìn)行診斷。
RTCP報(bào)文不封裝音視頻數(shù)據(jù),而是封裝發(fā)送端或者接收端的統(tǒng)計(jì)報(bào)表信息。在RTP會(huì)話期間,每個(gè)參與者周期性地向其他參與者發(fā)送RTCP控制信息包,因?yàn)榫W(wǎng)絡(luò)的情況很不穩(wěn)定,如果網(wǎng)絡(luò)情況好可以減少語音的延遲時(shí)間,也可以增大視頻的發(fā)送幀率或質(zhì)量。若網(wǎng)絡(luò)狀況不好,可以增大語音延遲時(shí)間以保證語音連續(xù),也可減少視頻的發(fā)送幀率或質(zhì)量,以減少網(wǎng)絡(luò)的阻塞。RTCP包的發(fā)送率根據(jù)與會(huì)者的數(shù)量來調(diào)整。
RTCP具有以下四個(gè)功能:
1 提供數(shù)據(jù)傳輸質(zhì)量的反饋信息,主要通過發(fā)送方報(bào)告(SR,Sender Report)和接收方報(bào)告(RR,Receiver Report)來實(shí)現(xiàn)。這些反饋信息與流量控制和擁塞控制密切相關(guān),也可以直接用于故障診斷。
2 對(duì)每一個(gè)RTP信息源,RTCP帶有一致的傳輸層標(biāo)識(shí),稱為通用名CNAME。當(dāng)同步源標(biāo)志SSRC在由于沖突而發(fā)生改變時(shí)接收方需要CNAME標(biāo)識(shí)來區(qū)分多個(gè)媒體流中給定應(yīng)用的應(yīng)用成員。
3 當(dāng)前參加成員的動(dòng)態(tài)估計(jì),可以用來計(jì)算數(shù)據(jù)發(fā)送速率,并且在成員動(dòng)態(tài)變化時(shí)對(duì)速率進(jìn)行動(dòng)態(tài)地調(diào)整以合理利用網(wǎng)絡(luò)資源。
4 傳送最少量的控制信息以保證系統(tǒng)可以容易地?cái)U(kuò)展成為大規(guī)模的松散耦合系統(tǒng)。
(三)DirectShow技術(shù)
DirectShow是微軟公司在ActiveMovie和Video for Windows的基礎(chǔ)上推出的新一代基于COM的流媒體處理的開發(fā)包,與DirectX開發(fā)包一起發(fā)布。目前,DirectX最新版本為9.0。DirectShow為多媒體流的捕捉和回放提供了強(qiáng)有力的支持。運(yùn)用DirectShow,可以很方便地從支持WDM驅(qū)動(dòng)模型的采集卡上捕獲數(shù)據(jù),并且進(jìn)行相應(yīng)的后期處理乃至存儲(chǔ)到文件中。這樣使在多媒體數(shù)據(jù)庫管理系統(tǒng)(MDBMSj中多媒體數(shù)據(jù)的存取變得更加方便。
三、網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)設(shè)計(jì)
(一)網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)整體結(jié)構(gòu)
所謂實(shí)時(shí)遠(yuǎn)程視頻監(jiān)控系統(tǒng),相對(duì)于傳統(tǒng)的視頻監(jiān)控系統(tǒng)來說,就是系統(tǒng)的傳輸部分使用IP網(wǎng)絡(luò)進(jìn)行傳輸。后端的處理部分可以是與采集Pc相連的任何一臺(tái)監(jiān)控Pc或Stream Server(含視頻錄制功能)。本系統(tǒng)的視頻采集設(shè)備為網(wǎng)絡(luò)攝像頭,它具有獨(dú)立的IP地址,并通過網(wǎng)絡(luò)連接到視頻服務(wù)器上。圖像采集設(shè)備可設(shè)置參數(shù)改變圖像大小、幀率、波特率。采集的圖像數(shù)據(jù)存入數(shù)據(jù)緩沖區(qū),發(fā)送模塊按協(xié)議分包并發(fā)送。
系統(tǒng)的客戶端是一個(gè)Windows應(yīng)用程序,RTP接收模塊接收RTP包并按一定策略組包,組包后的視頻數(shù)據(jù)經(jīng)過DirectShow處理在用戶界面顯示,用戶可以設(shè)置圖像大小、幀率與波特率并通過Http Client發(fā)送到視頻采集設(shè)備,同時(shí)控制播放的開始和停止。其系統(tǒng)結(jié)構(gòu)如圖1所示。
(二)網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)概要處理流程
1 圖像接收與控制端通過Http服務(wù)與圖像采集端建立連接。
2 圖像接收與控制端可通過Http服務(wù)設(shè)置和獲取UDP Port口及網(wǎng)絡(luò)攝像機(jī)默認(rèn)參數(shù)等信息。
3 圖像接收與控制端通過Http Client發(fā)送開始命令。
4 圖像接收與控制端啟動(dòng)RTP接收模塊監(jiān)視UDPPort。
5 圖像采集端接收到了開始命令就控制圖像采集設(shè)備工作并啟動(dòng)RTP發(fā)送。
6 當(dāng)圖像接收與控制端通過Http Client發(fā)送停止命令時(shí),圖像采集端停止工作。
(三)RTP傳輸控制
RTP發(fā)送方將MPEG4 Frame按照MTU(最大傳輸單元)進(jìn)行分割傳輸,保證每個(gè)數(shù)據(jù)包中不存在2個(gè)或多個(gè)Frame信息,并按照RTP協(xié)議給每個(gè)數(shù)據(jù)包添加上RTP Header。
MPEG-4視覺中RTP頭字段的使用如下:
負(fù)載類型(PT):為新的包格式分配,RTP負(fù)載類型超出了本文的范疇,不在此贅述。特定類型應(yīng)用程序的RTP框架應(yīng)該負(fù)責(zé)負(fù)載類型的分配,如若不能則應(yīng)該通過帶外信令協(xié)議(如H.245,SIP等)在動(dòng)態(tài)范圍內(nèi)選擇一個(gè)負(fù)載類型。
擴(kuò)展位(Extension-X bit):由使用的RTP框架定義。
序列號(hào)(sequence Number):為了安全從一個(gè)隨機(jī)初始化值開始,每發(fā)送一個(gè)RTP數(shù)據(jù)包加1。
標(biāo)志位(Marker-M)bit:標(biāo)志位設(shè)為1標(biāo)志,這是VOP的最后一個(gè)(或僅有一個(gè))RTP包。若一個(gè)RTP包中攜帶有多個(gè)VOP則標(biāo)志位也設(shè)為1。
時(shí)間戳(Timestamp):時(shí)間戳表示RTP包中的VOP采樣時(shí)間。為了安全,加上了一個(gè)隨機(jī)常數(shù)偏移。
當(dāng)一個(gè)RTP包攜帶多個(gè)VOP時(shí),時(shí)間戳表示其中最早的一個(gè)VOP的時(shí)間。其他VOP的時(shí)間戳信息通過VOP頭的時(shí)間戳字段可得(modulo time_base和vop_time_inerement)。如果RTP包只含有配置信息字段,使用編碼隊(duì)列中下一個(gè)VOP的時(shí)間戳。如果RTP包僅含有visual_object_sequence end code信息,使用編碼隊(duì)列中前一個(gè)VOP的時(shí)間戳。除非由帶外方式規(guī)定,時(shí)間戳分辨率設(shè)為缺省值90KHz。
數(shù)據(jù)分割處理遵守RFC3016規(guī)定。RFC3016標(biāo)準(zhǔn)中建議不要在一個(gè)包中映射多個(gè)VOP,這樣可以保證時(shí)間戳能唯一地表示VOP分幀時(shí)間,并且無需在MPEG4視覺RTP負(fù)載格式中定義額外的RTP包頭。當(dāng)Frame大于MTU時(shí),使用固定大小分割VOP;當(dāng)Frame小于MTU時(shí),每一個(gè)Frame占用一個(gè)RTP包。RTP接收方除控制接收開始與停止外,還需要考慮數(shù)據(jù)包緩存管理Frame組成、通信異常處理。數(shù)據(jù)包緩存管理采用雙緩存方法:第一級(jí)緩存使用雙向鏈表隊(duì)列實(shí)現(xiàn)RTP數(shù)據(jù)包收緩存、Frame組成、傳輸異常處理功能;第二級(jí)緩存使用循環(huán)隊(duì)列實(shí)現(xiàn)數(shù)據(jù)Frame緩存。視頻數(shù)據(jù)處理流程如圖2所示。
通信異常處理有以下三種情況:
(1)RTP數(shù)據(jù)包順序異常:RTP數(shù)據(jù)包接收時(shí)發(fā)現(xiàn)RTP數(shù)據(jù)包中標(biāo)記的SEQfsequuence numbed號(hào)比上一個(gè)RTP數(shù)據(jù)包的SEQ號(hào)小,將RTP數(shù)據(jù)包插入到緩存Buffer中,繼續(xù)接收其他RTP數(shù)據(jù)包。
(2)RTP數(shù)據(jù)包丟失組幀時(shí)發(fā)現(xiàn)RTP數(shù)據(jù)包中SEQ號(hào)不連續(xù),刪除緩存中與Frame相關(guān)的所有RTP數(shù)據(jù)包,并向下查找新的Frame頭RTP(MPEG4數(shù)據(jù)流每秒1個(gè)IFrame和多個(gè)PFrame,I Frame丟失則后繼P Frame不能被解碼。
(3)RTP數(shù)據(jù)包延遲:RTP數(shù)據(jù)包接收時(shí)發(fā)現(xiàn)數(shù)據(jù)包中標(biāo)記的SEQ號(hào)比RTP緩存隊(duì)列中最小的SEQ號(hào)還小的情況,則認(rèn)為RTP數(shù)據(jù)包延遲、丟棄。
(四)DjrectShow實(shí)現(xiàn)流媒體播放
由于需要播放的媒體屬于MPEG4標(biāo)準(zhǔn)數(shù)據(jù)流,因此不需要自己開發(fā)變換過濾器fdecoderfilter)。DirectShow會(huì)自動(dòng)選擇可以解碼MPEC-4的解碼器。如果本機(jī)系統(tǒng)安裝了第三方的視頻播放器,可能本次播放會(huì)選擇其MPEC,4解碼器進(jìn)行解碼;如果本機(jī)系統(tǒng)沒有安裝其他視頻播放器,則DirectShow會(huì)選擇微軟自帶的MPEG4解碼器進(jìn)行解碼播放。流播放功能實(shí)現(xiàn)需要一個(gè)源過濾器(Source filter)來實(shí)現(xiàn)網(wǎng)絡(luò)MPEC4流媒體的采集,以及一個(gè)過濾器圖表管理器實(shí)現(xiàn)DirectShow與應(yīng)用程序的交互。
四、結(jié)語
本文介紹了目前網(wǎng)絡(luò)多媒體視頻技術(shù)的發(fā)展,分析和研究了適合多媒體傳輸?shù)木W(wǎng)絡(luò)協(xié)議RTP/RTCP,客戶端視頻處理技術(shù)DirectShow。討論了當(dāng)前的視頻傳輸控制方法,并將其結(jié)合RTP和DirectShow加以實(shí)現(xiàn)。本系統(tǒng)具有低丟包率、時(shí)延小、容錯(cuò)能力強(qiáng)等優(yōu)點(diǎn),有良好的可重用性和可擴(kuò)展性。