标题 | 基于oSIP的信令服务器设计与实现 |
范文 | 张巍巍 摘要:为避免重复建设,国家颁布了GB/T-28181标准。该标准承载于SIP协议之上,规定了城市监控联网系统中信息传输、交换、控制的互联结构。未来平安城市视频综合系统中的视频实时点播、回放下载、控制等操作将全部经由SIP信令服务器交互完成。该文依据GB/T-28181的标准,论述了一个基于开源的oSIP协议栈的SIP信令服务器的设计与实现。其支持标准规定的通讯流程,可满足多级平台间的级联控制需求,具有良好的性能和可扩展性。 关键词:GB/T-28181;SIP;SDP;oSIP;信令服务器 中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)33-0043-03 Abstract:To avoid duplication of construction, the state promulgated the GB/T-28181 standard. The standard is carried on the SIP protocol, and it specifies the interconnection structure of information transmission, exchange and control in the urban monitoring and networking system. Real-time play, playback, download, control and so on in the future safe city video integrated system will be completed by the SIP signaling server. Based on the standard of GB/T-28181, this paper discusses the design and implementation of a SIP signaling server Based on open source oSIP protocol stack. It supports the standard communication process, and can satisfy the cascade control requirements of multi-level platforms, and has good performance and scalability. Key words:GB/T-28181; SIP;SDP;oSIP;Signaling Server 近十年間,各地都在快速推广实施平安城市的建设,为公安的业务提供便利和有效的技术手段。其他社会各个行业,也积极通过安防视频监控系统,提高管理水平,降低管理成本。这其中存在一个突出的矛盾,就是视频综合系统容易为设备厂商所绑架,升级困难。原因就在于视频监控厂商之间各自有自己独立的实现方式,不同厂商设备间无法正常通信。因此国家颁布了GB/T-28181标准,作为国内安防、监控行业的规范。这样不但有利于提高终端厂商之间的竞争性,也为相关系统的升级改造提供了极大的便利。 国标28181基于SIP架构,SIP是一个文本会话式的应用层控制协议,其独立于底层传输协议TCP/UDP/SCTP,因此具备良好的可扩展性。oSIP按照RFC3261(SIP)和RFC2327(SDP)标准,使用标准C实现了一个简单小巧的SIP协议栈,其源码完全开放,便于用户裁剪、定制。由于其不提供高层的会话控制功能,主要提供一些解析SIP/SDP消息的API和事务处理的状态机,所以非常灵活。目前在各种SIP应用中被广为采用。本文主要介绍基于oSIP的SIP信令服务器设计。 1 oSIP协议栈 oSIP协议栈由三大模块构成,如图1所示。 解析器模块提供了丰富的API,便于用户对SIP/SDP消息结构及URL结构的解析,使用户能专注于业务本身。工具模块提供对SDP协商及会话管理的工具。oSIP的核心是态机模块,通过状态机完成对特定事务的状态记录,且能在特定状态下触发相关事件或回调函数。其一共分为4个状态机,ICT/IST为一对连接,分别负责INVITE事件的客户端和服务端处理,NICT/NIST负责对非INVITE事件的客户端和服务端处理。图2是一个INVITE事件的状态机流程。 由于28181规定的媒体呼叫流程涉及多方协商,故对于单一事务而言,其事务的流程会更加复杂。所以本文论述的系统主要借助于通过oSIP完成对SIP端口的监听、发送以及相关SIP信令和SDP的解析,媒体点播的事务状态维护由系统定义的状态机负责完成。 2 系统架构 根据GB28181的规范要求,SIP信令服务器应至少提供用户注册和呼叫代理以及SIP消息转发等功能。故整个信令服务器由3大逻辑实体构成:注册服务器、背靠背用户代理服务器和代理服务器。所有来自IP网络的SIP信令统一由信令解析模块进行相应的解析封装,打包成系统内部的消息格式,发送至不同的逻辑实体。整个系统的架构图如图3示。 2.1 注册服务器 注册服务器负责管理所有本地域中的设备信息,包括下级平台的注册信息。接收各终端设备及下级平台的注册请求,且负责向上级平台发起注册。其访问数据库确认注册权限,更新数据库中设备及平台相关注册信息。其主要包含3大模块: 1) 配置管理 从数据库读取系统的各种配置信息;包括系统启动配置、前端设备配置、流媒体服务器配置、本地SIP域上下级平台的级联配置等;可以基于数据库的触发器完成对配置的运行时修改。 2) 设备管理 用于管理所有向信令服务器注册成功的设备,监听其心跳包,处理设备断线,以及设备注销;设备管理器拥有独立的定时器,每一个时隙会对当前设备池中进行轮巡统计,由心跳包时间间隔判定设备是否掉线,以触发相应的断线处理。 3) 通道管理 用于管理所有已注册NVR所挂载的通道列表。GB28181标准中,媒体流的点播以通道为基本元素;对于挂载于NVR之上的IPC设备,其无需向信令服务器注册,可根据其挂载NVR的通道号获取其媒体流信息;通道管理负责根据指定通道号查询其附着的NVR地址信息,以实现SIP INVITE媒体流发送者的正确派送。 4) 数据库管理 根据设备在线状态,更新数据库,响应数据库的触发器,动态更新本地配置。Web端的展示可直接访问数据库,以降低模块间的耦合度。 2.2 背靠背用户代理服务器 该逻辑实体是信令服务器的核心,主要负责接收客户端的媒体点播请求。以第三方呼叫控制的方式在客户端、流媒体及前端设备间进行协商,建立会话连接。以状态机的方式维护会话相关的事务信息,保证SIP信令和RTP媒体流传输的正确性。其主要包含3大模块: 1) 会话管理模块 对于每一个INVITE请求,会话管理模块会创建一个Session会话用以保存该INVITE请求的上下文;当需要对INVITE类相关的SIP信令进行处理时,会话管理模块首先根据会话ID查找到指定的Session,具体的事务流程交由会话事务模块执行。 2) 会话事务模块 其核心是会话的状态机,当事务处于不同的状态时,收到不同的响应信令,应该执行如何的动作,统一交由会话状态机来管理维护。 3) 负载均衡模块 当信令服务器需向流媒体发起视频流请求时,需考虑多个流媒体服务器当前的负载情况。可综合考量当前已注册的流媒体服务器的CPU、内存、硬盘及网络使用情况,向负载最轻的流媒体发起INVITE邀请;流媒体服务器的系统信息可以通过私有协议通知信令服务器,也可直接承载于SIP协议。 2.3 代理服务器 主要负责消息转发,对前端设备的云台控制,报警响应等可经由此模块处理。客户端对前端设备的控制请求信令,经由代理服务器发送至前端设备,再转发前端设备的控制响应信令至客户端。另外通过代理服务器可在上下级平台间传输信令,用以实现级联控制需求。 2.4 通讯协议结构 SIP信令的协商,消息体内容主要携带有SDP(会话描述协议)信息,MANSCDP(监控报警联网系统控制描述协议)信息,以及MANSRTSP(监控报警联网系统实时流协议)信息。SDP用于媒体的协商与设备的控制。对于媒体流来说,主要经过视频原始流打包成RTP数据包经由流媒体服务器送至媒体流接收者。其视频流格式支持MPEG-4/H.264等,封装格式规定为Program Stream(程序流)。MANSCDP用于联网系统的控制、查询、通知、响应等操作;MANSRTSP命令实现对视频、音频流的播放、快进、暂停、停止、随机拖放等远程控制。 3 核心模块实现 本系统基于消息队列机制实现多进程多线程间的异步通信。每个功能模块都拥有各自独立的消息队列。模块间通信的统一消息格式定义如下: typedefstruct { unsignedintmsgId; unsignedint length; char* data; }tMsg; 任务间的通信根据不同的信令类型定义不同的消息ID以及消息数据结构。 3.1 信令解析 SIP信令的监听由oSIP协议栈负责,当收到合法的SIP信令后,oSIP会触发相应的事件,使用方法如下: eXosip_event_t *event = eXosip_event_wait(0, 200); 当协议栈接收到外部事件后,会构造本地消息将其写入信令解析模块的消息队列。由解析线程从队列中取出消息,根据不同的信令类型,构造合适的消ID、数据结构,写入对应模块的消息队列。消息主要分三類:注册相关类,INVITE相关类以及MESSAGE相关类。分别对应三个不用的逻辑实体。 3.2 设备管理 由于本地SIP域中的设备数量可能会很多,系统为了实现设备状态的维护,心跳包的监测,为每一个已注册的设备分配空间保存上下文。为了避免由于设备频繁注册注销导致的内存颠簸问题,也为了快速便捷的实现设备轮巡,采用内存池的技术管理所有设备。每次分配指定大小的内存块,每一个内存块可保存固定数量的设备信息。若已分配内存块使用完毕,则重新申请增加新的内存块,以此来提高效率。为了方便对内存池中的所有对象进行遍历,需要支持相关的游标遍历。 设备注册成功后,信令服务器负责监测其在线状态。引入心跳监测模块,该模块定时向已注册设备发送心跳包,收到设备响应后,更新设备状态上下文。为了从全局统计所有设备的在线状态,引入两个定时器完成设备轮巡。设备轮巡启动后,会触发定时器A,该定时器超时后进行轮巡处理;由于设备数量不定,可配置每次轮巡统计的最大设备数。若本次统计未能完成对设备池中所有设备的统计,则启动定时器B,该定时器超时后通知设备管理继续上一次的轮巡统计。统计过程中,根据设备注册时间戳、心跳时间戳与当前服务器本地时间戳的比对,判断该设备是否处于超时状态;如果判断设备已超时,则从设备管理器的哈希表中删除指定编码设备的设备池ID映射,从设备池中删除指定设备;同时更新数据库。 3.3 会话状态机 GB28181中,视频请求经由信令服务器对流媒体和前端设备进行SDP协商后,将RTP流送至客户端。协商过程中,会话会存在多个状态,如等待流媒体响应,等待前端设备响应,等待客户端ACK等。 其状态机变迁流程如下图所示: 当会话在指定状态收到错误响应或无响应时均进入终结状态,统一交由错误处理模块进行相应的资源释放和日志记录。 状态机的定义如下: typedefStateMachine 对于不同的状态,状态机会获取当前状态的操作指针,回调给状态机使用者;极大增强了代码的清晰度,避免了繁琐的大量if/else判断。 4 级联点播 为了方便SIP平台间的互联互通,信令服务器支持级联点播。对上级信令服务器而言,下级信令服务器相当于前端设备;对下级信令服务器而言,上级信令服务器相当于客户端;如此经过协商,下级平台的流媒体将设备媒体流送至上级平台的流媒体服务器,最终由上级流媒体服务器将设备媒体流送至上级平台客户端。传输都经由信令安全路由网关,由此保证网络的安全性。 其信令交互流程如下图所示: 5 结束语 随着视频监控的不断普及,可预见未来各行业会逐步加大对视频综合系统的投入,各系统间的联网也会逐步成为可能。本文设计和实现了一个基于oSIP协议栈的信令服务器,符合GB28181的标准规范,并在规范要求的基础上做出了一些优化,重点论述了部分模块的实现方式,为日后基于SIP协议的相关服务端程序设计,提供了借鉴思路。 参考文献: [1] GB-T 28181-2011 安全防范视频监控联网系统信息传输、交互、控制技术要求[S]. [2] oSIP开发者手册,作者:ArmericMoizard版本保护:GNU Free Document License 文献地址:http://osip.actosc.org [3] 王爽,廉东本,康弘楠.基于SIP的中心信令控制服务器的实现与应用[J].计算机系统应用,2014(3). [4] 姚田文.基于GB/T28181标准的视频监控系统的设计与实现[D].浙江大学,2016.
|
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。