傅曉茜,何加銘
(寧波大學信息科學與工程學院,浙江 寧波 315211)
近年來,隨著移動通信和多媒體技術的迅速發展,計算機、網絡以及圖像處理、傳輸技術也得到了飛速發展,視頻監控技術受到越來越廣泛的應用。視頻監控系統對安全性的要求比較高,服務器平臺構架要簡單方便,無論是在PC(Personal Computer,個人電腦)機上還是移動設備上都可以對監控內容進行實時查看。流媒體技術[1-2]是視頻監控系統的關鍵,目前主流的流媒體傳輸協議主要是實時傳輸協議RTP/RTCP以及實時流協議RTSP[3]。如果流媒體服務器和終端之間用普通的實現RTSP方法進行連接,那么在網絡暢通的終端上都能實現對該服務器的訪問,就能查看視頻監控的具體內容。傳統的方法無法對訪問者進行權限的控制,特別是用在安全性較高的系統中,安全性較低。
為了提高視頻監控系統的安全性,本文提出一種心跳機制的實現方法,使得現有普通的實現RTSP的終端不能正確訪問到實現了本方法的流媒體服務器,從而增加了系統的安全性和可靠性。除此之外,實現本方法還具有流保活功能,若終端的網絡環境異常甚至出現斷網的情況,則流媒體服務器會及時發現并停止對其服務,避免浪費服務器資源。
RTSP協議能夠配合低層協議共同給用戶提供一套較為完整的基于Internet的流式傳輸服務,為流媒體服務器和終端間實現音視頻流數據的控制搭建了橋梁。RTSP協議規定了一套可以根據需求而進行擴展的框架,終端播放時可以控制音頻和視頻,如控制在線視頻的暫停、定位、快進等,支持單播和組播服務,提供了選擇發送通道的方法以及基于RTP的發送機制。
視頻流是視頻通信的核心,是一系列連續的并且帶有時間戳的視頻包數據。由于視頻流有實時傳輸的特性,對帶寬和延遲較敏感,因此需要合適的傳輸協議。
一般情況下,實時視頻傳輸系統利用U D P(User Datagram Protocol,用戶數據報協議)來實現數據的傳送,但是UDP是“貪婪”的,不像TCP(Transmission Control Protocol,傳輸控制協議)有沖突檢測和擁塞控制機制,一旦網絡發生擁塞,UDP不會減少數據包的發送量,從而導致傳輸的停止和阻塞。TCP雖然有AIMD(Additive Increase Multiplicative Decrease,擁塞控制算法),即每發現一個報文丟失就減半窗口,但這種做法極大地破壞了數據流的平滑性,從而影響接收質量。
RTP傳輸協議[4]包含兩部分內容:RTP數據傳輸協議和RTCP傳輸控制協議。RTP可以靈活改變傳輸速率,以防亂序;而RTCP報文可以把網絡狀況和服務質量反饋給RTP數據,即RTP/RTCP能夠實現視頻自適應傳輸。
本文中提到的方法擴展了原有的RTSP協議的連接建立過程,在流媒體服務器響應了終端的PLAY請求后,定時器開始計時。終端接收到服務器的PLAY響應后就以設定的時間間隔向服務器發送心跳包,服務器收到此心跳包后重設定時器,并分析出心跳包中終端對應的公網IP地址信息和端口號。服務器根據獲取的IP地址和端口號向終端發送視頻流數據,終端播放器在會話過程中仍以一定的時間間隔發送心跳包。若服務器在定時器超過一定數值后還沒有接收到心跳包,則關閉會話。具體流程如圖1所示:

圖1 流媒體服務器與終端通信流程圖
(1)終端與流媒體服務器經過OPTIONS、DESCRIBE、SETUP、PLAY等交互后建立連接。
(2)終端視頻端口(client_port),端口號分別是59532、59533,其中59532端口用于接收視頻流數據,59533端口用于終端和服務器間RTCP消息交互。
(3)流媒體服務器用于接收接收心跳包的端口(server_port)分別為6970、6971,其中6970用于接收終端發送的RTP心跳包,6971用于接收終端RTCP心跳包。
(4)流媒體服務器響應完終端PLAY請求之后,并沒有馬上向終端發送視頻流數據,而是先設定一個定時器,等待終端向其發送心跳包。若在定時器規定的時間內收到心跳包,服務器才向終端發送視頻數據;若等待時間超出了定時器設定時間,服務器則關閉與終端的連接。
(5)流媒體服務器收到終端發送的心跳包后,重新設定定時器并分析心跳包,從中獲取終端對應的公網IP地址和端口號,或者終端的NAT(Network Address Translation,網絡地址轉換)設備的公網IP(Internet Protocol,網協)地址以及NAT設備端口號。服務器就能根據得到的IP地址和端口號向終端播放器發送視頻流數據,同時進行RTCP消息交互。
(6)流媒體服務器向終端發送視頻流數據后,終端仍然以設定的時間間隔向服務器發送心跳包,如果服務器在設定的時間間隔內未收到心跳包,則判定終端處于離線狀態,隨即關閉連接。
本文中心跳包結構擴展了RTP協議數據包字段[5-6],在RTP數據包的報文頭擴展字段中填入流媒體服務器所需的驗證信息,再由UDP發送。心跳包的構成如圖2所示:

