`
w7849516230
  • 浏览: 20287 次
文章分类
社区版块
存档分类
最新评论

sip phone系列之Java sip phone(peers)源码浅析

 
阅读更多
从整理几款sip phone,到简单修改播放声音文件,发现少了最基本的环境搭建及源码的认识,现在重新记录下。
1.sip简要介绍
这里提及一些sip相关的必要知识,方便对该协议有个整体的了解,同时也可以为后续相关的应用开发提供准备。更详细的内容可以参考对应的RFC文档(RFC3261等等)。sip(Session Initiation Protocol)会话初始协议,简单来说就是负责多媒体通信(两个或者多个终端)会话的建立、修改和终止,而且是一个应用层控制协议。可以看到它是不足以支撑完整的多媒体会话的,但它可以方便的通过与SDP(会话描述协议,协商采用的协议)、RTP(实时传输协议)等结合提供完整多媒体通信功能。后面在介绍这款Java sip phone(peers)的源码框架时会看到。
单就sip协议来说(RFC3261),sip协议的功能实现用户的注册,会话的邀请或者接受会话,会话参数服务的修改,会话的结束等(没有用官方的用户定位等功能描述,需要的可以自己查看),因此需要注册服务器、代理服务器实现用户注册,位置查找,进而实现会话邀请等sip消息(主要就是请求和响应两种)的转发,对应的客户端有UserAgent(包括UAC:UserAgent Client和UAS:UserAgent Server )来负责实现会话的邀请和响应等。
sip协议栈如下图所示,但据说只是逻辑实体,真正的实现上可能会有所重合的


SIP的最底层是语法和编码层(对应上图协议栈),其上是传输层(记住sip协议是应用层协议),传输层之上是事务层,再上是事务用户层;其中一个事务定义为UAC发送的一个请求报文和由这个请求报文所引起的所有由UAS发送的响应报文。事务层负责处理应用层的报文超时重传、定时器设置、报文排序、重复报文处理和响应报文与请求报文的匹配等等;事务用户层它描述了不同SIP实体在事务层之上对SIP报文的处理,例如当要发送一个请求时,事务用户会创建一个客户机事务的实例并将请求报文和目标必要信息(包括目标IP地址、端口号、传输层协议等)传递给该事务进行处理。
2.环境搭建及使用
在了解上述概念后,我们来看环境搭建,本人是在Windows XP下配合使用虚拟机完成。sip phone一般的使用方式还是C/S模式的,因此,需要一个服务器来实现注册、代理转发、重定向等功能,我这里使用的是sipfoundry,客户端使用Peers,配合X-Lite,Jitsi(功能强大的软电话,前者是个商用产品,后者也是个开源软件,前文里有说。)sipfoundry可以直接下载光盘镜像,我的是和CentOS系统一起的Iso文件,从虚拟机中安装即可,官方有详细的安装文档,当系统安装完成后,启动有如下界面:


然后可以通过上述的IP从浏览器中直接访问,当然那个IP是需要在安装时配置的。进入管理界面后的添加用户之类的操作之类不再细说。
X-Lite和Jitsi下载后直接可以使用,Peers下载后点击bat文件直接运行,当下载的为源码时,可以通过Eclipse导入工程,然后运行即可。注意Jitsi和Peers拨号时的名称完整为sip:user@server.com,在Jitsi中省略了sip:。可以来体验下,现在服务器中添加200 和201用户,假设服务器地址为192.168.0.50,那么启动X-Lite,Accounts setting中配置用户名和地址(200),启动Peers设置用户名201或者不设也行,在Peers中输入200@192.168.0.50,点击call即可拨打,后面都简单了。
3.peers源码框架
peers的文档也非常详细,可以好好阅读下。Peers的源码包目录如下:


其中conf中包括peers的配置文件,有用户名、密码等等;logs里是日志文件,media中在调试模式下时,会产生媒体调试输出信息,一般导出的可执行Jar包包括这三个目录即可。

net.sourceforge.peers目录中为Log,config等信息代码,其它的可以从下图中看到其作用,因此如果没有特别要求,标准的JDK已经足够,不需要下载额外的库。


在源码目录中的core.useragent也正是上面阐述的,包括UAC和UAS,而我们接触最多的也正是这两个。在peers运行中,gui目录中维持了会话状态的状态机,而其中实现各种事件响应的主要是CallFrame和Eventmanager,其中CallFrame主要负责界面上的按键响应,Eventmanager则一方面实现CallFrameListener的事件响应,另一方面建立了UserAgent实例,并实现了SipListener的事件响应。UserAgent则是sip phone中最重要的部分了,里面包括了UAC UAS等等一系列实现多媒体通信的实例对象,因此,集成自己的应用可以再gui目录中提取出自己想要的部分,主要是EventManager类。
最后,提醒注意几个问题,一是如果本机有虚拟机,会造成Peers接收挂断等消息错误,主要是因为其绑定的IP可能是虚拟机IP,因此需要正确设置IP;另一方面是如果想建立多个sip客户端时,即使在gui等方面取消了限制,注意端口绑定的问题。

转载注明出处:http://blog.csdn.net/w7849516230/article/details/7714552
联系邮箱:w.7849516230@163.com
分享到:
评论

相关推荐

    miniSipServer + peers 实面的SIP实例(含源码)

    这个实例包括了miniSipServer的使用以及peers的配置,提供了源码分析的机会,有助于深入理解SIP的工作原理和实际应用。 首先,我们需要了解SIP的基本概念。SIP由IETF定义,主要由用户代理(UA)、代理服务器、...

    JAVA版SIP电话

    java版本的sip软电话。本地安装SIP服务(比如freeswitch)之后,导入源码,运行 net.sourceforge.peers.gui.MainFrame类中的main函数。设置账号(1001),密码(1234),domain(192.168.1.10)。即可注册。亲测有效...

    java SIP 测试demo 可运行,有源代码

    Java SIP(Session Initiation Protocol)测试DEMO是一个用于实现VoIP(Voice over Internet Protocol)通信的应用程序示例,它展示了如何在Java环境中使用SIP协议进行实时通信,如语音通话和视频聊天。这个DEMO是可...

    javasipclient源码-peers:JavaSIP软电话

    JavaSIP软电话是一款基于Java开发的SIP(Session Initiation Protocol)客户端应用,它允许用户进行VoIP(Voice over IP)通信,如语音通话、视频通话和即时消息。SIP是一种互联网协议,用于建立、修改和终止多媒体...

    peers-0.1.1_sip_sipstack_

    本文将深入探讨一个名为“peers-0.1.1_sip_sipstack_”的项目,这是一个利用SIP(Session Initiation Protocol)协议栈构建的聊天室应用程序。该程序包含客户端和服务器端的完整源代码,为开发者提供了一个学习和...

    peers-0.3.rar_it_peers_sdp_sip_sip rtp java

    Peers is a very minimalistic SIP User-Agent. It s a softphone, written in java, and it has been tested on linux and windows. It allows a user to call from one PC to another on a local area network, ...

    sip软电话源代码

    5. **src**:这是源代码目录,通常包含Java、C++或其他编程语言的源码文件,是我们分析 sip软电话核心功能的关键所在。 6. **keys**:可能包含密钥文件,用于数字签名或加密通信,确保通话的安全性和私密性。 7. *...

    Sip协议java

    在Java中实现SIP通信,通常会用到Java SIP API,这是一个由Java通信API(JSR 289)定义的标准接口。这个API提供了一套完整的类和接口,用于创建和解析SIP消息,管理会话,并处理网络事件。例如,`javax.sip`包中的`...

    基于Java开发的国内首个替代FREESWITCH网络交换系统设计源码

    该项目源码使用Java语言精心打造,总共包含了500个文件,为我国网络通信技术的自主创新与发展迈出了重要一步。 项目中包含的主要文件类型有Java源代码文件、XML配置文件、Git忽略文件、属性文件、YAML文件、LICENSE...

    peers0.43源代码

    在peers的源代码中,可以看到如何使用Java编程语言实现SIP和ICE协议。Java是一种广泛使用的、跨平台的编程语言,非常适合开发网络应用。peers的源代码可能包含了以下关键组件: 1. SIP客户端:实现SIP消息的发送和...

    基于jain sip的聊天室 完整版 服务器+客户端

    JAIN SIP(Java API for Integrated Networks Session Initiation Protocol)是Java语言中用于实现会话初始化协议(SIP)的应用编程接口。SIP是一种应用层控制协议,用于创建、修改和终止多媒体通信会话,如语音和...

    Sip2Peer的示例程序

    Sip2Peer的核心功能是通过JXTA(Java eXtensible Networking Architecture)来构建P2P网络。JXTA是一个开放源代码项目,由Sun Microsystems发起,它提供了一套标准协议和API,用于设备间的对等互连。JXTA支持多种...

    Java SIP softphone-开源

    Peers是一个非常简单的软件... 这是一个用Java编写的SIP用户代理,可在Windows,Linux和Mac上运行。 它可以与SIP服务器(例如opensips或星号IPBX)一起使用。 它支持G711编解码器(PCMU和PCMA)和电话事件(DTMF)。

    sip server搭建(VMware player+CentOS5.5+asterisk)

    1. 使用 sip show peers 命令来显示当前 SIP 服务器的 peers 信息; 2. 使用 sip show channels 命令来显示当前 SIP 服务器的 channels 信息; 3. 使用 sip show registry 命令来显示当前 SIP 服务器的 registry ...

    基于Java的实例源码-P2P源码 Azureus 2.5.0.2(JAVA).zip

    通过分析Azureus的源码,开发者可以学习到如何在Java中实现P2P网络通信,理解BitTorrent协议的细节,以及优化资源管理的策略。这对于深入研究网络编程,特别是P2P领域的开发者来说,是一份宝贵的参考资料。

    基于java的P2P源码 Azureus 2.5.0.2(JAVA).zip

    Azureus是一款著名的P2P(peer-to-peer)文件分享客户端软件,主要基于Java技术开发,因此得名“基于java的P2P源码”。这款软件使用BitTorrent协议,允许用户共享和下载大文件,如电影、音乐、软件等。Azureus 2.5....

    2台Elastix通过SIP对接测试

    可以通过输入sip show peers命令来查看SIP对接的状态。 8. Elastix双机热备 Elastix支持双机热备,可以确保电话系统的高可用性。在本文中,我们使用了两台Elastix服务器,通过SIP对接测试连接两台服务器,确保电话...

    android P2P技术实现源码

    2. **JavaApk源码说明.txt** - 这个文件可能包含对源代码的详细解释,包括关键类、方法和逻辑的描述,是理解P2P实现的重要参考资料。 - 通常,源码说明会涉及如何初始化`WifiP2pManager`,设置监听器,发现和连接...

    p2p-sip:Python 中的开源点对点互联网电话 (P2P-SIP) 软件

    新增:项目描述已从 39peers.net 网站移至此页面点对点系统本身具有很高的可扩展性、容错性和针对灾难性故障的鲁棒性,因为没有中央服务器并且网络自我组织。 互联网电话可以是对等架构的一种应用,参与者可以在...

    CTorrent程序源码分析

    CTorrent程序源码分析主要涉及的是对BitTorrent协议的理解以及CTorrent这个开源BT客户端的剖析。BitTorrent协议是一种点对点(Peer-to-Peer, P2P)文件传输协议,由Bram Cohen创建,用于高效地分发大量数据。协议的...

Global site tag (gtag.js) - Google Analytics