一种视频监控系统中心跳机制的实现方法*
2015-05-24傅晓茜何加铭
傅晓茜,何加铭
(宁波大学信息科学与工程学院,浙江 宁波 315211)
1 引言
近年来,随着移动通信和多媒体技术的迅速发展,计算机、网络以及图像处理、传输技术也得到了飞速发展,视频监控技术受到越来越广泛的应用。视频监控系统对安全性的要求比较高,服务器平台构架要简单方便,无论是在PC(Personal Computer,个人电脑)机上还是移动设备上都可以对监控内容进行实时查看。流媒体技术[1-2]是视频监控系统的关键,目前主流的流媒体传输协议主要是实时传输协议RTP/RTCP以及实时流协议RTSP[3]。如果流媒体服务器和终端之间用普通的实现RTSP方法进行连接,那么在网络畅通的终端上都能实现对该服务器的访问,就能查看视频监控的具体内容。传统的方法无法对访问者进行权限的控制,特别是用在安全性较高的系统中,安全性较低。
为了提高视频监控系统的安全性,本文提出一种心跳机制的实现方法,使得现有普通的实现RTSP的终端不能正确访问到实现了本方法的流媒体服务器,从而增加了系统的安全性和可靠性。除此之外,实现本方法还具有流保活功能,若终端的网络环境异常甚至出现断网的情况,则流媒体服务器会及时发现并停止对其服务,避免浪费服务器资源。
2 流媒体传输协议简介
2.1 实时流媒体协议RTSP
RTSP协议能够配合低层协议共同给用户提供一套较为完整的基于Internet的流式传输服务,为流媒体服务器和终端间实现音视频流数据的控制搭建了桥梁。RTSP协议规定了一套可以根据需求而进行扩展的框架,终端播放时可以控制音频和视频,如控制在线视频的暂停、定位、快进等,支持单播和组播服务,提供了选择发送通道的方法以及基于RTP的发送机制。
2.2 实时传输协议RTP/RTCP
视频流是视频通信的核心,是一系列连续的并且带有时间戳的视频包数据。由于视频流有实时传输的特性,对带宽和延迟较敏感,因此需要合适的传输协议。
一般情况下,实时视频传输系统利用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能够实现视频自适应传输。
3 心跳机制的设计与实现
3.1 流媒体服务器与终端间的连接过程
本文中提到的方法扩展了原有的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)流媒体服务器向终端发送视频流数据后,终端仍然以设定的时间间隔向服务器发送心跳包,如果服务器在设定的时间间隔内未收到心跳包,则判定终端处于离线状态,随即关闭连接。
3.2 心跳包的设计
本文中心跳包结构扩展了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 心跳包分析过程图
4 结束语
本文描述了流媒体服务器和终端之间通信连接建立的过程,提出了一种心跳机制的实现方法,该方法对传统的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.