圖2 心跳包結構圖
各個字段描述如下:
V:標識RTP版本,占2位;
P:填充標識,占1位;
X:擴展標識,占1位;
CC:CSRC計數器,占4位;
M:標記,占1位;
PT:載荷類型,占7位;
sequence number:系列號,占16位,用于標識發送端發送RTP報文的序列號,每發送1個,序列號就加1,接收端則通過序列號對數據包進行排序,檢測數據包丟失情況;
timestamp:時標,占32位,反映RTP數據包中第1個八進制采樣時刻,用于接收端延遲和延遲抖動,并且進行同步控制;
SSRC:同步源標識符,占32位,用于同一RTP包連接中沒有兩個同步源有相同的SSRC標識;
CSRC列表:貢獻源標識符,占32位,表示包內的對載荷起作用的源;
identifier:標識,占32位;
IPCID:網絡攝像頭ID號,占16位;
length:心跳包的有效字段字節數;
packettype:值為0表示初始化包,值為1表示維持包;
reserved:保留字段,占16位。
流媒體服務器向終端響應PLAY請求后,并非立刻向終端播放器發送視頻流數據,而是先處于等待狀態,當含有初始化標志的心跳包到達時,經過分析、驗證正確后,服務器才向終端發送視頻流數據。終端收到流媒體服務器發送的視頻流數據后,設置心跳包的packettype字段為“維持”,直到連接結束,此時心跳包的作用為在線保活。
流媒體服務器分析心跳包的過程如圖3所示。
流媒體服務器收到終端發送的心跳包后,先判斷其identifier字段是否正確,如果正確則說明收到正確的心跳包,再檢測packettype字段,若packettype為“初始化包”,則服務器從承載心跳包的UDP數據包頭獲得源IP地址及其端口號,根據獲取的IP地址及端口號發送視頻流數據,若規定時間內未收到“初始化包”,則關閉連接。如果packettype字段標識為“維持包”,那么服務器更新定時器,在規定時間內未收到“維持包”服務器則判定終端播放器已處于離線狀態,關閉連接。

圖3 心跳包分析過程圖
本文描述了流媒體服務器和終端之間通信連接建立的過程,提出了一種心跳機制的實現方法,該方法對傳統的RTP數據包頭部進行擴展,利用增加的字段識別來自終端的信息,使得普通的實現RTSP的終端不能訪問流媒體服務器,從而更好地保障了視頻監控系統的安全性。無論終端的網絡環境是處于公網,還是含有NAT設備的內網環境,實現了本方法后就可以查看監控內容,為解決一些網絡問題提供參考。
[1]孫冬柏. 流媒體技術及其應用[J]. 信息技術, 2005(11):131-134.
[2]宋剛,楊顯富. 實時流媒體傳輸及其協議[J]. 成都大學學報: 自然科學版, 2005,24(1): 28-31.
[3]章民融,徐亞鋒. 基于RTSP的流媒體視頻服務器的設計與實現[J]. 計算機應用與軟件, 2006,23(7): 93-95.
[4]潘鵬,杜旭,葉婷,等. RTP/RTCP實時傳輸協議的研究與Linux實現[J]. 計算機工程與應用, 2005(24): 105-107.
[5]RTP包頭分析[EB/OL]. (2010-11-18). http://wenku.baidu.com/view/df7856d126fff705cc170a5f.html.
[6]黃金雪. Socket高效網絡服務端研究[J]. 現代計算機,2011(10): 22-25.
[7]Stephan Wenger. H.264/AVC over IP[J]. IEEE Transactions on Circu its and System for Video Techno-logy,2003,7(13): 64-65.
[8]劉焱,鐘國輝,劉玉. 基于RTSP協議的流媒體雙向認證模型的研究[J]. 計算機應用與軟件, 2009,26(8): 83-85.
[9]Li Huaming, Tan Jindong. Heartbeat-Driven Medium-Access Control for Body Sensor Networks[J]. IEEE Transactions on Information Technology in Biomedicine,2010,14(1): 44-51.
[10]鐘玉琢,向哲,沈洪. 流媒體和視頻服務器[M]. 北京: 清華大學出版社, 2003.
[11]王小燕. 一種高效點播流媒體服務器的設計與實現[J].計算機工程與科學, 2010(2): 118-120.