SIP在视频监控系统中的应用
2012-07-18胡伟峰孟利民
胡伟峰,孟利民
(浙江工业大学通信网应用技术研究重点实验室,浙江杭州310023)
0 引言
目前国内视频监控业务主要应用于各种人口密集的场所,比如十字路口、银行、学校、大型超市、小区等。视频监控的发展正处于高清初期,许多地方原有的标清视频监控系统正在渐渐地被高清取代。现有的视频监控系统一般都采用RTP进行视频数据的传输,而信令控制方面比较常用的有H.323、RTSP和SIP等。其中SIP是由IETF提出来的一个应用控制(信令)协议,用于发起会话,它可用来创建、修改以及终结多个参与者参加的多媒体会话进程[1]。SIP采用文本的编码方式,具有灵活简单、扩展性强、实现成本低等特点。正是由于这些优势,使得SIP得到了飞速的发展,并广泛地被应用在各种多媒体业务中。网络上的各类语言版本的SIP库使得开发周期进一步缩短,本文采用的是当前非常流行的一个开源SIP库——PJSIP,详细介绍了设备端通过SIP与服务器之间进行的通信。
1 系统设计
在本项目设计中,采用支持H.264编解码的DM365开发板来进行二次开发。摄像头捕获的模拟视频数据发送到开发板,并由各芯片处理成H.264视频数据,最后进行RTP封装并发送给服务器,服务器将视频数据包转发给客户端,客户端的播放器对其进行解码播放。整个过程,设备端、服务器与客户端之间的信令控制使用SIP实现。系统的设计如图1所示:
图1 系统设计图
2 利用SIP进行信令控制
按照逻辑功能区分,SIP系统由四种功能实体组成:用户代理、代理服务器、注册服务器和重定向服务器[2]。SIP 定义了 6 类请求方法:INVITE、ACK、BYE、CANCEL、REGISTER、OPTIONS[3]。本文采用PJSIP协议栈来实现系统中的SIP通信。
2.1 PJSIP 简介
PJSIP是一个C语言编写的基于SIP、SDP、RTP等协议的开源多媒体通信库。C语言良好的可移植性和高性能保证了PJSIP这个库具备很强的跨平台性以及优秀的性能,它的内存占用率也非常低。由于PJSUA-LIB库为开发者提供了简单的函数接口用于SIP消息的收发,使普通的开发人员不必过多地考虑PJSIP库的内部框架。
整个系统的协调管理者ENDPOINT是整个协议栈的核心,负责实现pool、time heap、传输层控制、事件调度执行、module管理、接收派发消息等[4]。模块管理使PJSIP具有很强的扩展性,协议栈中的所有功能都以模块的形式进行设计,每个模块在初始化过程中都要在ENDPOINT中进行注册。收到SIP消息后,先调用PARSER模块进行解析,然后按照优先级将解析后的消息依次传递给所有注册的模块,若有模块对消息进行处理则立即停止消息的传递。对于要发送的消息,ENDPOINT会将消息发送给所有的模块并且允许各个模块对消息进行修改[5]。SIP消息在PJSIP各模块之间的来回传递如图2所示。
图2 PJSIP各模块协作表
2.2 新模块的添加
PJSUA-LIB库中SIP消息的默认使用SDP协议来描述消息体,而本文中的系统由于实际情况需要采用XML协议。故参考PJSUA-LIB库中的即时消息的处理模块,自行设计一个模块实现对XML消息体的SIP消息的处理。
新模块在初始化过程中必须要先向ENDPOINT进行注册,注册完成后ENDPOINT在收到SIP消息后才会将消息交给新模块处理。结合本系统的实际情况,新模块设计时只需要实现其中的两个回调函数on_rx_request()与on_rx_response()来对收到的SIP消息进行处理。当ENDPOINT收到SIP请求消息时将调用on_rx_request()函数进行处理,收到SIP应答消息时将调用on_rx_response()函数进行处理。ENDPOINT对SIP消息的传递是根据模块的优先级高低来依次传递的,所以新定义的消息解析模块的优先级应该尽量比其他同级模块要高,这样才可以对SIP消息进行优先处理。
同样,在新模块中实现了对SIP消息的接收后,也要完成SIP消息的发送函数部分。SIP消息发送函数主要参考了PJSIP中即时消息的发送流程,另外在发送函数的参数中添加用于表示SIP请求方法的参数,XML消息体内容以字符串的形式进行传递。具体的SIP消息发送流程如图3所示。
图3 SIP消息发送流程图
2.3 设备端SIP应用流程
本系统选择UDP对SIP消息进行发送。设备端的SIP应用程序主要需要实现设备注册、视频请求两大功能。
注册具体过程:设备开启之后向注册服务器发送请求方法为REGISTER并且不携带消息体的SIP消息;注册服务器接收到上述消息回复状态码为200的应答消息,同时携带一个随机码作为消息体;设备接收到应答消息后获得随机码,并将其与密码组合进行MD5加密,然后将加密结果再次以REGISTER请求方法的SIP消息发送给注册服务器;注册服务器接收到消息中的密码后对此进行解析,并在数据库中查询确认该设备是否为合法用户,若是回复状态码为200的应答消息,并保留设备的位置信息,否则恢复状态码为4XX的应答消息,同时在应答消息的起始行的文本信息中添加错误原因;终端注册成功后,每隔一定的时间给注册服务器发送请求方法为REGISTER的SIP消息并携带特定的消息体以告知服务器当前设备仍在线,此SIP消息称为心跳保护包。
视频请求具体过程:当收到客户端发来请求方法为INVITE的SIP消息后,服务器负责记录客户端的通信地址并将视频请求消息转发给设备,同时回复状态码为1XX的应答消息通知客户端进行等待;设备接收到此消息后读取其中的媒体参数并判断是否有能力参与会话,若可以则发送状态码200的应答消息给服务器,记录视频转发服务器的通信地址;服务器转发应答消息给客户端,客户端发送ACK消息确认会话的建立,设备接收到经服务器转发的ACK消息后,完成多媒体会话的建立。SIP应用的具体流程图如图4所示。
图4 SIP通信逻辑流程图
3 测试结果
DM365开发板运行SIP应用程序,从程序启动到注册成功只需5-8s,成功注册登录服务器时串口信息如图5所示:
图5 设备注册成功时串口的部分输出信息
4 结束语
本文设计的SIP通信系统可以实际应用到视频监控系统中,可以实现与服务器、客户端之间良好的即时通信。SIP系统的重发机制很好地解决了UDP传输的缺点,PJSIP模块化的功能管理机制使系统具有较强的扩展性。该系统具有较高的实用价值,可以广泛应用到网络视频会话中。
[1] 刘瑞祥,许立群,刘宝妹.基于SIP即时消息系统的客户端设计[J].计算机科学,2010,37(9):104-106.
[2] 陈银星,周利清.SIP协议在VOIP终端的设计和实现[J].现代电信科技,2006,(10):11-13.
[3] 张智江,张云勇,刘韵洁.SIP协议及其应用[M].北京:电子工业出版社,2005:14-15.
[4] Benny Prijono.PJSIP Developer's Guide[EB/OL].http://www.Pjsip.org,2006 -03 -07.
[5] 雷正雄,朱晓民,廖建新.SIP协议栈的设计与实现[J].现代电信科技,2004,(3):17-20.