基于GBT28181:SIP协议组件开发-----------第二篇SIP组件开发原理

上一节中讲的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) ;

这部分不想共享源代码,头文件和库文件的下载地址如下:

需要库源代码的可以联系作者。

注:

    原文:http://www.cnblogs.com/qq1269122125/p/3937590.html

时间: 2024-08-05 01:23:34

基于GBT28181:SIP协议组件开发-----------第二篇SIP组件开发原理的相关文章

Android深度探索(卷1)HAL与驱动开发 第二章 搭建Android开发环境 读书笔记

Android深度探索(卷1)HAL与驱动开发 第二章 搭建Android开发环境 读书笔记   本章主要讲解在Ubuntu Linux 下搭建Android开发环境. 1.JDK:从官网下载压缩包,并将其解压缩. Gedit etc/profile 并设置PATH环境变量,记得PATH. 2.搭建Android应用程序开发环境. 安装Android SDK 安装Eclipse 安装ADT 配置ADT 建立AVD 这个步骤是安装Android SDK,步骤与操作与在Windows操作系统下的安装

Android 深度探索(卷1)HAL 与驱动开发 第二章 搭建 Android 开发环境 心得体会

Android 深度探索(卷1)HAL 与驱动开发 第二章 搭建 Android 开发环境 心得体会 本章主要介绍如何搭建Android底层开发的环境,主要包括Android应用程序开发环境,和交叉编译环境的搭建. 其中开发.测试和调试Linux驱动.HAL程序库需要的工具包括如下一些: 1. JDK6或以上版本 2. Eclipse3.4或以上版本 3. ADT(用于开发Android应用程序) 4. CDT(用于开发Android NDK程序) 5. Android SDK 6. Andro

微信开发第二篇:工具篇

自从写了第一篇后,最近一直在整理另一个项目的需求,没有继续研究下去,今天晚上终于开始了我的第二篇. 本次微信的项目是想基于H5做的,所以现在的想法还是先从前端入手. 要做一个移动端H5的网站有很多种方式: 1.使用Html5.css3.js自己从头开始做. 但如果这样,对于目前主要从事项目管理及后端开发工作的我,无疑是困难重重:另外自己也已经对前端的东西很久没碰过了.如果选择这种方式,肯定会本末倒置.最后说不定整个项目都没得戏(虽说这个项目完全是自己的个人爱好!!) 2.使用现在已有的移动端H5

轻松pick移动开发第二篇,rem布局

一.为什么要使用rem布局 前面我写了flex布局的优点,分配伸缩盒容器中子盒子占的份数及排列方式,使其不受屏幕缩放的影响,使布局变得简单.然而,在有些时候,不可避免要给盒子设置高度的值,怎么让高度也随着屏幕大小变化等比例缩放呢?另外,怎么让页面文字大小也随着屏幕的大小变化而缩放呢?rem布局就可以轻松解决这个问题. 二.rem布局的原理 1.rem 首先要了解什么是rem,rem (root em)是一个相对单位,1rem的值是页面html中font-size的大小.在布局中,我们统一使用re

(C/C++)基于SharpUI控件库的插件式框架开发--第二篇可停靠管理

一个软件,不可能只有一个文档界面,会有多个甚至几十二,比如一些浏览器.文档查看等都是多个标签页的形式,在C#中开源的可停靠管理的常用的是Xceed.Wpf.AvalonDock:但是用C/C++开发的开源停靠管理库是没找到,没办法只能自己写一个了. 图1 可停靠管理项目名XPDock,其中所有控件的样式存放在“.bin\layout\Theme\Controls\XPDock.xml”:如图2: 图2 在XPDock控件中,DockingManager为控件主要控件,控件内定义添加视图方法Add

并行开发——第二篇 Task的使用

在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于"任务的编程模型"所冲击,因为task会比thread具有更小的性能开销,不过大家肯定会有疑惑,任务和线程到底有什么区别? 1:任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行. 2:任务跟线程不是一对一的关系,比如开10个任务并不是说会开10个线程,这一点任务有点类似线程池,但是任务相比线程池有很小的开销和精确的控制. 一:Task 最简单的使用 开启

学习java随笔第二篇:java开发工具——Eclipse

java开发工具有很多这里我使用的是Eclipse. 首先我在官网上下载了Eclipse的软件包,下载地址:http://www.eclipse.org/downloads/,然后有在网上找了一个汉化的包. 软件包直接解压即可使用,把汉化包放到里面,工具显示的就是中文的环境了. 下面是我,用Eclipse工具写的一个HelloWorld

python开发第二篇

1.第一个程序: #-*-coding:utf-8-*- print("hello word") 1.1解析下: (1)第一行的意思:就是告诉python解释器在编译时候,要使用utf-8的编码去解释. (2)第二行就是打印出"hello word" 咯. 1.2然后怎么执行这段程序呢? (1)打开笔记本,把上面的代码保存成已.py后缀的文件,然后打开cmd,在黑色窗口输入"python 文件的路径",回车...运行完毕. 2.变量 什么是变量?

软件工程迭代开发第二篇

今天增加了一些显示上的内容,使我们的游戏更加便于理解.比如,我们加入了血条的显示,而且用颜色区分开自己的角色.别人的角色和怪物.如下图所示. 屏幕下方那一条紫紫的东西就是经验条,长满之后会升级. 下面我将逐个解释每个模块的实现方法. 首先是血条: 自己的血条: glColor3f(0.2, 1, 0.1); glRectf(wx - 0.025, wy + 0.1, wx - 0.025 + (hp / maxhp)* 0.05, wy + 0.085); //显示血条 其他玩家的血条: glC