基于GBT28181:SIP协议组件开发-----------第二篇SIP组件开发原理
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3937590.html,qq:1269122125。
上一节中讲的SIP组件,即GBT28181SipComponent动态.so库工程,生成libGBT28181SipComponent.so库文件和IGBT28181Comm.h编程接口,在该库中实现了REGISTER,
MESSAGE,NOTIFY,SUBSCRIBE,INVITE,ACK,BYE,CALL_MESSAGE等GB/T28181-2011 《安全防范视频监控联网系统信息传输、交换、控制技术要求》要求的SIP方法,
后期有新的需求可以添加。该库已经成功用于电网的多家视频安防企业中,性能稳定。Sip协议组件使用了开源的SIP协议栈OSIP2和开源的扩展协议集Exosip2,结合《技术要求》进行
了修改和扩展,使得模块符合《技术要求》对Sip通信的需求。
一.SIP组件主要依赖库列表
| 库名 | 功能 |
| Osip2 | 一个开源的SIP协议栈,使用C编写,主要提供解析SIP和SDP消息的API和事物处理的状态机。 |
| Exosip2 | 是对Osip2协议栈的封装和调用,作为Osip2的一个扩展协议集,使得Osip2更容易被使用。 |
| Boost | 一个准标准库,相当于对STL的的延续和扩充。 |
| Loki | C++的模板类库 |
二.SIP组件对外主要功能

Sip组件提供的接口与主要功能一一对应,接口的主要函数如下:
(1)启动Sip通信服务
int_t IGBT28181Comm ::StartSip(const string_t ip, int_t port = 5060) ;
(2)停止Sip通信服务
void_t IGBT28181Comm::StopSip();
(3)发送Sip命令数据
int_t IGBT28181Comm::Downcast(const SipRequestInfo& info);
(4)Sip服务请求完成回调
typedef void_t (*ResponseCallback)(const SipRequestInfo& info,void_t* user);
void_t IGBT28181Comm::SetResponseCallback(ResponseCallback callback,void_t* user) ;
这部分不想共享源代码,头文件和库文件的下载地址如下:
需要库源代码的可以联系作者。
基于GBT28181:SIP协议组件开发-----------第二篇SIP组件开发原理的更多相关文章
- iOS开发——高级技术精选&底层开发之越狱开发第二篇
底层开发之越狱开发第二篇 今天项目中要用到检查iPhone是否越狱的方法. Umeng统计的Mobclick.h里面已经包含了越狱检测的代码,可以直接使用 /*方法名: * isJailbroken ...
- android 串口开发第二篇:利用jni实现android和串口通信
一:串口通信简介 由于串口开发涉及到jni,所以开发环境需要支持ndk开发,如果未配置ndk配置的朋友,或者对jni不熟悉的朋友,请查看上一篇文章,android 串口开发第一篇:搭建ndk开发环境以 ...
- React第二篇:组件的生命周期
前言:因为生命周期是必须要掌握的,所以React的第二篇咱就写这. (版本:16.3.2) React的生命周期大致分为四个状态:分别是Mouting.Updating.Unmounting.Erro ...
- SAP-ABAP系列 第二篇SAP ABAP开发基础
第二章SAP ABAP开发基础 1.ABAP数据类型及定义 ABAP程序中共包含8种基本数据类型定义, 类型名称 描述 属性 C Character Text (字符类型) 默认长度=1,默认值 = ...
- 轻松pick移动开发第二篇,rem布局
一.为什么要使用rem布局 前面我写了flex布局的优点,分配伸缩盒容器中子盒子占的份数及排列方式,使其不受屏幕缩放的影响,使布局变得简单.然而,在有些时候,不可避免要给盒子设置高度的值,怎么让高度也 ...
- 微信支付之JSAPI开发-第二篇:业务流程详解与方案设计
微信支付流程 流程: 上图的网址为:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4 如上图所示,微信网页支付的具体流程大致分为 ...
- Swift开发第二篇——extension及fatalError
本篇分两部分: 一.extension在 Swift 中的使用 二.Swift 中的 fatalError 一.extension在 Swift 中的使用 在 swift 中我们可以通过 extens ...
- PowerBI开发 第二篇:数据建模
在分析数据时,不可能总是对单个数据表进行分析,有时需要把多个数据表导入到PowerBI中,通过多个表中的数据及其关系来执行一些复杂的数据分析任务,因此,为准确计算分析的结果,需要在数据建模中,创建数据 ...
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第二篇:第一个页面
摘要 本文首先一步一步完成Demo的第一个页面——首页.然后根据实现过程,说明一下其中用到的与ASP.NET MVC相关的概念与原理. 让第一个页面跑起来 现在,我们来实现公告系统 ...
随机推荐
- Timus1132(二次剩余方程求解)
题目:http://acm.timus.ru/problem.aspx?space=1&num=1132 题意:就是给出方程,p为素数,求在区间内的解. 这个思路很简单,详见:http://a ...
- dns智能解析对网站排名的影响
网站排名是所有建站者都关系的问题,如何提升网站排名有很多因素,网站是否健康也与网站排名有关,下面智儒科技网站建设为你研究下如何判断自己的网站是否健康. 一般情况下,网站的排名在优化的基础上,怎么也上不 ...
- phpMyAdmin 多个跨站脚本漏洞
漏洞名称: phpMyAdmin 多个跨站脚本漏洞 CNNVD编号: CNNVD-201307-649 发布时间: 2013-08-09 更新时间: 2013-08-09 危害等级: 中危 漏洞类 ...
- Redis源码阅读笔记(1)——简单动态字符串sds实现原理
首先,sds即simple dynamic string,redis实现这个的时候使用了一个技巧,并且C99将其收录为标准,即柔性数组成员(flexible array member),参考资料见这里 ...
- 动态规划——H 最少回文串
We say a sequence of characters is a palindrome if it is the same written forwards and backwards. Fo ...
- bzoj 1602 [Usaco2008 Oct]牧场行走(LCA模板)
1602: [Usaco2008 Oct]牧场行走 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 379 Solved: 216[Submit][Sta ...
- [已解决问题] Could not find class XXX referenced from method XXX.<YYY>
导入Jar包的问题,有时候即使引入了Jar包也会报错,比如我在引入了libsvm.jar后仍然会报此错 解决方法是: Step 1. 创建User library,随便命一个名,然后把Jar包导入 S ...
- Searching the String - ZOJ 3228(ac自动机)
题目大意:首先给你一下母串,长度不超过10^5,然后有 N(10^5) 次查询,每次查询有两种命令,0或者1,然后加一个子串,询问母串里面有多少个子串,0表示可以重复,1表示不可以重复. 分析:发 ...
- zznu 1068: 进制转换
进制应该属于程序员的看家本事了,也是大家水平告别菜鸟的一个转折,所以进制转换题目是很有意义的, 这个题目是最简单的把二进制数化简成十进制,因为输入有可能有31位,所以无法使用int或者long lon ...
- session与cookie的关系
客户第一次发送请求给服务器,此时服务器产生一个唯一的sessionID,并返回给客户端(通过cookie),此时的cookie并没有setMaxAge();只是保存于客户端的内存中,并与一个浏览器窗口 ...