PJSIP
1 JAIN-SIP
Java API for Integrated Networks SIP ,JSR32定义了其规范。PSTN、Wireless、Internet使用的都是JSR32。
1.1 用途
JAIN SIP 可被用于以下几个方面:
用于J2SE平台,开发独立的user agent、proxy和注册应用程序。
作为SIP Servlet 容器的基础SIP 实现。
作为EJB容器的基础SIP 实现。
1.2 对协议的支持:
JAIN SIP 支持RFC3261定义的全部功能,并且支持以下SIP 扩展:INFO方法(RFC2976)、临时响应的可靠性(RFC3262)、事件通知框架(RFC3265)、UPDATE方法(RFC3311)、Reason头(RFC3326)和为即时消息定义的Message方法(RFC3428)。
1.3 编程 模型 :
JAIN SIP 标准化了SIP 协议定义的通用事务模型接口,提供了从事务接口访问dialogue功能的方法。它采用Listener/Provider事件驱动 模型 ,定义了很多factory类,用于创建Request和Response消息和SIP 头。它为每个支持的头定义了通用接口,可添加到Request 和Response中。SIP 消息通过一个事务被传到Sip Provider,Sip Listener用于监听到来的事件。此外,JAIN SIP 被设计为可扩展的,定义了通用的扩展头接口。
1.4 其他:
JAIN SIP 并不仅是一个客户端API,它还可以用于一些服务器扩展。比如,JAIN SLEE资源适配器采用JAIN SIP 作为基础。此外,它同样可以与SIP Servlet 一起使用,或者直接与EJB结合使用。
由于JAIN SIP API是对SIP 标准的完整定义,任何基于SIP 的程序可将JAIN SIP API用作Java标准接口,成为经JAIN SIP 认证的栈。这意味着应用服务器、SIP 电话、网关及网关控制器、SIP 服务器、基于SIP 的业务、SIP 计费解决方案、开发者工具包、SIP 测试工具、SIP 用户代理、以及SIP 网络管理,均可利用JAIN SIP API实现在SIP 栈实施中的通用性。典型的SIP 网络中,JAIN SIP 接口用于代理服务器、媒体网关和客户端。JAIN SIP API涵盖比用户代理或客户端软件所需更多的内容。
参考资料:
官网简介
官网教程
Github
Github
JAINSIP协议栈的一个简单SIP服务器实现流程
使用JAIN SIP开发基于SIP协议的应用
2 SIP Servlet
规范JSR 116,即SIP Servlet API v1.0,提供下载.jar包;JSR289,即SIP Servlet API v1.1,最终发布于2006.12,.jar包尚未提供下载。
2.1 概述
SIP Servlet 定义了一个环境,执行基于网络的SIP 应用。它用于开发应用服务器,可支持SIP 、HTTP和J2EE平台。建立在HTTP Servlet API规范之上,定义了API和用于应用打包的文件格式。SIP Servlet 的核心能力是作为UA或proxy处理SIP 信令。API规范的目的是允许应用完全的控制SIP 信令,同时隐藏SIP 协议的复杂性。
2.2 SIP Servlet API
• SIP signaling:允许应用表现比较完整的SIP 信令行为,包括UAC、UAS和proxy。
• Simplicity:容器处理“非本质的”复杂问题,比如管理网络监听点、重传、CSeq、Call-ID和Via头、路由等。
• Converged applications:容器支持聚合应用,即跨越多种协议和媒体类型,比如web、电话和在线应用。
• Third party application development:servlet 模型 支持第三方应用开发。XML部署描述符用于应用开发者和部署者之间交流信息。
• Application composition:多个应用可能会执行同一个到来或发送的请求或响应。每个应用拥有自己的一系列规则,并且以定义好的有序的方式独立于其他应用执行。
• Carrier grade: servlet s将应用数据存储在容器管理的session对象中。为实现高可达性,可能需要保持或复制这些数据。
2.3 对协议的支持
SIP Servlet 支持RFC3261定义的基础SIP 功能,同时还支持一些SIP 扩展:事件通知框架(RFC3265)和为即时消息定义的Message方法(RFC3428)。
2.4 几个特点
FOCUS:enabling communication capabilities to non-telecom developers.
Converged Application:一个Servlet 应用可能同时包含SIP servlet 和HTTP servlet 。聚合的容器用来部署* SIP 和HTTP servlet ,并且允许状态在他们之间共享。通过应用session将多个协议session绑定在一起。
Application Composition:SIP Servlet 允许一个请求触发多个应用。应用组合功能的选择和多条匹配规则的选择交由应用来管理。但是,如果实现了应用的组合,那么规范要求 cascaded业务模型 ,即应用之间是互相独立的,每一个都必须遵守标准的SIP 规则。
2.5 编程模式——容器 SIP Servlet 的另一个特点
SIP servlet 最核心的概念是容器。SIP Servlet 容器既可以控制下层的SIP 事务,也可以管理已经建立的对话。SIP Servlet 容器负责管理监听点、线程、事务、对话、会话状态和应用组件等资源,提供了可供应用程序使用的许多服务,比如自动重试、消息调度和排队、分流和归并,以及状态管理。应用程序中只需包含高级的消息处理和业务逻辑。这使SIP 服务的开发成为一件轻而易举的事情。业务开发优势之一
基于SIP Servlet 和基于HTTP Servlet 进行应用开发的模式很相似,这对于熟悉HTTP Servlet 编程的开发人员来说,使用SIP Servlet 开发变得非常容易。此外,SIP Servlet API与J2EE Servlet API的关系密切,并且它具有较强的可扩展性。业务开发优势之二
2.6 JAIN SIP 与SIP Servlet 比较
适用平台不同:JAIN SIP 适用于J2SE平台;SIP Servlet 适用于J2EE平台。
SIP Servlet 旨在enabling communication capabilities to non-telecom developers,这使得它更适合于各种业务的开发,包括企业级应用;而JAIN SIP 没有这一特点。个人认为,这是决定SIP Servlet 广泛用于聚合业务开发的很重要的因素。
JAIN SIP 在使用和开发应用时比SIP Servlet API更友好;SIP Servlet 运行在Java EE容器上,因此使用环境更加强健。这种说法不太理解,是指JAIN SIP 编程模式更简单吗?
JAIN SIP API典型应用是用于客户端应用的开发;SIP Servlet API更适合于服务器端应用的开发。
3 JSIP
http://jsip.sourceforge.net/
已有10多年未更新了。
下载地址
JSIP
4 OpenJSIP
OpenJSIP是在Jain-sip的基本上,结合Java RIM开发的分布式SIP服务软件。
以下是GitHub的介绍
Open Java SIP - opensource SIP services implemented in Java ( SIP Proxy, SIP Registrar etc. )
About OpenJSIP is a GNU GPL licensed bundle of free distributed SIP services run by Java VM. Distributed means that these services can be deployed on different hosts communicating with each other with the help of Remote Method Invocation (RMI). Distributed architecture allows creation of redundant and load-balanced systems.
At the current stage of development (v0.0.4) the project includes:
SIP Proxy Statefull operation Stateless operation SIP Registrar Standalone (can listen to requests itself) ViaProxy (proxy listens to requests and deliver registrations to registrar) SIP Location Service No database integration. Keeps data in memory (for now) OpenJSIP is based on SIP stack provided by JAIN-SIP project. Thanks to all the authors for this incredible work.
Github
GoogleCode
4.1 OpenJSIP services running on one host
image.png
4.2 OpenJSIP services running on separate hosts (distributed model)
image.png
4.3 部署.
需要环境
Java Runtime Environment 6 (1.6) 以上版本,并配置了环境变量。
部署
把下载的压缩包解压到一个父目录名字没有空白的路径下,然后进入“~/openjsip/bin”目录下,把“cmdclient.bat"和“openjsip.bat”文件里的“set base_dir=”后的路径改成你的openjsip解压存放的路径。
启动
打开CMD进入到"~/openjsip"路径下,依次运行如下命令启动OpenJSIP服务。
~\openjsip> start rmiregistry
~\openjsip> start bin\openjsip.bat start location-service
~\openjsip> start bin\openjsip.bat start registrar
~\openjsip> start bin\openjsip.bat start proxy
5 PJSIP
参考:https://www.jianshu.com/p/ed1737fdc757
[size=large]网站上关于基于
sip
的
java
编程实例实在是太少了,这个严重影响了
sip
的传播和发展,所以我上传了这个小实验,让大家参考下。
在做实验前,我们需要一些东西:
我的环境:
Eclipse
这个需要在网上自己找,或者hi我,我也可以给你们哈。
-
-
-
-
百度账号:时光可见
好了,现在看程序了哈,主要是三个文件。
MessagePr...
在
Java
中实现
SIP
通话可以使用
SIP
API,比如
SIP
API for
Java
(
SIP
Server API) 或者 MJ
Sip
。
使用
SIP
API for
Java
(
SIP
Server API) 可以这样写代码:
import
java
.io.IOException;
import
java
.net.InetAddress;
import
java
x.
sip
.C...
Java
扫雷游戏 JVMine
JVMine用Applets开发的扫雷游戏,可在线玩。
public class JVMine extends
java
.applet.Applet 简单实现!~
网页表格组件 GWT Advanced Table
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能!
Google Tag Library
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。
github
-
java
-
api
github
-
java
-
api 是 Github 网站 API 的
Java
语言版本。
java
缓存工具 SimpleCache
SimpleCache 是一个简单易用的
java
缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。
Java
对象的SQL接口 JoSQL
JoSQL(SQLfor
Java
Objects)为
Java
开发者提供运用SQL语句来操作
Java
对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何
Java
对象集进行查询,排序,分组。
搜索自动提示 Autotips
AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。
WAP浏览器 j2wap
j2wap 是一个基于
Java
的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。
Java
注册表操作类
jar
ed
jar
ed是一个用来操作Windows注册表的
Java
类库,你可以用来对注册表信息进行读写。
GIF动画制作工具 GiftedMotion
GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。
Java
的PList类库 Blister
Blister是一个用于操作苹果二进制PList文件格式的
Java
开源
类库(可用于发送数据给iOS应用程序)。
重复文件检查工具 FindDup.tar
FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。
OpenID的
Java
客户端 JOpenID
JOpenID是一个轻量级的OpenID 2.0
Java
客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。
JActor的文件持久化组件 JFile
JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。
Google地图JSP标签库
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要
java
script或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。
OAuth 实现框架 Agorava
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。
Eclipse的
Java
Script插件 JSEditor
JSEditor 是 Eclipse 下编辑
Java
Script 源码的插件,提供语法高亮以及一些通用的面向对象方法。
Java
数据库连接池 BoneCP
BoneCP 是一个高性能的
开源
java
数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K
Java
扫雷游戏 JVMine
JVMine用Applets开发的扫雷游戏,可在线玩。
public class JVMine extends
java
.applet.Applet 简单实现!~
网页表格组件 GWT Advanced Table
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能!
Google Tag Library
该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。
github
-
java
-
api
github
-
java
-
api 是 Github 网站 API 的
Java
语言版本。
java
缓存工具 SimpleCache
SimpleCache 是一个简单易用的
java
缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。
Java
对象的SQL接口 JoSQL
JoSQL(SQLfor
Java
Objects)为
Java
开发者提供运用SQL语句来操作
Java
对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何
Java
对象集进行查询,排序,分组。
搜索自动提示 Autotips
AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。
WAP浏览器 j2wap
j2wap 是一个基于
Java
的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。
Java
注册表操作类
jar
ed
jar
ed是一个用来操作Windows注册表的
Java
类库,你可以用来对注册表信息进行读写。
GIF动画制作工具 GiftedMotion
GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。
Java
的PList类库 Blister
Blister是一个用于操作苹果二进制PList文件格式的
Java
开源
类库(可用于发送数据给iOS应用程序)。
重复文件检查工具 FindDup.tar
FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。
OpenID的
Java
客户端 JOpenID
JOpenID是一个轻量级的OpenID 2.0
Java
客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。
JActor的文件持久化组件 JFile
JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。
Google地图JSP标签库
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要
java
script或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。
OAuth 实现框架 Agorava
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。
Eclipse的
Java
Script插件 JSEditor
JSEditor 是 Eclipse 下编辑
Java
Script 源码的插件,提供语法高亮以及一些通用的面向对象方法。
Java
数据库连接池 BoneCP
BoneCP 是一个高性能的
开源
java
数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K
Java
web服务器实现
SIP
通讯(或GB28181),一般有两种选择:
Sip
Servlet和Jain
Sip
前者更适合服务器,后者较适合客户端
前者用类似web servlet的方式实现了
sip
通信,直接就实现了多线程的
sip
通信的并发
后者相对底层一点,不具有并发能力
但,前者需要Web容器的支持,目前好象能用的只有两三种,且与web servlet并存性好像也不好
故,考虑到要用
SIP
2
-
2.0w接插件是一种通信
协议
接口,用于图书馆自助借还机器与图书管理系统之间的数据传输。该接插件可以进行信息的传输和交互,可以实现图书馆读者的自助服务,如借阅和归还图书、查询图书馆藏等功能。
SIP
2
-
2.0w接插件支持多种通信
协议
,如TCP/IP、USB、串口等,以适应不同的网络和设备环境。
SIP
2
-
2.0w接插件具有高效可靠的传输性能,能够快速处理大量的数据,确保读者和图书馆管理系统之间的信息传输准确无误,提高了图书馆的自动化程度和服务水平。
SIP
2
-
2.0w接插件还可以实现图书馆数据的管理和统计,如借阅率、流通率等数据的统计,方便图书馆管理员进行工作分析和管理决策。总之,
SIP
2
-
2.0w接插件在图书馆自助服务和管理方面具有重要作用,可以提高读者的使用体验和图书馆的管理效率。