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

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
分享到:
评论

相关推荐

    JAVA版SIP电话

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

    javasipclient源码-peers:JavaSIP软电话

    java sip client源码

    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, ...

    peers-0.1.1_sip_sipstack_

    采用SIP协议栈开发,基于SIP协议的聊天室完整工程程序,包括客户端和服务器端的完整原程序

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

    NULL 博文链接:https://kata520-java.iteye.com/blog/2156022

    Java SIP softphone-开源

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

    peers0.43源代码

    一个开源的,能够支持NAT穿越的softphone软件,上手学习SIP很好的资源

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

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

    java笔试题算法-p2p-sip:Python中的开源点对点互联网电话(P2P-SIP)软件

    java笔试题算法Python 中的开源点对点互联网电话 (P2P-SIP) 软件 本项目自2015年5月17日迁移关键词: SIP 、 P2P 、 Python 、 p2psip 、 DHT 、实现成员:kundan10(所有者,版权持有人),theintencity(所有者,...

    Reliable peers and useful resources Searching

    Reliable peers and useful resources Searching for the best personalised learning path in a trust- and recommendation-aware environment

    jxta java的p2p平台 笔记

    java实现的p2p平台。JXTA目的是使网络中的各种设备(传感器,手机,pda,笔记本等)相互连接通信,JXTA是一种协议,而不是一种语言!因此JXTA是不依赖于具体平台的,但是当前的JXTA协议 是在java开发的,好像有...

    PEACHES and Peers

    Massimiliano Pala and Sean W. Smith Abstract. How to distribute resource locators is a fundamental prob- lem in PKI. Our PKI Resource Query Protocol (PRQP), recently pre- sented at IETF, ...

    core_java_career_essentials.pdf

    If you have a java interview coming up in a few days or you want to impress your peers and superiors with your technical strengths during code review sessions, team meetings, and stand-ups, and ...

    P2P视频技术源码(VC)

    TS中用来处理NEED_PEERS, SP中还需要保存和查找频道数据, 频道都使用图结构进行管理. 频道的搜索为了效率方面的因素, 采用了Hash进行搜索, ChannelHash中使用的是字符串 hash, 如hash_str所示. TS中的Channel相对...

    public-peers:Yggdrasil网络中的公共同行

    在大多数情况下,应该通过将为每个对等方提供的字符串添加到yggdrasil.conf配置文件的“ Peers: []部分中来访问公共对等方。 yggdrasil.conf中的yggdrasil.conf : Peers:[ tcp://a.b.c.d:e tcp://d.c.b.a:e tcp://...

    java8看不到源码-cqlkit:将Cassandra查询导出为CSV和JSON格式的CLI工具

    看不到源码CQLKIT cqlkit是一个 CLI 工具,用于将 Cassandra 查询导出为 CSV 和 JSON 格式。 Cassandra 不擅长 Ad-hoc 查询, cqlkit允许您将查询结果导出为半结构化(JSON)或结构化数据(CSV)。 有很多可供您查询...

    Measuring Ethereum Network Peers

    Ethereum, the second-largest cryptocurrency valued at a peak of $138 billion in 2018, is a decentralized, Turing-complete computing platform. Although the stability and security of Ethereum—and ...

    Sip Audio Feeding Agent-开源

    Sip现场音频馈送代理。 该代理从声卡捕获音频,然后使用RTP将实时音频流(uLaw)发送给呼叫者(sip电话)。 它基于Peers 0.3(http://peers.sourceforge.net/)。 可以用于IP电话中以广播现场音频。

    Adidas 3Q21 China sales underperform its domestic peers.pdf

    Adidas 3Q21 China sales underperform its domestic peers.pdf

    ASAv 10 vmware - Activated.rar

    Premium Peers : 2 perpetual Essentials : Disabled perpetual Other Peers : 250 perpetual Total Peers : 250 perpetual Shared License : Disabled perpetual for Mobile : Disabled perpetual for Cisco ...

Global site tag (gtag.js) - Google Analytics